简单使用fluentd收集docker日志

本文介绍了如何使用Fluentd作为日志收集系统,集中管理Docker容器的日志。首先解释了Fluentd的基本概念,然后详细步骤演示了如何通过Docker部署Fluentd,配置fluent.conf文件来收集日志,并将日志发送到指定接口。此外,还提供了两种方式(局部和全局)设置Docker日志驱动为Fluentd,以及如何验证收集结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

随着一个大项目的在服务器集群上的服务增多,每一个服务都会产生大量的日志信息。为了方便运维人员维护,就需要一个系统能集中管理所有服务的日志。为了能集中管理日志,就需将每个服务的日志收集起来,然后统一存入数据库。

本文简要介绍了使用 fluentd 收集 docker 日志,然后发送到接口里。

接口接收到数据可以存入mysql, oracle, mongo 等数据库。

一、fluentd是什么?

fluentd 是一个日志收集系统,通过丰富的插件,可以收集来自于各种系统或应用的日志,然后根据用户定义将日志做分类处理。

教程:1. 使用教程https://blog.csdn.net/easylife206/article/details/117433148?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-18.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-18.no_search_link
2. 安装和使用 https://blog.csdn.net/qq_27252133/article/details/53520416?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link

二、使用fluentd收集docker日志

1. 使用docker部署fluentd

  1. 拉取镜像
    执行命令:docker pull fluentd

  2. 创建 fluent.conf 文件
    执行命令:vim fluent.conf

<source>
  @type forward
  port 24224
  bind 0.0.0.0
</source>
 
<match *>
  @type copy
  <store>
    @type http
 
    endpoint http://localhost:9090/
    open_timeout 2
    http_method post
 
    <format>
      @type json
    </format>
    <buffer>
      flush_interval 3s
    </buffer>
  </store>
  <store>
    @type stdout
    <format>
      @type json
    </format>
  </store>
</match>

注意:endpoint 后面的 http://localhost:9090/ 替换成自己的接收数据的接口

  1. 部署fluentd
    若你的fluent.conf 文件路径是 /root ,则部署命令为
    docker run -it -d -p 24224:24224 --name=fluentd -v /root/fluent.conf:/fluentd/etc/fluent.conf fluentd

2. 收集docker日志

docker的log driver默认支持fluentd。
使用fluentd 收集 docker 日志有两种方式。

  1. 局部使用fluentd收集
  • 启动docker容器时加上 –log-driver fluentd --log-opt fluentd-address=0.0.0.0:24224 --log-opt fluentd-async-connect

  • 0.0.0.0:24224 是上一步启动的 fluentd 容器的地址

  • fluentd-async-connect 异步日志 这个表示 fluentd挂了,docker服务仍然照常

  • 例: docker run -itd --name=product_log2 -p 8888:8888 --log-driver fluentd --log-opt fluentd-address=0.0.0.0:24224 --log-opt fluentd-async-connect flask_test:v1

  1. 全局使用fluentd收集
  • 修改 /etc/docker/daemon.json,然后重启 docker daemon 使配置生效。
{
"log-driver": "fluentd",
   "log-opts": {
     "fluentd-address": "0.0.0.0:24224"
   }
}
  • 检查/etc/sysconfig/docker中配置的log server 是否已经配置

