【日志可视化】ELK in Docker 安装、配置和效果展示

本文对于日常日志收集、分析和报表展示具有参考价值,请根据以下内容尝试做出自己的可视化日志分析系统。

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防火墙日志为例),配置日志转发目的地

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