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

关于日志收集、处理、分析的方案,实际上是不少,常见的就是ELK组合,即:Elasticsearch + Logstash + Kibana,官方网站:https://www.elastic.co/productsnginx

image.png

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

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

Fluentd 简介

Fluentd 是一个免费,并且彻底开源的日志管理工具,简化了日志的收集、处理、和存储,你能够不须要在维护编写特殊的日志处理脚本。centos

image.png

特性介绍

使用json来记录log

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

插件式体系结构

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

最小所需资源

Fluentd 使用C和Ruby语言编写,仅须要不多的系统资源,一个运行再30-40MB内存的实例单核每秒能够处理13000次事件。ruby

可靠性

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

安装

https://docs.fluentd.org/inst...架构

Centos 系统curl

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

image.png

启动服务

systemctl start td-agent

image.png

更多平台的安装方式: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 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]# ll
total 4
drwxr-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 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.log
2021-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
安装

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

image.png

文档: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 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-* 索引。

image.png

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

相关文章
相关标签/搜索