rsyslog 使用教程

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數據庫,並且發送速度極快。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章