#
前言由于此处所指的EFK是Elasticsearch + Fluentd + Kfka,实际上K应该是Kibana。演示,此处仅收集数据的采集流程。
#必然
- [docker](https://www.docker.com/get-started)2。[docker-compose](https://github.com/docker/compose)3。[apache kafka服务](https://liangyuanpeng.com/post/docker-deploy-kafka/ )
#架构
数据采集流程
数据的产生使用cadvisor采集容器的监控数据和数据传输到Kafka。
数据的传输传输是这样的:Cadvisor-> Kafka-> Fluentd-> elasticsearch
![ http://img3.mukewang.com/5e4b31d7000116cf05460226.jpg ](http://img3.mukewang.com/5e4b31d7000116cf05460226.jpg)
每一个服务都可以横向扩展,添加服务到日志系统。
配置文件
docker-compose.yml
版本: “3.7” 服务: elasticsearch: 图像:elasticsearch:7.5.1 环境: - discovery.type =单节点#使用单机模式启动 端口: - 9200:9200 cadvisor: 图像:谷歌/ cadvisor 命令: - storage_driver =卡夫卡-storage_driver_kafka_broker_list = 192.168.1.60:9092(卡夫卡服务IP:PORT)-storage_driver_kafka_topic = kafeidou depends_on: - elasticsearch fluentd: 图像:lypgcs / fluentd-ES-卡夫卡:V1.3.2 卷: - ./:/etc/流利 -在/ var /日志/ fluentd:在/ var /日志/ fluentd ```
其中:
1. cadvisor产生的数据会传输到192.168.1.60这台机器的kafka服务,topic为kafeidou
2. elasticsearch指定为单机模式启动(``discovery.type=single-node``环境变量),单机模式启动是为了方便实验整体效果
fluent.conf
#
输入http
端口8888
#
<match **>
@type复制
@type标准输出
flush_interval 10秒
其中:
1. type为copy的插件是为了能够将fluentd接收到的数据复制一份,是为了方便调试,将数据打印在控制台或者存储到文件中,这个配置文件默认关闭了,只提供必要的es输出插件.
需要时可以将``@type stdout``这一块打开,调试是否接收到数据.
2. 输入源也配置了一个http的输入配置,默认关闭,也是用于调试,往fluentd放入数据.
可以在linux上执行下面这条命令:
curl -i -X POST -d'json = {“ action”:“ write”,“ user”:“ kafeidou”}' http:// localhost:8888 / mytag
3. target_index_key参数,这个参数是将数据中的某个字段对应的值作为es的索引,例如这个配置文件用的是machine_name这个字段内的值作为es的索引.
### 开始部署
在包含docker-compose.yml文件和fluent.conf文件的目录下执行:
``
docker-compose up -d
``
在查看所有容器都正常工作之后可以查看一下elasticsearch是否生成了预期中的数据作为验证,这里使用查看es的索引是否有生成以及数据数量来验证:
-bash:-:未找到命令[root @ master kafka] #curl http://192.168.1.60:9200/_cat/indices?v健康状态索引uuid pri rep docs.count docs.deleted store.size pri.store。大小黄色开放55a4a25feff6 Fz_5v3suRSasX_Olsp-4TA 1 1 1 0 4KB 4KB
也可以直接在浏览器输入
`
http://192.168.1.60:9200/_cat/indices?v 查看结果,会更方便。可以看到我这里是用了不同不同不同不同不同不同不同不同不同不同不同不同不同不同不同不同machine_name这个字段作为索引值,查询的结果是生成了一个叫
55a4a25feff6
的索引数据,生成了1条数据(
docs.count
)到目前为止
kafka-> fluentd-> ES
这样一个日志收集流程就搭建完成了当然。了,架构不是固定的。也可以使用
fluentd-> kafka-> ES
这样的方式进行收集数据。这里不做演示了,无非是修改一下fluentd。 conf配置文件,将和卡夫卡相关的配置做一下对应的位置调换就可以可以了。
鼓励多看官方文档,在github或Fluentd官网上都可以找到到Fluentd-es插件和fluentd-kafka插件。