docker部署EFK日志解决方案

892 阅读3分钟

一、介绍

K8S日志解决方案EFK包含(ES,kibana,FileBeat/Fluentd),下面介绍两种部署方案。

二、ELK 套件的安装

1、拉取ELK集成镜像

image.png

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 的效果

image.png

当然,目前没有任何可以显示的 ES 的索引和数据,再访问一下 http://ip:9200 看看 Elasticsearch 的 API 接口是否可用:

image.png

三、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、监控哪些日志?

image.png

这里指定docker容器的日志目录

b、将日志发到哪?

image.png

这里指定直接发送到 Elasticsearch,配置一下 ES 的接口地址即可。

注意:如果要发到 Logstash,请使用后面这段配置,将其取消注释进行相关配置即可:

image.png

3、启动Filebeat

由于 Filebeat 在安装时已经注册为 systemd 的服务,所以只需要直接启动即可:

systemctl start filebeat
systemctl status filebeat

image.png

四、Kibana配置

接下来我们就要告诉 Kibana,要查询和分析 Elasticsearch 中的哪些日志,因此需要配置一个 Index Pattern。从 Filebeat 中我们知道 Index 是 filebeat-timestamp 这种格式,因此这里我们定义 Index Pattern 为 filebeat-*。

image.png

image.png

image.png

image.png

单击 Create index pattern 按钮,即可完成配置。 这时我们单击 Kibana 左侧的 Discover 菜单,即可看到容器的日志信息啦:

image.png

五、Fluentd 引入

整个日志收集与处理流程变为下图,我们用 Filebeat 将 Fluentd 收集到的日志转发给 Elasticsearch。

image.png

当然,我们也可以使用 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

image.png

#重启
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 信息筛选到刚刚添加的容器的日志信息了

image.png