3. 查看收集结果

  1. docker logs fluentd
  2. 在日志接收的接口里查看 (上面例子是:http://localhost:9090/

结果例子:
在这里插入图片描述

总结

  1. docker里log driver 发送的 log 信息
字段描述
container_id64 字符的 container id
container_namecontainer 名字
sourcestdout 或 stderr
logcontainer 的 log
  1. 关于JSON 的方式发送
<think>好的,我现在需要帮助用户找到如何使用docker-compose安装EFK集群的配置示例或教程。首先,我得回忆一下EFK这三个组件的作用:Elasticsearch负责存储和搜索日志Fluentd日志收集器,Kibana用于可视化。用户提到的引用里有几个相关的参考资料,比如引用3和4提到了docker-compose部署ELK和EFK,可能需要从中提取有用的信息。 用户提供的引用3是关于部署ELK的,其中提到了修改volumes路径来挂载宿主机目录到Elasticsearch容器。而引用4则涉及搭建ES集群和EFK系统的参数配置,特别是发现设置。不过EFK中的F是Fluentd,而ELK中的L是Logstash,两者在日志收集层不同,但配置思路类似,需要相应调整。 接下来,我需要整合这些信息,构建一个docker-compose.yml的示例。首先确定各个服务的镜像版本,比如Elasticsearch可能用7.x版本,Kibana对应版本,Fluentd则需要支持Docker日志驱动的镜像。然后配置各个服务的端口、环境变量和卷挂载。 对于Elasticsearch,需要设置discovery.type为single-node,或者如果是集群,按照引用4中的参数配置发现主机和主节点。但用户可能只需要一个简单的示例,所以暂时用单节点模式。挂载data目录防止数据丢失,如引用3中的做法。 Fluentd的配置需要创建一个自定义的配置文件,用于接收Docker容器的日志并输出到Elasticsearch。可能需要构建一个包含必要插件的Fluentd镜像,比如fluent-plugin-elasticsearch。用户需要创建fluentd.conf,配置source和match部分,指向Elasticsearch服务。 Kibana的配置相对简单,连接到Elasticsearch,设置依赖关系确保启动顺序正确。另外,网络配置也很重要,所有服务需要在一个自定义网络中以便通信。 还需要考虑环境变量,比如Elasticsearch的内存设置,避免容器因内存不足崩溃。此外,权限问题,特别是Elasticsearch需要某些系统配置,如vm.max_map_count,这可能需要用户在宿主机上设置。 最后,生成相关问题时要围绕EFK的配置、优化、故障排除和应用场景展开,确保用户能进一步探索相关问题。需要检查引用中的内容是否适用,比如引用3中的挂载路径和引用4的集群配置参数,确保示例的准确性和实用性。</think>以下是如何使用docker-compose部署EFK(Elasticsearch, Fluentd, Kibana)集群的配置示例和操作步骤: ### 一、docker-compose.yml 配置示例 ```yaml version: '3.7' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.3 container_name: elasticsearch environment: - "ES_JAVA_OPTS=-Xms1g -Xmx1g" - "discovery.type=single-node" # 单节点模式简化配置[^4] volumes: - /etc/localtime:/etc/localtime - ./es_data:/usr/share/elasticsearch/data # 数据持久化路径[^3] ports: - "9200:9200" - "9300:9300" networks: - efk_net kibana: image: docker.elastic.co/kibana/kibana:7.17.3 container_name: kibana depends_on: - elasticsearch ports: - "5601:5601" environment: ELASTICSEARCH_HOSTS: http://elasticsearch:9200 networks: - efk_net fluentd: image: fluent/fluentd:v1.15-1 container_name: fluentd volumes: - ./fluentd.conf:/fluentd/etc/fluent.conf - /var/log:/var/log # 挂载宿主机日志目录 ports: - "24224:24224" networks: - efk_net networks: efk_net: driver: bridge ``` ### 二、Fluentd配置文件(fluentd.conf) ```xml <source> @type forward port 24224 </source> <match **> @type elasticsearch host elasticsearch port 9200 logstash_format true logstash_prefix fluentd include_tag_key true </match> ``` ### 三、部署步骤 1. 创建目录结构: ```bash mkdir efk && cd efk mkdir es_data ``` 2. 设置系统参数(防止Elasticsearch启动失败): ```bash sudo sysctl -w vm.max_map_count=262144 ``` 3. 编写docker-compose.yml和fluentd.conf文件 4. 启动服务: ```bash docker-compose up -d # 核心启动命令[^1] ``` 5. 验证服务: - Elasticsearch: `curl http://localhost:9200` - Kibana: 浏览器访问 `http://IP:5601` ### 四、关键配置说明 1. Elasticsearch数据持久化通过volume挂载实现,避免容器重启数据丢失[^3] 2. Fluentd通过forward插件接收Docker容器日志,需配合Docker日志驱动使用 3. 集群模式下需配置`discovery.seed_hosts`和`cluster.initial_master_nodes`参数[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值