摘要: 本文对于日常日志收集、分析和报表展示具有参考价值,请根据以下内容尝试做出自己的可视化日志分析系统。 0、架构设计 架构中,采用了两个docker容器,一个sectong/elk,另一个mysql/mysql-server:5.51、Install安装 i...
本文对于日常日志收集、分析和报表展示具有参考价值,请根据以下内容尝试做出自己的可视化日志分析系统。
0、架构设计
架构中,采用了两个docker容器,一个sectong/elk,另一个mysql/mysql-server:5.5
1、Install安装
id="准备工作">准备工作
如果宿主主机是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 )了:)。简单做了一个,如下图:
至此,本文也算是简单把流程跑完了。
稿源:http://blog.sectong.com/blog/elk_in_docker.html