nginx 日誌用rsyslog kafka傳送

2021-09-29 05:53:26 字數 2775 閱讀 6024

rsyslog v8.7.0才可以支援kafka

centos7 直接安裝 rsyslog-kafka

yum -y install rsyslog-kafka

如果centos6 就比較麻煩不能直接用yum來公升級rsyslog的。

建議把舊的rsyslog 卸裝,

rpm -ivh libfastjson-0.99.2-1.el6.x86_64.rpm

rpm -ivh libfastjson4-0.99.8-1.el6.x86_64.rpm

rpm -ivh libestr-0.1.11-1.el6.x86_64.rpm

rpm -ivh lz4-1.7.5-1.el6.x86_64.rpm

rpm -uvh rsyslog-8.1907.0-1.el6.x86_64.rpm #這邊使用 -u 引數是為了直接公升級本地rsyslog

rpm -ivh rsyslog-kafka-8.1907.0-1.el6.x86_64.rpm #rsyslog-kafka元件安裝依賴 rsyslog-8.1907,該命令最後執行,可能還依賴librdkafka

安裝完後執行 rsyslogd -v,顯示版本是8.1907.0,則驗證rsyslog是否公升級成功

檢視/lib64/rsyslog/中是否存在 omkafka.so,驗證rsyslog-kafka是否安裝成功。

配置rsyslog

通用配置:

module(load=「omkafka」)

module(load=「imudp」)

input(type=「imudp」 port=「514」 ruleset=「tokafka」)

ruleset(name=「tokafka」)

但nginx配置:

1.nginx在v1.10之後的版本才支援syslog的方式處理日誌,請確保你的nginx版本高於1.10

2.為了降低logstash的處理壓力,同時也為了降低整個配置的複雜度,我們nginx的日誌直接採用json格式

3.拋棄文字檔案記錄nginx日誌,改用syslog直接將日誌傳輸到遠端的rsyslog伺服器,以便我們後續的處理;這樣做的另乙個非常重要的好處是我們再也無需考慮nginx日誌的分割和定期刪除問題(一般我們為了方便管理通常會採用logrotate服務來對日誌進行按天拆分和定期刪除,以免磁碟被佔滿)

先修改nginx 配置,新增一行日誌格式,一定為json

log_format jsonlog 『』;

access_log syslog:server=rsyslog.domain.com,facility=local7,tag=nginx_access_log,severity=info jsonlog;

4.access_log直接輸出到syslog服務,各引數解釋如下:

syslog:指明日誌用syslog服務接收

server:接收syslog傳送日誌的rsyslog服務端位址,預設使用udp協議,埠是514

facility:指定記錄日誌訊息的型別,例如認證型別auth、計畫任務cron、程式自定義的local0-7等,沒有什麼特別的含義,不必深究,預設的值是local7

tag:給日誌新增乙個tag,主要是為了方便我們在服務端區分是哪個服務或者client傳來的日誌,例如我們這裡給了tag:nginx_access_log,如果有多個服務同時都寫日誌給rsyslog,且配置了不通的tag,在rsyslog服務端就可以根據這個tag找出哪些是nginx的日誌

severity:定義日誌的級別,例如debug,info,notice等,預設是error

rsyslog server 端配置:

vi /etc/rsyslog.d/rsyslog_nginx_kafka_cluster.conf

module(load=「imudp」)

input(type=「imudp」 port=「514」)

module(load=「omkafka」)

template(name=「nginxlog」 type=「string」 string="%msg%")

if katex parse error: expected '}', got 'eof' at end of input: …then

:rawmsg, contains, 「nginx_access_log」 ~

rsyslog配置檔案重要配置解釋如下:

module:載入模組,這裡我們需要載入imudp模組來接收nginx伺服器syslog發過來的日誌資料,也需要載入omkafka模組來將日誌寫入到kafka

input:開啟udp協議,埠514,也可以同時開啟tcp協議,兩者可以共存

template:定義乙個模板,名字叫nginxlog,模板裡可以定義日誌的格式,因為我們傳的已經是json了,不需要再匹配格式,所以這裡不額外定義,注意模板名字要唯一

action:在匹配到inputname為imudp且programname為nginx_access_log(就是我們上邊nginx配置裡邊的tag)之後的處理方式,這裡的配置為匹配到的日誌通過omkafka模組寫入kafka集群,還有一些關於omkafka更詳細的配置參考上邊給出的omkafka模組官方檔案

:rawmsg, contains:最後這一行的意思是忽略包含nginx_access_log的日誌,沒有這一行的話rsyslog服務缺省會把所有日誌都記錄到message裡邊乙份,我們已經把日誌輸出到kafka了,本地就沒必要再記錄了

logstash配置:

input

}filter

json 

date

output 」}}

nginx日誌管理rsyslog

記錄日誌的用處 排錯,追溯事件,統計流量,審計安全行為 rsyslog作為系統自帶工具,可以很好的集中各種日誌。客戶端 211 服務端 210 要達成的效果是,客戶端nginx的日誌資訊自動同步到服務端。便於分析 服務端修改配置檔案 vim etc rsyslog.conf 日誌傳輸有兩種方式tcp...

rsyslog日誌服務

linux系統日誌分析 rsyslog日誌服務簡介 日誌的概念好理解,日誌作用可用於排障和追溯審計的等 rsyslog 是乙個c s架構的服務,可監聽於某套接字,幫其它主機記錄日誌資訊,rsyslog可以理解為增強版的syslog,在syslog的基礎上擴充套件了很多其他功能,如資料庫支援 mysq...

rsyslog 日誌收集

rsyslog 無論在效能還是部署上都優於其它日誌收集應用,因系統自帶,需要新功能只需要做公升級即可,方便部署!更多rsyslog本身的一些功能介紹,請看我之前寫的乙個ppt。rsyslog的使用 比如 1logtime client ip server ip domain level http c...