關於日誌收集、處理、分析的方案,實際上是不少,常見的就是ELK組合,即:Elasticsearch + Logstash + Kibana,官方網站:https://www.elastic.co/productsnginx
後面隨着架構的優化與演進,又引入另外一個輕量級的組件 Filebeat,Filebeat和Logstash同樣屬於日誌收集處理工具,基於原先 Logstash-fowarder 的源碼改造出來的。與Logstash相比,filebeat更加輕量,佔用資源更少。json
Logstash 和Fluentd相比,它在效能上表現略遜一籌,故而逐漸被fluentd取代,ELK也隨之變成EFK。EFK由ElasticSearch、Fluentd和Kiabana三個開源工具組成,這三款開源工具的組合爲日誌數據提供了分佈式的實時蒐集與分析的監控系統。vim
Fluentd 是一個免費,並且徹底開源的日誌管理工具,簡化了日誌的收集、處理、和存儲,你能夠不須要在維護編寫特殊的日誌處理腳本。centos
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
啓動服務
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)"}
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的介紹,有興趣的讀者能夠查閱官方文檔,更深刻的學習與探索,也歡迎前來交流使用經驗。