整理了一下使用Docker来快速搭建一套ELK日志分析系统的方法。
1. 部署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页面。
2. 调测
使用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
# 没有此文件或没有日志则没有收集成功,排查端口和安全规则
3. 使用Kibana
检查索引是否启用

添加Kibana索引

然后就可以愉快地玩耍了

3. 总结
本文整理了基于Docker来搭建ELK框架的整个过程,供参考。
版权声明:本文为Thinking771470736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。