对于日志收集、解决、剖析的计划,其实是很多,常见的就是ELK组合,即:Elasticsearch + Logstash + Kibana,官方网站:https://www.elastic.co/products

前面随着架构的优化与演进,又引入另一个轻量级的组件 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/inst...

Centos 零碎

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

启动服务

systemctl start td-agent

更多平台的装置形式:https://docs.fluentd.org/inst...

默认启动是通过td-agent用户启动的,如果须要批改成其它用户,应用上面的办法:

[root@centos7 ~]# vim /usr/lib/systemd/system/td-agent.service[Unit]Description=td-agent: Fluentd based data collector for Treasure DataDocumentation=https://docs.treasuredata.com/articles/td-agentAfter=network-online.targetWants=network-online.target[Service]User=td-agent  #用户Group=td-agent #用户组LimitNOFILE=65536Environment=LD_PRELOAD=/opt/td-agent/embedded/lib/libjemalloc.soEnvironment=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.confEnvironment=FLUENT_PLUGIN=/etc/td-agent/pluginEnvironment=FLUENT_SOCKET=/var/run/td-agent/td-agent.sockEnvironment=TD_AGENT_LOG_FILE=/var/log/td-agent/td-agent.logEnvironment=TD_AGENT_OPTIONS=EnvironmentFile=-/etc/sysconfig/td-agentPIDFile=/var/run/td-agent/td-agent.pidRuntimeDirectory=td-agentType=forkingExecStart=/opt/td-agent/embedded/bin/fluentd --log $TD_AGENT_LOG_FILE --daemon /var/run/td-agent/td-agent.pid $TD_AGENT_OPTIONSExecStop=/bin/kill -TERM ${MAINPID}ExecReload=/bin/kill -HUP ${MAINPID}Restart=alwaysTimeoutStopSec=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/conf...

配置文件中还包含 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 rubytcp        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、exechttps://docs.fluentd.org/inputParser:解析插件,常与输出、输处配合应用,多见于format字段前面罕用类型:ltsv、json、自定义等https://docs.fluentd.org/parserOutput:实现输入数据的操作,由match局部配置罕用配置:file、forward、copy、stdout、exechttps://docs.fluentd.org/outputfilter:过滤插件罕用配置:grep、ignore、record_transformerhttps://docs.fluentd.org/filterBuffer:缓存插件,用于缓存数据罕用配置:file、memhttps://docs.fluentd.org/bufferFormatter:音讯格式化的插件,用于输入,容许用户扩大和从新应用自定义输入格局罕用类型:ltsv、json等https://docs.fluentd.org/formatter
装置

官网也有具体的介绍,不做过多的赘述,比较简单

文档:https://docs.fluentd.org/depl...

简略的利用实例

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

重启服务

[root@centos7 ~]# systemctl restart rsyslog[root@centos7 ~]# ps -ef|grep rsysroot       7492      1  0 06:20 ?        00:00:00 /usr/sbin/rsyslogd -nroot       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的介绍,有趣味的读者能够查阅官网文档,更深刻的学习与摸索,也欢送前来交换应用教训。