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

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

Logstash 和Fluentd相比,它在效能上表现略逊一筹,故而逐渐被fluentd取代,ELK也随之变成EFK。EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成,这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。

Fluentd 简介

Fluentd 是一个免费,而且完全开源的日志管理工具,简化了日志的收集、处理、和存储,你可以不需要在维护编写特殊的日志处理脚本。

特性介绍

使用json来记录log

Fluentd使用Json来结构化数据,这让Fluentd统一了数据处理果层,包括日志收集,过滤,并输出日志缓冲(多个源和目标),这使得下游数据处理也变的容易得多。

插件式体系结构

Fluentd具有灵活的插件系统,让社区来扩展它的功能。我们的300 +社区贡献的插件可以连接几十个数据源和数据输出。通过使用插件,你可以充分利用你的日志。目前开源社区已经贡献了下面一些存储插件:MongoDB, Redis, CouchDB,Amazon S3, Amazon SQS, Scribe, 0MQ, AMQP, Delayed, Growl 等等。

最小所需资源

Fluentd 使用C和Ruby语言编写,仅需要很少的系统资源,一个运行再30-40MB内存的实例单核每秒可以处理13000次事件。

可靠性

fluentd支持基于内存或文件的数据缓冲,以防止数据丢失。fluentd还有强大的容错性,并且可设置高可用性。2000 +的数据驱动的企业依靠fluentd,通过他们日志数据的理解和使用来提供更好的产品和服务。

安装

https://docs.fluentd.org/installation/install-by-rpm

Centos 系统

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

启动服务

systemctl start td-agent

更多平台的安装方式:https://docs.fluentd.org/installation

默认启动是通过td-agent用户启动的,如果需要修改成其它用户,使用下面的方法:

[root@centos7 ~]# vim /usr/lib/systemd/system/td-agent.service

[Unit]
Description=td-agent: Fluentd based data collector for Treasure Data
Documentation=https://docs.treasuredata.com/articles/td-agent
After=network-online.target
Wants=network-online.target

[Service]
User=td-agent  #用户
Group=td-agent #用户组
LimitNOFILE=65536
Environment=LD_PRELOAD=/opt/td-agent/embedded/lib/libjemalloc.so
Environment=GEM_HOME=/opt/td-agent/embedded/lib/ruby/gems/2.4.0/
Environment=GEM_PATH=/opt/td-agent/embedded/lib/ruby/gems/2.4.0/
Environment=FLUENT_CONF=/etc/td-agent/td-agent.conf
Environment=FLUENT_PLUGIN=/etc/td-agent/plugin
Environment=FLUENT_SOCKET=/var/run/td-agent/td-agent.sock
Environment=TD_AGENT_LOG_FILE=/var/log/td-agent/td-agent.log
Environment=TD_AGENT_OPTIONS=
EnvironmentFile=-/etc/sysconfig/td-agent
PIDFile=/var/run/td-agent/td-agent.pid
RuntimeDirectory=td-agent
Type=forking
ExecStart=/opt/td-agent/embedded/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.pid $TD_AGENT_OPTIONS
ExecStop=/bin/kill -TERM ${MAINPID}
ExecReload=/bin/kill -HUP ${MAINPID}
Restart=always
TimeoutStopSec=120

配置文件介绍

配置文件目录:/etc/td-agent/td-agent.conf

[root@centos7 ~]# cd /etc/td-agent/[root@centos7 td-agent]# lltotal 4drwxr-xr-x 2 root root    6 Jun  4 05:15 plugin-rw-r--r-- 1 root root 2381 Jun  4 05:15 td-agent.conf

可以通过下面的命令来检测配置的配置是否正确

[root@centos7 ~]# /opt/td-agent/embedded/bin/fluentd -c /etc/td-agent/td-agent.conf 

配置文件包含以下指令:

source   #输入源,数据的来源match    #确定输出目的地filter   #确定事件处理管道system   #设置系统范围的配置 label    #对内部路由的输出和过滤器进行分组  @include #包括其他文件

官方文档:https://docs.fluentd.org/configuration

配置文件中还包括 fluentd 支持的数据格式,有下列这些:

string:字符串,最常见的格式
integer:整数
float:浮点数
size 大小,仅支持整数
  <INTEGER>k 或 <INTERGER>K;
  <INTEGER>m 或 <INTERGER>M;
  <INTEGER>g 或 <INTERGER>G;
  <INTEGER>t 或 <INTERGER>T。
time:时间,也只支持整数;
  <INTEGER>s 或 <INTERGER>S;
  <INTEGER>m 或 <INTERGER>M;
  <INTEGER>h 或 <INTERGER>H;
  <INTEGER>d 或 <INTERGER>D。
array:按照 JSON array 解析;
hash:按照 JSON object 解析。

