使用Docker搭建ELK日志系统
使用Docker技术搭建ELK日志系统
零,前言
本文主要是参考 dockerinfo 该文进行了ELK日志系统的搭建,其中docker的配置文件也主要由该博客提供,本人做的只是在这个文章的基础上,删除了部分本文不需要的,同时记下了搭建过程中的一些问题。
关于ELK,本文不做过多的介绍,详细可以查看官网,这里先贴出我们一般的ELK日志系统的架构图
ElasticSearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。这是一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎。
Logstash是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集,过滤与解析,并将其存入ElasticSearch中。
Kibana是一款 基于Apache开源协议,为ElasticSearch提供分析和可视化的Web平台,它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图。
在实际应用中,使用Logstash来收集日志,往往面临开销大的问题,所以实际中往往会用Filebeat来做为日志收集器,而Logstash负责过滤与解析。此时架构图如下:
实现本文的日志系统所需的环境要求:系统环境是ubuntu 16.04(也可以是其他),需要安装如下的软件(软件必需)
- docker
- cocker-compose
version: '2'
services:
elasticsearch:
image: elasticsearch:2.2.0
container_name: elasticsearch
restart: always
network_mode: "bridge"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ./data:/usr/share/elasticsearch/datadocker-file
version: '2'
services:
logstash:
image: logstash:2.2.0-1
container_name: logstash
restart: always
network_mode: "bridge"
ports:
- "5044:5044"
# - "4560:4560"
- "8080:8080"
volumes:
- ./conf:/config-dir
- ./patterns:/opt/logstash/patterns
external_links:
- elasticsearch:elasticsearch
command: logstash -f /config-dir
其中暴露的5044端口是用来接收来自Filebeat收集的日志数据,8080用于接收来自插件Logstash-input-http的日志数据;挂载 conf 目录,用于添加我们自定义的配置文件,patterns用于添加我们自定义的grok规则文件;同时设置外部连接,与elasticsearch容器进行连接,用来传送数据;
input {
beats {
port => 5044
type => "log"
}
http {
port => 8080
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
input {
stdin {}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
}
stdout {
codec => rubydebug
}
}
三,测试 Logstash与Elasticsearch联通性
为了测试已经启动的这两上容器是否已经联通,我们需要进入到Logstash的镜像中去,首先查看它的容器IDdocker ps ; 得到ID号后,运行命令 sudo docker exec -it ID号 /bin/bash 便 可以进入到容器环境中,进入后,我们直接 cd conf-dir 进入到我们的配置文件目录,里面有我们在外面已经设置好的配置文件,输入 命令 logstash agent -f logstash-es-simple.conf 显示成功后,可以输入任何字符,查看是否有返回值;然后我们可以直接查看 IP:9200/_search?pretty来查看是否有新数据添加。
相关的命令截图如下:
成功运行上面的过程之后,可以查看下ip:9200/_search?pretty,可以看到我们的Elasticsearch里面已经多了我们刚刚添加的两条记录。
测试完毕。
四,搭建Filebeat
还是首先来看下Filebeat的docker-compose.yml配置文件
version: '2'
services:
filebeat:
image: olinicola/filebeat:1.0.1
container_name: filebeat
restart: always
network_mode: "bridge"
extra_hosts:
- "logstash:192.168.0.102" //这里的IP要是真实的IP,不能是127.0.0.1
volumes:
- ./conf/filebeat.yml:/etc/filebeat/filebeat.yml
- ./registry:/etc/registry
- /tmp:/tmp
其中挂载的tmp目录是用来测试的。
除了上面的docker-compose.yml文件之后,我们还要添加一个filebeat.yml文件,内容如下:
filebeat:
prospectors:
-
paths:
- /tmp/test.log
input_type: log
tail_files: true
registry_file: /etc/registry/mark
output:
logstash:
hosts: ["logstash:5044"]
shipper:
name: n31
logging:
files:
rotateeverybytes: 10485760 # = 10MB
这个文件的作用主要是用来定义收集哪里的文件日志。保存完毕之后,就直接运行docker-compose up -d就可以了。
五,测试Filebeat,Logstash,Elasticsearch的连通性
为了测试这步的连通性,我们的做法是通过往/tmp目录下面的文件写入日志数据(模拟)来看看我们的logstash是否可以正常接收
命令如下:
# 1.创建日志文件
touch /tmp/test.log
# 2.向日志文件中写入一条nginx访问日志
echo '127.0.0.1 - - [13/Mar/2017:22:57:14 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36" "-"' >> /tmp/test.log
如果正常的话,稍过一会,查看 IP:9200/_search?pretty里面应该就会多出一条我们刚刚添加的日志记录了。
六,Kibana配置
其docker-compose.yml配置文件如下:
version: '2'
services:
kibana:
image: kibana:4.4.0
container_name: kibana
restart: always
network_mode: "bridge"
ports:
- "5601:5601"
external_links:
- elasticsearch:elasticsearch
保存后,直接运行docker-compose up -d就可以了。
访问 http://IP:5601 (这里的IP是布署的机子的IP),点击create建立索引,然后查看Discover,可以看到我们的Elasticsearch存储的全部数据(Kibana会默认显示15分钟内的日志数据,在页面 排右上角可以调整这个时长)。
参考:
https://github.com/jasonGeng88/blog/blob/master/201703/elk.md
http://www.dockerinfo.net/3683.html
更多推荐
所有评论(0)