一、將Linux系統日志通過Rsyslog輸出到syslog服務器
Rsyslog是linux系統下高速的日志收集處理服務,它具有高性能、安全可靠和模塊化設計的特點,能夠接收各種來源的日志輸入(例如:file,tcp,udp,uxsock等),並通過處理后將結果輸出的不同的目的地(例如:mysql,mongodb,elasticsearch,kafka,日志審計服務器等),每秒處理日志量能夠超過百萬條。
Rsyslog作為syslog的增強升級版本已經在各linux發行版默認安裝了,無需額外安裝。如果操作系統中確實沒有Rsyslog,可以通過yum進行安裝或升級。
# yum install rsyslog
本文Linux操作環境以以CentOS 7為例,syslog的接收服務器為某日志審計服務器,syslog服務端口默認為514。
rsyslog的配置文件位於/etc/rsyslog.conf,編輯該文件,並設置輸出syslog服務器的IP(建議先備份原有的rsyslog.conf配置文件)。
// 在rsyslog.conf文件末尾增加如下內容,注意*.*和@中間為TAB(不是空格) *.* @10.168.1.100 // 重啟rsyslog服務 # service rsyslog restart
二、將Nginx的日志輸出到syslog服務器
Nginx 1.7.1版本及以后即可支持syslog,通過在nginx.conf中增加相關的配置即可實現。Nginx的access_log和error_log在配置文件的http段和server段均可配置。
// 將access_log記錄到服務器本地文件 access_log /var/log/nginx/access.log main; // 新增將access_log輸出到syslog server access_log syslog:server=10.168.1.100,facility=local7,tag=nginx,severity=info; //將error_log記錄到服務器本地文件 error_log /var/log/nginx//error.log warn; // 新增將error_log輸出到syslog server error_log syslog:server=10.168.1.100,facility=local7,tag=nginx,severity=warn; //重啟nginx服務 # systemctl restart nginx.service
配置參數說明:
syslog: 表示設置日志用syslog服務接收
server: 接收syslog日志的syslog服務端地址,默認使用udp協議,端口是514
facility: 設施,指定日志消息的設備類型,可以有kern, user, mail, daemon, auth, intern, lpr, news, uucp, clock, authpriv, ftp, ntp, audit, alert, cron, local0-7這些類型。例如認證類型auth、計划任務cron、程序自定義的local0-7等,默認值是local7。(沒有什么特別的含義,不必深究)
tag: 標記,給日志添加一個tag,主要是為了方便我們在服務端區分是哪個服務、應用、站點傳來的日志,例如我們這里設置了tag為nginx,如果有多個服務同時都寫日志給syslog,且配置了不同的tag,如“nginx_mydomain_com”,在rsyslog服務端就可以根據這個tag找出指定的nginx的日志
severity: 日志級別,主要有debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)這些類型,只要報錯信息超過該級別就會進行記錄。
三、配置效果
日志審計服務器上收集到的日志列表,標記為本地用戶7(local7)的為nginx日志,其余的為服務器的系統日志(用戶登錄、注銷等)
* 如果沒有專門的日志審計服務器,Rsyslog本身也可以作為日志收集服務器。
參考資料:
1. Rsyslog快速方便的收集Nginx日志 https://www.sohu.com/a/250953403_100123073
2. Nginx使用Rsyslog記錄日志 http://www.imooc.com/article/259236
3. Logging to syslog (Nginx官方文檔) http://nginx.org/en/docs/syslog.html