上一篇 基于docker部署的微服务架构(六): 日志统一输出到kafka中间件 中,已经把分散在各个项目中的日志集中输出到了 kafka 中间件,能够在 kafka 中查看全部项目的日志。这种在控制台查看日志的方式很不方便,也不直观,搜索功能也很弱,不能知足日志统计分析的需求。下边来搭建 ELK 日志统计分析系统,经过 kibana 提供的web页面来查看日志。
简单介绍下 ELK , ELK 是 elasticsearch、 logstash、kibana 的简称,这三种工具各司其职,一块儿协做完成日志统计分析的功能。web
以前已经把日志都输出到 kafka 的 basic-log topic 下,只须要使用 logstash 把 kafka 中的数据导入到 elasticsearch 便可。docker
elasticsearch 容器比较简单,只须要挂载一个数据卷用来存储数据便可。bootstrap
运行 docker pull elasticsearch:5.0.1
下载 elasticsearch 目前最新的镜像文件。
在宿主机上建立挂载目录 mkdir -p /elasticsearch/data
,用于存储数据。
运行vim
docker run -d --name elasticsearch \ --volume /etc/localtime:/etc/localtime \ --volume /elasticsearch/data:/usr/share/elasticsearch/data \ --publish 9200:9200 \ --publish 9300:9300 \ elasticsearch:5.0.1
启动 elasticsearch 容器。
启动时若是报 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
,修改配置文件 vim /etc/sysctl.conf
,增长 vm.max_map_count=655360
。保存以后运行 sysctl -p
。从新启动 elasticsearch 容器。架构
logstash 容器须要使用自定义的镜像,用 CMD 指定加载配置文件,才能在启动容器的时候使用 -d
参数运行在后台。直接在 docker run -d
的时候指定配置文件,在容器启动以后会自动退出,不知道是否是 bug,可是使用自定义镜像能够解决这个问题。
运行 docker pull logstash:5.0.1-1
下载 logstash 目前最新的镜像文件。
在宿主机上建立挂载目录 mkdir -p /logstash/config-dir
,用于存放 logstash 的配置文件。
在目录中建立 logstash.conf 配置文件,文件内容:elasticsearch
input { kafka { bootstrap_servers => "kafka:9092" group_id => "logstash" topics => ["basic-log"] } } output { stdout {} elasticsearch { hosts => ["elasticsearch:9200"] } }
配置文件配置了一个 input 数据输入源,从 kafka 的 basic-log topic 读取数据。
配置了两个 output 输出源:微服务
这里的 kafka 和 elasticsearch 经过 docker 的 --link
链接。
建立 Dockerfile 文件,指定加载 logstash.conf 配置文件,Dockerfile 文件内容:工具
FROM logstash:5.0.1-1 CMD ["-f", "/config-dir/logstash.conf"]
在 Dockerfile 所在的目录运行 docker build -t my-logstash:5.0.1-1 .
,建立自定义的 logstash 镜像 my-logstash,使用 my-logstash 镜像就能够经过 -d
参数让容器运行在后台了。ui
在 elasticsearch 容器已经启动的状况下,运行.net
docker run -d --name logstash \ --volume /etc/localtime:/etc/localtime \ --volume /logstash/config-dir:/config-dir \ --link kafka \ --link elasticsearch \ my-logstash:5.0.1-1
由于配置了 stdout 输出,容器启动以后,能够经过 docker logs -f logstash容器ID
查看从 kafka 中读取的日志数据。
最后只须要再启动 kibana 就能够在web页面中查看日志数据了。
kibana 容器只须要链接 elasticsearch 便可。
运行 docker pull kibana:5.0.1
下载 kibana 目前最新的镜像文件。
在 elasticsearch 容器已经启动的状况下,运行
docker run -d --name kibana \ --volume /etc/localtime:/etc/localtime \ --link elasticsearch \ --publish 5601:5601
kibana 容器启动成功以后,就能够访问 http://宿主机IP:5601 打开 kibana 的页面了。
能够在 kibana 中看到全部的日志数据。