Fluentd部署:多Workers进程模式

本文介绍如何使用Fluentd的多worker模式处理高访问量的日志事件。此模式会运行多个worker进程以最大利用多核CPU。

  1. 原理

    默认情况下,一个Fluentd实例会运行一个监控进程和一个工作进程。工作进程包含了Input/Filter/Output各类插件。

    多worker模式就是一个实例中启动了多个工作进程,这些工作进程负责处理日志事件,接受监控进程的管理和调度。如下图所示:

    Fluentd提供了一些特性以支持多worker模式,我们通过配置就能方便地使用这些特性。

  2. 配置

    1. workers参数

      可在<system>中设置工作进程的数目。

      <system> workers 4</system>
    2. <worker N>指令

      有些插件不支持在多worker上运行,比如tail。

      对这类插件,我们可通过<worker N>指定其在哪个worker上运行。

      N代表worker的索引,起始为0.

      <system> workers 4</system># work on multi process workers. worker0 - worker3 run in_forward<source> @type forward</source># work on only worker 0. worker1 - worker3 don't run in_tail<worker 0> <source> @type tail </source></worker># <worker 1>, <worker 2> or <worker 3> is also ok

      这个例子中,启动了4个工作进程。tail插件被放置在<worker 0>中,表明tail只运行在索引为0的工作进程上。

      这种配置可以混合使用多进程插件和单进程插件。

    3. <worker N-M>指令

      Fluentd v1.4.0开始支持<worker N-M>指令。这个很容易理解。

      N-M代表工作进程索引范围,指定了插件可以运行在哪些工作进程中。、

      <system> workers 6</system>
      <worker 0-1> <source> @type forward </source>
      <filter test> @type record_transformer enable_ruby <record> worker_id ${ENV['SERVERENGINE_WORKER_ID']} </record> </filter>
      <match test> @type stdout </match></worker># work on worker 0 and worker 1.
      <worker 2-3> <source> @type tcp <parse> @type none </parse> tag test </source>
      <filter test> @type record_transformer enable_ruby <record> worker_id ${ENV['SERVERENGINE_WORKER_ID']} </record> </filter>
      <match test> @type stdout </match></worker># work on worker 2 and worker 3.
      <worker 4-5> <source> @type udp <parse> @type none </parse> tag test </source>
      <filter test> @type record_transformer enable_ruby <record> worker_id ${ENV['SERVERENGINE_WORKER_ID']} </record> </filter>
      <match test> @type stdout </match></worker># work on worker 4 and worker 5.
    4. root_dir/@id参数

      使用文件作为buffer时,需要配置这几个参数。

      在多worker模式中,不能指定固定的path作为文件buffer,因为这会

      不同进程中引起冲突。

      <system> workers 2</system>
      <match pattern> @type forward <buffer> @type file path /var/log/fluentd/forward # This is not allowed </buffer></match>

      Fluentd提供了基于root_dir和@id的动态path配置,实际的buffer路径为:

      ${root_dir}/worker${worker index}/${plugin @id}/buffer

      <system> workers 2 root_dir /var/log/fluentd</system>
      <match pattern> @type forward @id out_fwd <buffer> @type file </buffer></match>
  3. 操作

    每个worker使用单独的内存和磁盘空间,因此需要仔细配置缓存空间,并对内存和磁盘使用情况做好监控。

(0)

相关推荐

  • 号称下一代日志收集系统!来看看它有多强

    后面随着架构的优化与演进,又引入另一个轻量级的组件 Filebeat,Filebeat和Logstash一样属于日志收集处理工具,基于原先 Logstash-fowarder 的源码改造出来的.与Lo ...

  • 深入理解Nginx模块开发与架构解析

    一.研究Nginx前的准备工作 1.Nginx特点:更快.高扩展性.高可靠性.低内存消耗.单机支持10万以上的并发连接.热部署.最自由的BSD许可协议 2.退出nginx nginx -s stop ...

  • Fluentd部署:错误排查

    本文介绍一下排查Fluentd运行时错误的几种方法. 查看日志 如果感觉Fluentd运行异常,请先查看日志.td-agent安装后,默认日志存放在/var/log/td-agent/td-agent ...

  • Fluentd部署:高可用配置

    对于高访问量的web站点或者服务,我们可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即 ...

  • Fluentd部署:性能优化

    本文提供一些对于单Fluentd进程进行性能优化的建议.如果你的日志请求达到了5000条/秒,这里描述的技术点可用于调优. 检查操作系统配置 在安装Fluentd之前,进行操作系统参数优化.可参考这里 ...

  • Fluentd部署:如何监控Fluentd

    今天的文章主要介绍一下如何监控Fluentd.监控的目的是确保日志采集能稳定高效运行. Fluentd内部运行指标 Fluentd内部保存着一些运行指标,这些指标可通过REST api直接获取,也支持 ...

  • Fluentd部署:通过Prometheus监控Fluentd

    本文简单介绍一下如何通过Prometheus监控Fluentd. Prometheus也是CNCF成员项目之一,所以Fluentd官方推荐使用Prometheus作为监控工具. 安装fluent-pl ...

  • Fluentd部署:系统配置

    首先,本文"系统配置"指的是Fluentd的全局配置项,诸如开启RPC.使用多worker模式等.可在配置文件中通过<system>进行配置,或通过命令行进行配置. & ...

  • Fluentd部署:日志

    Fluentd是用来处理其他系统产生的日志的,它本身也会产生一些运行时日志.我们一起来了解一下Fluentd本身的日志机制. Fluentd包含两个日志层:全局日志和插件级日志.每个层次的日志都可以进 ...

  • dotNetCore操作Redis(含CentOS7哨兵模式部署)

    现在说到使用缓存中间件基本就是 Redis 了,通常开发环境或测试环境部署一个单机版就可以运行了,但要上生产环境还需要进行高可用的方式来部署,本文说说在 CentOS7 中 Redis 高可用的部署以 ...

  • 企业数字化进程面临挑战 知识管理模式亟待转型

    "建设数字中国,发展数字经济."从国家战略到个体发展,通过数字化手段提升组织业务增长和运营管理效率的数字化转型,成为企业面临的必然选择,而这其中,知识管理扮演着越来越重要的角色. ...