1. rsyslog介紹
Rsyslog的全稱是 rocket-fast system for log,它提供了高性能,高安全功能和模塊化設計。rsyslog能夠接受從各種各樣的來源,將其輸入,輸出的結果到不同的目的地。rsyslog可以提供超過每秒一百萬條消息給目標文件。
特點:
- 多線程
- 可以通過許多協議進行傳輸UDP,TCP,SSL,TLS,RELP;
- 直接將日誌寫入到數據庫;
- 支持加密協議:ssl,tls,relp
- 強大的過濾器,實現過濾日誌信息中任何部分的內容
- 自定義輸出格式;
配置文件:
配置文件/etc/rsyslog.conf主要有3個部分
- MODULES :模塊
- GLOBAL DRICTIVES :全局設置
- RULES:規則
RULEs:
facitlity.priority Target
auth #pam產生的日誌,認證日誌
authpriv #ssh,ftp等登錄信息的驗證信息,認證授權認證
cron #時間任務相關
kern #內核
lpr #打印
mail #郵件
mark(syslog) #rsyslog服務內部的信息,時間標識
news #新聞組
user #用戶程序產生的相關信息
uucp #unix to unix copy, unix主機之間相關的通訊
local 1~7 #自定義的日誌設備
===============================================================
#priority: 級別日誌級別:
=====================================================================
debug #有調式信息的,日誌信息最多
info #一般信息的日誌,最常用
notice #最具有重要性的普通條件的信息
warning, warn #警告級別
err, error #錯誤級別,阻止某個功能或者模塊不能正常工作的信息
crit #嚴重級別,阻止整個系統或者整個軟件不能正常工作的信息
alert #需要立刻修改的信息
emerg, panic #內核崩潰等嚴重信息
###從上到下,級別從低到高,記錄的信息越來越少,如果設置的日誌內性爲err,則日誌不會記錄比err級別低的日誌,只會記錄比err更高級別的日誌,也包括err本身的日誌。
=====================================================================
Target:
#文件, 如/var/log/messages
#用戶, root,*(表示所有用戶)
#日誌服務器,@172.16.22.1
#管道 | COMMAND
2. 使用rsyslog實現日誌轉發
2.1 搭建服務
環境:
系統 | Redhat7.0 |
---|---|
發送服務器:客戶端 | 192.168.157.60 |
收集服務器:服務端 | 192.168.157.61 |
//關閉服務端和客戶端防火牆、selinux
[root@send ~]# setenforce 0
[root@send ~]# systemctl stop firewalld
[root@send ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@send ~]# systemctl mask firewalld
Created symlink from /etc/systemd/system/firewalld.service to /dev/null.
#服務端一樣
//修改客戶端配置文件,並啓動服務
[root@send ~]# vim /etc/rsyslog.conf
#將下面四行前的註釋取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
#添加下列內容
$template myFormat,"%timestamp% %fromhost-ip% %msg%\n"
$ActionFileDefaultTemplate myFormat
#修改接收方IP(服務端),一個@表示TCP傳輸,兩個@表示UDP傳輸
*.info;mail.none;authpriv.none;cron.none @@192.168.157.61:514
[root@send ~]# systemctl start rsyslog
//修改服務端配置文件,並啓動服務
[root@accept ~]# vim /etc/rsyslog.conf
#將下面四行前的註釋取消掉
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
*.info;mail.none;authpriv.none;cron.none /data/log/messages
#添加以下內容
$AllowedSender tcp, 192.168.157.0/24
//允許 157.0網段內的主機以tcp協議來傳輸
$template Remote,"/data/log/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"
//定義模板,接受日誌文件路徑,區分了不同主機的日誌
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
//過濾server 本機的日誌。
[root@accept ~]# systemctl start rsyslog
//在服務端創建/data/log目錄,以接受大量日誌信息,配置文件中的路徑應當與該路徑一致
[root@accept ~]# mkdir -pv /data/log
[root@accept ~]# touch messages
*.info;mail.none;authpriv.none;cron.none /data/log/messages
[root@accept ~]# systemctl restart rsyslog
//在服務端利用tree命令查看/data/log的結構
[root@accept ~]# tree /data/log/
/data/log/
├── 192.168.157.60
│ └── 192.168.157.60_2019-05-10.log
└── messages
1 directory, 2 files
2.2 驗證
驗證一:
#在客戶端的終端命令行輸入:
[root@send ~]# logger "I'm very happy"
#在服務端查看日誌文件:
[root@accept ~]# tail -f /data/log/192.168.157.60/192.168.157.60_2019-05-10.log
......省略了其他日誌信息......
May 10 18:14:09 send root: I'm very happy
驗證二:
#在客戶端使用ssh協議登錄系統:
Last login: Fri May 10 22:11:54 2019 from 192.168.157.1
[root@send ~]#
#在服務端查看日誌信息:
[root@accept ~]# tail -f /data/log/192.168.157.60/192.168.157.60_2019-05-10.log
......省略了其他信息......
May 10 22:20:33 send sshd[14047]: Accepted password for root from 192.168.157.1 port 53248 ssh2
......省略了其他信息......
May 10 22:20:34 send sshd[14047]: pam_unix(sshd:session): session opened for user root by (uid=0)
3. 將日誌信息存儲至MySQL數據庫中
環境
系統 | Redhat |
---|---|
客戶端 | 192.168.157.60 |
服務端 | 192.168.157.61 |
3.1 服務端配置
//安裝MySQL
點擊查看MySQL安裝
//安裝rsyslog+MySQL的連接驅動
[root@accept ~]# yum -y install rsyslog-mysql
[root@accept ~]# rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so #模塊
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql #創建rsyslog存放日誌的表結構的sql語句
//查看mysql數據庫,發現沒有日誌數據庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.09 sec)
//導入日誌文件的sql腳本,生成日誌文件的數據庫
[root@accept ~]# mysql </usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
#此文件可以rpm -ql rsyslog-mysql查看
//再進入數據庫查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Syslog |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
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>
//授權一個用戶給rsyslog訪問數據庫
mysql> grant all on Syslog.* to 'rsysloguser'@'127.0.0.1' identified by 'rsyslogpass';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
//修改主配置文件
[root@accept ~]# vim /etc/rsyslog.conf
#在rules裏添加下面內容。
#並將其他規則註釋(可選)
$ModLoad ommysql //打開連接mysql的模塊
*.* :ommysql:127.0.0.1,Syslog,rsysloguser,rsyslogpass
//這行表示把所有的設施的所有日誌都記錄到數據庫服務器中的Syslog數據庫中,以rsysloguser用戶,rsyslogpass密碼訪問數據庫
3.2 客戶端驗證
客戶端配置文件不需要修改,只要能和服務端通信即可,配置參考第2節日誌轉發。
//驗證:
在客戶端命令行輸入:"This is a test"
[root@send ~]# logger 'THIS IS A TEST'
[root@accept ~]# mysql
mysql> use Syslog;
mysql> select * from SystemEvents\G;
*************************** 17. row ***************************
ID: 17
CustomerID: NULL
ReceivedAt: 2019-05-10 23:15:07
DeviceReportedTime: 2019-05-10 23:15:06
Facility: 1
Priority: 5
FromHost: send
Message: THIS IS A TEST
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
17 rows in set (0.00 sec)
總結:rsyslog支持日誌轉發,也支持將日誌信息存儲到mysql數據庫,並且發送速度極快。