为了账号安全,请及时绑定邮箱和手机立即绑定

Elasticsearch+Fluentd+Kafka搭建分布式日志系统

标签:
Ruby Docker


前言由于此处所指的EFK是Elasticsearch + Fluentd + Kfka,实际上K应该是Kibana。演示,此处仅收集数据的采集流程。

#必然

  1. [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

每一个服务都可以横向扩展,添加服务到日志系统。

配置文件

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

@type kafka经纪人192.168.1.60:9092格式json主题kafeidou

<match **>
@type复制

@type标准输出

@type elasticsearch host 192.168.1.60端口9200 logstash_format true #target_index_key machine_name logstash_prefix kafeidou logstash_dateformat%Y.%m。%d

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插件。

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消