ELK in Docker 安装、配置和效果展示

根据以下内容尝试做出自己的可视化日志分析系统。

0、架构设计

架构中,采用了两个docker容器,一个sectong/elk,另一个mysql/mysql-server:5.5

1、Install安装

准备工作

如果宿主主机是CentOS6,请按照如下方法准备:Docker and docker-compose in CentOS 6 如果宿主主机是CentOS7,请按照如下方法准备:Docker and docker-compose in CentOS 7 如果是其他Linux宿主机,请自行Google

下载源码

最好fork一下,经常会有更新

# git clone https://github.com/sectong/elk-jdbc-zepplin-mysql
# ll elk-jdbc-zepplin-mysql

目录结构说明

drwxr-xr-x. 2 root root 4096 11月  2 16:47 config
drwxr-xr-x. 3 root root 4096 10月 28 15:47 data
-rw-r--r--. 1 root root  628 11月  2 15:52 docker-compose.yml
-rw-r--r--. 1 root root   42 11月  2 16:06 README.md
drwxr-xr-x. 3 root root 4096 11月  2 15:54 zeppelin

config:logstash配置文件,包含input,filter,output等配置文件; data:Elasticsearch数据保存位置,请勿擅自修改; docker-compose.yml:本系统启动脚本,看不懂请参考官方文档; README.md:这个只是说明文档; zeppelin:Zeppelin配置和Notebook保存位置,后面需要修改;

预跑一下

为了后面的步骤可以正常进行,这步骤还真的很重要。

# cd elk-jdbc-zepplin-mysql
# docker-compose up -d

第一次,这个过程很缓慢,看你的网速了。此处忽略很多行。。。

Creating sectongelkjdbczeppelin_mysql_1...
Creating sectongelkjdbczeppelin_elk_1...

# netstat -nlptu

看看这些端口起来了,说明迈出了第一步。

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 :::8081                     :::*                        LISTEN      4011/docker-proxy   
tcp        0      0 :::3306                     :::*                        LISTEN      3878/docker-proxy   
tcp        0      0 :::80                       :::*                        LISTEN      4071/docker-proxy   
tcp        0      0 :::8080                     :::*                        LISTEN      4055/docker-proxy   
udp        0      0 :::514                      :::*                                    4063/docker-proxy   

打开浏览器,http://192.168.1.230,出现kibana界面,证明成功了。

2、Configuration配置

数据源

注意:这里我们都用了默认的syslog udp: 514 端口。 如果是linux,在rsyslog.conf或syslog.conf文件中将日志转发到你的宿主主机

*.*     @192.168.1.230

如果是其他系统,比如m0n0wall防火墙(我们将以m0n0wall防火墙日志为例),配置日志转发目的地

接收、解析、入库

接收(logstash input)

本例中,我们的文件是: config/01-inputs-syslog.conf,其中5140是docker 容器内部使用,可以随意

# cat config/01-inputs-syslog.conf
input {
  syslog {
    port => 5140
  }
}

解析(filter)

解析文件: config/12-filters-m0n0wall.conf,grok是解析日志内容,geoip是转换源地址到geoip库,这样可以产生很多字项目,比如:国家,城市,GPS坐标等

filter {
        grok {
                match => [ "message", "%{TIME} %{DATA:interface} %{DATA:group}:%{DATA:rule_num} %{DATA:action} %{IP:source_ip},%{DAT
A:source_port} -> %{IP:destination_ip},%{DATA:destination_port} PR %{WORD:protocol} len %{NUMBER:header_length} %{NUMBER:total_lengt
h} -%{WORD:flags} %{WORD:direction}" ]
        }
        geoip {
            add_tag => [ "GeoIP" ]
                source => "source_ip"
        }              
}

入库(output)

我们本例中,入库分为两种:mysql(给zeppelin或其他BI工具使用)和elasticsearch(给kibana使用)。

mysql

mysql入库需要logstash插件支持,Zeppelin Interpreter MySQL 体验之旅(数据可视化)。

output {
  jdbc {
    driver_class => "com.mysql.jdbc.Driver"
    connection_string => "jdbc:mysql://mysql/zeppelin?user=root&password=talent"
    statement => [ "INSERT INTO logs (host, timestamp, src_ip, dst_ip, country, city, message) VALUES(?, ?, ?, ?, ?, ?, ?)", "host",
 "@timestamp", "source_ip", "destination_ip", "[geoip][country_name]", "[geoip][city_name]", "message" ]
  }
}

elasticsearch

保存到本地elasticseach即可。

output {
  elasticsearch {
    host => localhost
    cluster => logstash
  }
}

现在可以说,万事俱备,只欠东风了,let's go

3、Visualization可视化

kibana分析

不多说了,kibana4的操作手册随便一搜到处都是。打开: http://192.168.1.230,其中内置了Dashboard,可以查看:

这是基于apachelog的日志分析报表。

zeppelin分析(其他BI也可以参考)

打开: http://192.168.1.230:8080,出现Zeppelin管理界面,可以自定义报表模式,可以[参考一下这里](http://blog.csdn.net/jiekechoo/article/details/49356361),再详细的内容得[参考官方](http://zeppelin.apache.org)了:)。简单做了一个,如下图:

至此,本文也算是简单把流程跑完了。

来源: https://blog.sectong.com/blog/elk_in_docker.html

发表评论