一、介绍
K8S日志解决方案EFK包含(ES,kibana,FileBeat/Fluentd),下面介绍两种部署方案。
二、ELK 套件的安装
1、拉取ELK集成镜像
docker pull sebp/elk
2、运行容器
docker run -itd --name elk -p 5601:5601 -p 9200:9200 -p 5044:5044 sebp/elk
问题:ES启动时出现异常,报错:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。
解决方法
#修改文件
vim /etc/sysctl.conf
#添加参数
vm.max_map_count = 262144
#重新加载/etc/sysctl.conf配置
sysctl -p
3、测试
访问一下 http://ip:5601 看看 Kibana 的效果
当然,目前没有任何可以显示的 ES 的索引和数据,再访问一下 http://ip:9200 看看 Elasticsearch 的 API 接口是否可用:
三、Filebeat 配置
1、安装Filebeat
这里我们通过 rpm 的方式下载 Filebeat,注意这里下载和我们 ELK 对应的版本(ELK 是 7.16.2,这里也是下载 7.16.2,避免出现错误):
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-x86_64.rpm
rpm -ivh filebeat-7.16.2-x86_64.rpm
2、配置Filebeat
这里我们需要告诉 Filebeat 要监控哪些日志文件 及 将日志发送到哪里去,因此我们需要修改一下 Filebeat 的配置:
vim /etc/filebeat/filebeat.yml
要修改的内容为:
a、监控哪些日志?
这里指定docker容器的日志目录
b、将日志发到哪?
这里指定直接发送到 Elasticsearch,配置一下 ES 的接口地址即可。
注意:如果要发到 Logstash,请使用后面这段配置,将其取消注释进行相关配置即可:
3、启动Filebeat
由于 Filebeat 在安装时已经注册为 systemd 的服务,所以只需要直接启动即可:
systemctl start filebeat
systemctl status filebeat
四、Kibana配置
接下来我们就要告诉 Kibana,要查询和分析 Elasticsearch 中的哪些日志,因此需要配置一个 Index Pattern。从 Filebeat 中我们知道 Index 是 filebeat-timestamp 这种格式,因此这里我们定义 Index Pattern 为 filebeat-*。
单击 Create index pattern 按钮,即可完成配置。 这时我们单击 Kibana 左侧的 Discover 菜单,即可看到容器的日志信息啦:
五、Fluentd 引入
整个日志收集与处理流程变为下图,我们用 Filebeat 将 Fluentd 收集到的日志转发给 Elasticsearch。
当然,我们也可以使用 Fluentd 的插件(fluent-plugin-elasticsearch)直接将日志发送给 Elasticsearch,可以根据自己的需要替换掉 Filebeat,从而形成 Fluentd => Elasticsearch => Kibana 的架构,也称作 EFK。
1、运行Fluentd
docker run -itd --name fluentd -p 24224:24224 -p 24224:24224/udp -v /etc/fluentd/log:/fluentd/log fluent/fluentd
2、修改配置
此外,我们还需要修改 Filebeat 的配置文件,将 / etc/fluentd/log 加入监控目录下:
vim /etc/filebeat/filebeat.yml
#重启
systemctl restart filebeat
3、运行测试容器
为了验证效果,这里我们 Run 两个容器,并分别制定其 log-dirver 为 fluentd
docker run -d --log-driver=fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="test-docker-A" busybox sh -c 'while true; do echo "This is a log message from container A"; sleep 10; done;'
docker run -d --log-driver=fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="test-docker-B" busybox sh -c 'while true; do echo "This is a log message from container B"; sleep 10; done;'
4、验证效果
这时再次进入 Kibana 中查看日志信息,便可以通过刚刚设置的 tag 信息筛选到刚刚添加的容器的日志信息了