rsyslog日誌服務詳解
rsyslog日誌服務詳解
原文出處:http://blog.51cto.com/6638225/1862902
內容:
1、rsyslog日誌服務簡介
2、rsyslog的配置詳解
3、實現日誌伺服器收集日誌及last、lastb、dmseg命令的使用
4、實現日誌儲存在mysql中
一、rsyslog日誌服務簡介
日誌的概念好理解,日誌作用可用於排障和追溯審計的等
1、rsyslog是一個C/S架構的服務,可監聽於某套接字,幫其它主機記錄日誌資訊,在linux系統中可以分類兩個日誌:
klogd:kernel,記錄核心相關的日誌
syslogd:service,記錄應用程式的日誌
rsyslog:是CentOS 6以後的系統使用的日誌系統,與之前的syslog日誌系統相比,具有以下優點:
支援多執行緒
支援TCP、SSL、TLS、RELP等協議
強大的過濾器,可實現過濾日誌資訊中的任意部分
支援自定義輸出格式
適用於企業級別日誌記錄需求
模組化
2、日誌的記錄格式
日期時間 主機程序[pid]:事件內容
二、rsyslog配置
1、程式包:rsyslog
程式環境:
配置檔案:/etc/rsyslog.conf, /etc/rsyslog.d/
主程式:/usr/sbin/rsyslogd
模組路徑:/usr/lib64/rsyslog/
Unit File:/usr/lib/systemd/system/rsyslog.service
2、rsyslog中的術語:
facility:設施、通道;
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security, user, uucp, syslog, local0-local7
priority:記錄日誌的等級,如果等級是info,代表包含了info以及以上的所有等級事件日誌都記錄
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
3、配置檔案:
由三部分組成:嚴格按照配置段位置新增配置
[12:58 [email protected]~]# grep "####" /etc/rsyslog.conf
#### MODULES ####
#### GLOBAL DIRECTIVES ####
#### RULES ####
MODULES:定義了模組的選修,如接下來的使用mysql模組記錄日誌則需要在這裡配置
GLOBAL DIRECTIVES:定義了全域性的環境
RULES:定義了記錄日誌的設施以及等級等資訊
其格式為:
日誌定義格式: facility.priority Target
facility: 設施,從功能或程式上對日誌進行分類,並由專門的工具負責記錄日誌;
常用的facility:
lpr: 列印相關的日誌
auth:認證相關的日誌
user:使用者相關的日誌
cron:計劃任務相關的日誌
kern:核心相關的日誌
mail:郵件相關的日誌
mark:標記相關的日誌
news:新聞相關的日誌
uucp:檔案copy相關的日誌
daemon:系統服務相關的日誌
authpri: 授權相關的日誌
security:安全相關的日誌
local0-local7:自定義相關的日誌資訊(自定義時可以使用萬用字元)
萬用字元:
*:所有
f1,f2,f3......:列表
!:取反
priority:日誌級別
常用的日誌級別:
debug: 除錯
info: 訊息
notice: 注意
warn,warning: 警告
err,error: 錯誤
crit: 嚴重級別
alert: 需要立即修改該的資訊
emerg,panic: 核心崩潰,核心恐慌等嚴重的資訊
萬用字元:
*:所有日誌級別
none:沒有任何級別,也就是不記錄日誌資訊
Target:檔案路徑
可以使用的有:
/var/log/messages
使用者:*當前登入系統的所有使用者
日誌伺服器:@SERAVER_IP
管道:| COMMAND
舉例:
mail.info /var/log/maillog: 比指定級別更高的日誌級別,包括指定級別自身,儲存到/var/log/maillog中
mail.=info /var/log/maillog: 明確指定日誌級別為info,儲存至/var/log/maillog
mail.!info /var/log/maillog: 除了指定的日誌級別(info)所有日誌級別資訊,儲存至/var/log/maillog
*.info /var/log/maillog: 所有facility的info級別,儲存至/var/log/maillog
mail.* /var/log/maillog: mail的所有日誌級別資訊,都儲存至/var/log/maillog
mail.notice;news.info /var/log/maillog: mail的notice以上記得日誌級別和news的info以上的級別儲存至/var/log/maillog
mail,news.crit -/var/log/maillog: mail和news的crit以上的日誌級別儲存/var/log/maillog中;“-”代表非同步模式
三、實現日誌伺服器收集日誌
前面已經介紹,rsyslog是一個C/S架構,可以通過套接字來進行監聽記錄工作,起可以基於TCP和UDP工作,預設的監聽埠是514,只需要在modules開啟即可:
1、修改服務端配置,開啟服務監聽埠,並重啟服務:
#### modules ####
…………
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
[13:05 [email protected]~]# service rsyslog restart
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
2、在客戶端的配置中,定義將日誌發往服務端:
#### RULES ####
*.* @10.1.252.109
3、服務端已經收到日誌:
[13:15 [email protected]~]# tail /var/log/messages
Oct 16 12:48:36 centos6 kdump: started up
Oct 16 12:48:39 centos6 abrtd: Init complete, entering main loop
Oct 16 13:05:50 centos6 kernel: Kernel logging (proc) stopped.
Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="1547" x-info="http://www.rsyslog.com"] exiting on signal 15.
Oct 16 13:05:50 centos6 kernel: imklog 5.8.10, log source = /proc/kmsg started.
Oct 16 13:05:50 centos6 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2418" x-info="http://www.rsyslog.com"] start
Oct 18 10:20:43 localhost kernel: imklog 5.8.10, log source = /proc/kmsg started.
Oct 18 10:20:43 localhost rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="2205" x-info="http://www.rsyslog.com"] start
Oct 18 10:26:20 localhost root:
Oct 18 10:26:20 localhost root:
4、其它幾個日誌檔案:
last -num:記錄登入系統成功的記錄
lastb -num :記錄登入系統失敗的記錄
命令的讀取日誌檔案:
/var/log/btmp:登入當前系統的所有的失敗的嘗試;
/var/log/wtmp:所有成功登入至當前系統的相關資訊;
dmesg:系統引導過程中的日誌資訊;
/var/log/dmesg:系統引導過程中的日誌資訊;
文字檢視工具;
也可以使用dmesg命令;
四、實現日誌儲存在mysql中
前提:準備好msql server或mariadb server;
1、安裝rsyslog連線至mysql server的驅動模組;
[13:24 [email protected]~]# yum install -y rsyslog-mysql
[13:24 [email protected]~]# rpm -ql rsyslog-mysql
/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-mysql-5.8.10
/usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
可以看到其實rsyslog模組提供的啟動mysql的模組還有createDB.sql,它的作用就是定義了日誌的記錄表格式,可以直接匯入該sql語句到mysql即可
2、在mysql server準備rsyslog專用的使用者賬號;
mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'127.0.0.1' IDENTIFIED BY 'rsyslogpass';
mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'local' IDENTIFIED BY 'rsyslogpass';
mysql> FLUSH PRICVILEGES
3、匯入該sql語句到mysql即可,生成所需要的資料庫和表;
[13:24 [email protected]~]# mysql -ursyslog -h127.0.0.1 -p123456 < /usr/share/doc/rsyslog-mysql-5.8.10/createDB.sql
mysql> USE Syslog
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SHOW TABLES;
+------------------------+
| Tables_in_Syslog |
+------------------------+
| SystemEvents |
| SystemEventsProperties |
+------------------------+
2 rows in set (0.00 sec)
mysql> DESC SystemEvents
-> ;
+--------------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------+----------------+
| ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
| CustomerID | bigint(20) | YES | | NULL | |
| ReceivedAt | datetime | YES | | NULL | |
| DeviceReportedTime | datetime | YES | | NULL | |
| Facility | smallint(6) | YES | | NULL | |
| Priority | smallint(6) | YES | | NULL | |
| FromHost | varchar(60) | YES | | NULL | |
| Message | text | YES | | NULL | |
| NTSeverity | int(11) | YES | | NULL | |
| Importance | int(11) | YES | | NULL | |
| EventSource | varchar(60) | YES | | NULL | |
| EventUser | varchar(60) | YES | | NULL | |
| EventCategory | int(11) | YES | | NULL | |
| EventID | int(11) | YES | | NULL | |
| EventBinaryData | text | YES | | NULL | |
| MaxAvailable | int(11) | YES | | NULL | |
| CurrUsage | int(11) | YES | | NULL | |
| MinUsage | int(11) | YES | | NULL | |
| MaxUsage | int(11) | YES | | NULL | |
| InfoUnitID | int(11) | YES | | NULL | |
| SysLogTag | varchar(60) | YES | | NULL | |
| EventLogType | varchar(60) | YES | | NULL | |
| GenericFileName | varchar(60) | YES | | NULL | |
| SystemID | int(11) | YES | | NULL | |
+--------------------+------------------+------+-----+---------+----------------+
24 rows in set (0.00 sec)
4、配置rsyslog載入ommysql模組
#### MODULES ####
......
$ModLoad ommysql
5、配置RULES,將所期望的日誌資訊記錄於mysql中;
其格式為:
facility.priority :ommysql:DBHOST,DB,DBUSER,DBUSERPASS
所以新增以下資訊:
*.*
:ommysql:127.0.0.1,Syslog,rsyslog,123456
6、啟動mysql服務,並重啟rsyslog服務,mysql已經記錄日誌,到此為止,日誌資訊已經成功的儲存於資料庫中;
mysql> SELECT * FROM SystemEvents\G
*************************** 1. row ***************************
ID: 1
CustomerID: NULL
ReceivedAt: 2016-10-16 13:35:46
DeviceReportedTime: 2016-10-16 13:35:46
Facility: 0
Priority: 6
FromHost: centos6
Message: imklog 5.8.10, log source = /proc/kmsg started.
NTSeverity: NULL
Importance: NULL
EventSource: NULL
EventUser: NULL
EventCategory: NULL
EventID: NULL
EventBinaryData: NULL
MaxAvailable: NULL
CurrUsage: NULL
MinUsage: NULL
MaxUsage: NULL
InfoUnitID: 1
SysLogTag: kernel:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
*************************** 2. row ***************************
ID: 2
CustomerID: NULL
ReceivedAt: 2016-10-16 13:35:46
DeviceReportedTime: 2016-10-16 13:35:46
Facility: 5
Priority: 6
FromHost: centos6
Message: [origin software="rsyslogd" swVersion="5.8.10" x-pid="3081" x-info="http://www.rsyslog.com"] start
NTSeverity: NULL
Importance: NULL
EventSource: NULL
EventUser: NULL
EventCategory: NULL
EventID: NULL
EventBinaryData: NULL
MaxAvailable: NULL
CurrUsage: NULL
MinUsage: NULL
MaxUsage: NULL
InfoUnitID: 1
SysLogTag: rsyslogd:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
*************************** 3. row ***************************
ID: 3
CustomerID: NULL
ReceivedAt: 2016-10-16 13:35:50
DeviceReportedTime: 2016-10-18 10:48:37
Facility: 18
Priority: 6
FromHost: localhost
Message: nidhai
NTSeverity: NULL
Importance: NULL
EventSource: NULL
EventUser: NULL
EventCategory: NULL
EventID: NULL
EventBinaryData: NULL
MaxAvailable: NULL
CurrUsage: NULL
MinUsage: NULL
MaxUsage: NULL
InfoUnitID: 1
SysLogTag: root:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
*************************** 4. row ***************************
ID: 4
CustomerID: NULL
ReceivedAt: 2016-10-16 13:35:52
DeviceReportedTime: 2016-10-18 10:48:39
Facility: 18
Priority: 6
FromHost: localhost
Message: D
NTSeverity: NULL
Importance: NULL
EventSource: NULL
EventUser: NULL
EventCategory: NULL
EventID: NULL
EventBinaryData: NULL
MaxAvailable: NULL
CurrUsage: NULL
MinUsage: NULL
MaxUsage: NULL
InfoUnitID: 1
SysLogTag: root:
EventLogType: NULL
GenericFileName: NULL
SystemID: NULL
4 rows in set (0.00 sec)