去除注释之后的完整配置文件

[root@centos7 ~]# egrep -v '^#|^$' /etc/td-agent/td-agent.conf<match td.*.*>  @type tdlog  @id output_td  apikey YOUR_API_KEY  auto_create_table  <buffer>    @type file    path /var/log/td-agent/buffer/td  </buffer>  <secondary>    @type file    path /var/log/td-agent/failed_records  </secondary></match><match debug.**>  @type stdout  @id output_stdout</match><source>  @type forward  @id input_forward</source><source>  @type http  @id input_http  port 8888</source><source>  @type debug_agent  @id input_debug_agent  bind 127.0.0.1  port 24230</source>

官方也给出一个简单有demo,如下

[root@centos7 ~]# netstat -utpln |grep ruby
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      7008/ruby           
tcp        0      0 0.0.0.0:24224           0.0.0.0:*               LISTEN      7013/ruby           
tcp        0      0 127.0.0.1:24230         0.0.0.0:*               LISTEN      7013/ruby           
udp        0      0 0.0.0.0:24224           0.0.0.0:*                           7013/ruby 

通过8888端口提交一条测试日志并查看

[root@centos7 ~]# curl -X POST -d 'json={'json':'message'}' http://localhost:8888/debug.test[root@centos7 ~]# tail -n 1 /var/log/td-agent/td-agent.log2021-06-04 05:56:11.728512891 -0400 debug.test: {'json':'message'}

插件介绍及安装

插件介绍

Fluentd 常用插件如下:

Input:完成输入数据的读取,由source部分配置
常用类型:tail、http、forward、tcp、udp、exec
https://docs.fluentd.org/input

Parser:解析插件,常与输入、输处配合使用,多见于format字段后面
常用类型:ltsv、json、自定义等
https://docs.fluentd.org/parser

Output:完成输出数据的操作,由match部分配置
常用配置:file、forward、copy、stdout、exec
https://docs.fluentd.org/output

filter:过滤插件
常用配置:grep、ignore、record_transformer
https://docs.fluentd.org/filter

Buffer:缓存插件,用于缓存数据
常用配置:file、mem
https://docs.fluentd.org/buffer

Formatter:消息格式化的插件,用于输出,允许用户扩展和重新使用自定义输出格式
常用类型:ltsv、json等
https://docs.fluentd.org/formatter

安装

官方也有详细的介绍,不做过多的赘述,比较简单

文档:https://docs.fluentd.org/deployment/plugin-management

简单的应用实例

解析系统日志
[root@centos7 ~]# vim /etc/rsyslog.conf #增加下面的配置行*.* @127.0.0.1:5140

重启服务

[root@centos7 ~]# systemctl restart rsyslog
[root@centos7 ~]# ps -ef|grep rsys
root       7492      1  0 06:20 ?        00:00:00 /usr/sbin/rsyslogd -n
root       7497   6893  0 06:20 pts/0    00:00:00 grep --color=auto rsys

配置Fluentd

[root@centos7 td-agent]# vim td-agent.conf#增加下面的配置行<source>  @type syslog  port 5140  tag system</source>

<match system.**>  @type stdout</match>

重启服务

[root@centos7 td-agent]# systemctl restart td-agent

查看收集的日志

2021-06-04 06:40:02.000000000 -0400 system.daemon.info: {'host':'centos7','ident':'systemd','message':'Started Session 119 of user root.'}2021-06-04 06:40:02.000000000 -0400 system.cron.info: {'host':'centos7','ident':'CROND','pid':'7658','message':'(root) CMD (/usr/lib64/sa/sa1 1 1)'}
收集Nginx服务器的日志

fluentd配置文件

<source>
  @type tail
  path /var/log/nginx/access.log
  pos_file /var/log/nginx/access.log.pos

tag nginx.access
  format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] '(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?' (?<code>[^ ]*) (?<size>[^ ]*)(?: '(?<referer>[^\']*)' '(?<agent>[^\']*)')?$/
  time_format %d/%b/%Y:%H:%M:%S %z
</source>
<match nginx.access>
  @type elasticsearch
  host localhost
  port 9200
#  index_name fluentd
  flush_interval 10s
  logstash_format true
#  typename fluentd
</match>

然后在/var/log/nginx/目录下创建.pos文件

[root@centos7 nginx]# touch access.log.pos[root@centos7 nginx]# chown a+rw access.log.pos

重启Fluentd服务

[root@centos7 ~]# systemctl restart td-agent

重启nginx

[root@centos7 ~]# nginx -s reload

最后,还可以将日志统一整合至Kinbana界面显示,这个和之前的ELK操作没有区别,创建 fluentd-* 索引。

