整理了一下使用Docker来快速搭建一套ELK日志分析系统的方法。
github上有人整理了一套使用docker compose来部署elk的配置,可直接下载使用。
git clone https://github.com/deviantony/docker-elk.git
当前是基于7.7.1版(docker-elk目录下.env文件中定义,可修改)。
可以调整一下相应的配置,不设置可以直接也可以跳过这一步。
修改docker-compose,设置es密码等,
vim docker-compose.yml # 在elasticsearch部分设置环境变量,将jvm堆内存增大到了1g,设置es elastic用户的密码 environment: ES_JAVA_OPTS: "-Xmx1g -Xms1g" ELASTIC_PASSWORD: Passw0rd # 新增监听端口号8010 udp,不使用udp搜集数据可以不开启 ports: - "8010:8010/udp" # 将jvm内存也增大一点 environment: LS_JAVA_OPTS: "-Xmx512m -Xms512m" # 在volumes部分增加es数据目录的挂载,对es数据持久化,避免容器销毁数据丢失 volumes: - /mnt/elk/esdata:/usr/share/elasticsearch/data注意:因为es容器内部是以elasticsearch用户启动进程的,所以在做持久化数据目录挂载的时候,需要将目录权限进行设置,否则会因为没有访问权限而启动失败。elasticsearch的uid是1000,可以建一个uid为1000的用户,然后将目录所有者赋予该用户。
修改es配置文件,将xpack从trial改为basic,禁用付费功能(测试环境可以不用修改)
vim elasticsearch/config/elasticsearch.yml #xpack.license.self_generated.type: trial xpack.license.self_generated.type: basic
修改logstash的pipeline配置
## vim logstash/pipeline/logstash.conf input { ## 使用redis搜集数据 redis { id => "RedisLog" batch_count => 1 data_type => "list" key => "kg:basic:log" host => "127.0.0.1" port => 6379 password => "1q2w3e4r" db => 6 threads => "5" type => "kglog" } ## 使用UDP收集数据 udp { id => "UdpLog" port => 8010 type => "udplog" codec => json } } ## 添加到elasticsearch或者在磁盘中打印,磁盘打印可以方便测试数据是否收集成功,上线后删除即可 output { if[type] == "kglog"{ elasticsearch { hosts => "elasticsearch:9200" user => "elastic" password => "changeme" index => "kg-log" } } if[type] == "udplog"{ elasticsearch { hosts => "elasticsearch:9200" user => "elastic" password => "changeme" index => "udp-log" } } file { path => "/var/tmp/udp.log" } }
配置调整后,使用 docker-compose up -d 即可启动es,logstash,kibana三个容器。第一次启动需要下载所有镜像,会比较慢,启动完后,访问 elk所在服务器IP:5601即可进入kibana页面。
使用nc(netcat)测试udp协议与端口连通性,来判断数据是否搜集成功
$ echo "nc-test" | nc -u 106.14.145.99 8010 # ip换成自己的服务器地址即可,请注意务必在服务器安全组访问规则中开启8010 UDP # 查看logstash中的数据收集情况 $ docker-compose exec logstash bash $ tail -f /var/tmp/udp.log # 没有此文件或没有日志则没有收集成功,排查端口和安全规则检查索引是否启用
添加Kibana索引
然后就可以愉快地玩耍了
本文整理了基于Docker来搭建ELK框架的整个过程,供参考。