对于日志收集、解决、剖析的计划,其实是很多,常见的就是 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 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
装置
官网也有具体的介绍,不做过多的赘述,比较简单
文档: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-* 索引。
以上就是明天,民工哥给大家带的开源日志收集零碎 Fluentd 的介绍,有趣味的读者能够查阅官网文档,更深刻的学习与摸索,也欢送前来交换应用教训。