以上就是今天,民工哥给大家带的开源日志收集系统 Fluentd的介绍,有兴趣的读者可以查阅官方文档,更深入的学习与探索,也欢迎前来交流使用经验。

(0)

相关推荐

  • 综合使用tail、forward、copy和stdout

    我们已经介绍了几个Fluentd的输入插件和输出插件,现在先通过一个例子进行阶段总结. 本示例使用到如下插件: in_tail, out_copy, out_stdout, out_forward, ...

  • Fluentd-kafka插件用法详解

    Fluentd支持从kafka订阅数据,同时支持向kafka发布数据.这两项功能集成在一个插件中:fluent-plugin-kafka,我们在下文中分别称之为输入插件和输出插件. [安装说明] 通过 ...

  • Fluentd输出插件:rewrite_tag_filter用法详解

    我们在做日志处理时,往往会从多个源服务器收集日志,然后在一个(或一组)中心服务器做日志聚合分析.源服务器上的日志可能属于同一应用类型,也可能属于不同应用类型. 我们可能需要在聚合服务器上对这些不同类型 ...

  • Fluentd输入插件:in_tail用法详解

    in_tail输入插件内置于Fluentd中,无需安装.它允许fluentd从文本文件尾部读取日志事件,其行为类似linux的tail -F命令(按文件名来tail).这几乎是最常用的一个输入插件了. ...

  • 在 Windows 系统上安装和使用 Fluentd

    " 简单介绍一下在 Windows 系统上安装和使用 Fluentd 的方法" 我们在最初的文章中介绍了在 Linux 上安装 Fluentd 的方法,有时候为了做些简单测试,并不 ...

  • EFK:免费的日志采集与可视化搜索套件

    我们收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现 ...

  • Fluentd输入插件:in_http用法详解

    in_http插件允许使用HTTP协议来采集日志事件.这个插件会建立一个支持REST风格的HTTP端点,来接收日志事件请求. [配置示例] 以下片段展示了in_http插件的简单用法. <sou ...

  • 通过测试 grep 插件,一起了解验证插件功能的方法

    " 本文是 filter_grep 过滤插件的使用示例,同时也演示了测试插件功能的一般性方法." Fluentd 以插件丰富著称,我们不可能了解和使用所有的插件. 在使用一个新插件 ...

  • Fluentd部署:日志

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

  • 大数据安全分析05_数据采集技术

    大数据分析中的数据采集方式包括Logstash.Flume.Fluentd.Logtail等,本文对这几种数据采集技术进行简要介绍. Logstash Logstash是一个具备实时处理能力的开源的数 ...

  • Fluentd部署:错误排查

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

  • Fluentd配置文件语法

    我们在之前的文章中介绍过Fluentd事件的生命周期,事件是按照配置文件中的配置在不同插件之间进行传递的,配置文件可以控制事件的执行顺序,对于事件的处理极为重要. 本文描述Fluentd配置文件涉及的 ...

  • 云原生系列5 容器化日志之EFK

    上图是EFK架构图,k8s环境下常见的日志采集方式. 日志需求 1 集中采集微服务的日志,可以根据请求id追踪到完整的日志: 2 统计请求接口的耗时,超出最长响应时间的,需要做报警,并针对性的进行调优 ...

  • Fluentd配置详解

    Fluentd的运行是以配置文件为基础的.从现在开始,我们来一起学习配置文件的编写方法.这其中包含以下几部分: 配置文件语法 路由示例 通用配置参数 解析器(Parse)配置项 缓存(Buffer)配 ...

  • 使用Fluentd发送告警邮件

    告警是预防系统故障的一个重要工具,目前已经有许多成熟的方案通过监控系统运行指标来进行阈值预警. 我们今天简单了解一下如何使用Fluentd实现邮件告警功能. Fluentd的告警是基于日志分析实现的, ...

  • Fluentd 命令行工具 fluent-cat 介绍

    "一个用于测试插件的命令行工具" fluent-cat 是 Fluentd 提供的一个命令行工具,特别适合于对插件功能的验证性测试. 它主要和 in_forward / in_un ...

  • nginx-专题,搭建https,配置nginx日志,配置http转https并解决post转get问题,反向代理参数丢失问题

    一.nginx搭建https协议支持 https://blog.csdn.net/huanger_/article/details/113184950 二.nginx配置日志打印 access_log ...

  • Fluentd事件的生命周期

    什么是事件? 事件(Event)是Fluentd内部处理流程使用的数据结构,日志记录一旦进入Fluentd便被封装成一个event.Event由三部分组成:tag.time.record. tag标识 ...

  • Fluentd插件:解析插件概述

    " 解析插件用于适配各种源数据" 我们知道,Fluentd是一个通用的日志采集框架,一个很重要的原因就在于它可以处理各种各样的源数据. 处理数据的第一步就是要识别这些数据的格式. ...