第八週

美食家哇哈哈發表於2024-03-20
一、總結日誌分類, 優先順序別。圖文並茂解釋應用如何將日誌發到rsyslog,並寫到目標。
facility:設施,從功能或程式上對日誌進行歸類:

#內建分類

auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth), user(default), uucp, syslog

#自定義的分類

local0-local7

Priority 優先順序別,從低到高排序:

debug,info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)

應用如何將日誌發到rsyslog,並寫到目標:

啟用網路日誌服務,開啟對外接收日誌的埠,udp監聽埠514,把應用上發生的所有info級別及以上的設施都傳送到日誌伺服器上,514收到後就會寫到/var/log/syslog檔案中
二、完成功能,sshd應用將日誌寫到rsyslog的local6分類,過濾所有級別,寫入到/var/log/ssh.log。
修改sshd服務的配置
[20:06:03 root@rocky88 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
 
[20:07:01 root@rocky88 ~]systemctl restart sshd
 
修改rsyslog的配置
[20:10:02 root@rocky88 ~]vim /etc/rsyslog.conf
local6.*     /var/log/ssh.log
 
[20:12:31 root@rocky88 ~]systemctl restart rsyslog
 
logger測試
[20:15:12 root@rocky88 ~]logger -p local6.info "hello sshd"
[20:16:49 root@rocky88 ~]tail /var/log/ssh.log
Dec 16 20:14:02 rocky88 sshd[25937]: Accepted password for root from 192.168.31.175 port 51350 ssh2
Dec 16 20:15:23 rocky88 root[26004]: hello sshd
三、完成功能,將3個主機(要求主機名為ip)的ssh日誌,透過rsyslog服務將ssh日誌寫入到集中的主機上的rsyslog服務,寫入到/var/log/all-ssh.log檔案
日誌伺服器上開啟對外接收日誌的埠
[root@192.168.31.179 ~]vim /etc/rsyslog.conf
# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")
 
重啟服務
[root@192.168.31.179 ~]systemctl restart rsyslog.service
 
可以看到udp監聽埠514
[root@192.168.31.179 ~]ss -nul
State        Recv-Q       Send-Q                                Local Address:Port             Peer Address:Port      Process       
UNCONN       0            0                                     127.0.0.53%lo:53                    0.0.0.0:*                       
UNCONN       0            0                              192.168.31.179%ens33:68                    0.0.0.0:*                       
UNCONN       0            0                                           0.0.0.0:514                   0.0.0.0:*                       
UNCONN       0            0                                              [::]:514                      [::]:*                       
UNCONN       0            0                  [fe80::20c:29ff:fe93:2339]%ens33:546                      [::]:*            
 
客戶端1配置:
[root@192.168.31.163 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
 
[root@192.168.31.163 ~]systemctl restart sshd    
 
[root@192.168.31.163 ~]vim /etc/rsyslog.conf
# Don't log private authentication messages!
local6.info;mail.none;authpriv.none;cron.none                /var/log/all-ssh.log
local6.info                                                  @192.168.31.179:514   
 
[root@192.168.31.163 ~]systemctl restart rsyslog.service    
 
客戶端2配置:
[root@192.168.31.55 ~]vim /etc/ssh/sshd_config
SyslogFacility LOCAL6
 
[root@192.168.31.55 ~]systemctl restart sshd    
 
[root@192.168.31.55 ~]vim /etc/rsyslog.conf
# Don't log private authentication messages!
local6.info;mail.none;authpriv.none;cron.none                /var/log/all-ssh.log
local6.info                                                  @192.168.31.179:514   
 
[root@192.168.31.55 ~]systemctl restart rsyslog.service    
 
 
可以在客戶端上觸發生成日誌來測試一下
[root@192.168.31.55 ~]#logger "This is test log from 192.168.31.55"
 
此時,在日誌伺服器上就能看到兩臺客戶端傳送過來的日誌了
[root@192.168.31.179 ~]tail -f /var/log/all-ssh.log
四、總結/var/log/目錄下常用日誌檔案作用。
/var/log/secure,/var/log/auth.log:系統安全日誌,文字格式,應週期性分析
/var/log/btmp:當前系統上,使用者的失敗嘗試登入相關的日誌資訊,二進位制格式,lastb命令進行 檢視
/var/log/wtmp:當前系統上,使用者正常登入系統的相關日誌資訊,二進位制格式,last命令可以檢視
/var/log/lastlog:每一個使用者最近一次的登入資訊,二進位制格式,lastlog命令可以檢視
/var/log/dmesg:CentOS7 之前版本系統引導過程中的日誌資訊,文字格式,開機後的硬體變化 將不再記錄,也可以透過專用命令
dmesg檢視,可持續記錄硬體變化的情況
/var/log/boot.log:系統服務啟動的相關資訊,文字格式,Ubuntu無此檔案
/var/log/messages(紅帽系統),/var/log/syslog (Ubuntu) :系統中大部分的資訊
/var/log/anaconda:anaconda的日誌,Ubuntu無此檔案
五、總結journalctl命令的選項及示例
日誌管理工具 journalctl

journalctl命令格式:

journalctl [OPTIONS...] [MATCHES...]
選項說明:

--no-full, --full, -l  
如果欄位內容超長則以省略號(...)截斷以適應列寬。   預設顯示完整的欄位內容(超長的部分換行顯示或者被分頁工具截斷)。
老舊的 -l/--full 選項 僅用於撤銷已有的 --no-full 選項,除此之外沒有其他用處。
-a, --all  
完整顯示所有欄位內容, 即使其中包含不可列印字元或者欄位內容超長
-f, --follow  
只顯示最新的日誌項,並且不斷顯示新生成的日誌項。 此選項隱含了 -n 選項。
-e, --pager-end  
在分頁工具內立即跳轉到日誌的尾部。 此選項隱含了 -n1000,以確保分頁工具不必快取太多的日誌行。 不過這個隱含的行數可以被明確設定的 -n  選項覆蓋。 注意,此選項僅可用於 less(1) 分頁器。
-n, --lines=  
限制顯示最新的日誌行數。 --pager-end 與 --follow 隱含了此選項。  
此選項的引數:若為正整數則表示最大行數; 若為 "all" 則表示不限制行數;若不設引數則表示預設值10行。
--no-tail  
顯示所有日誌行, 也就是用於撤銷已有的 --lines= 選項(即使與 -f 連用)。
-r, --reverse  
反轉日誌行的輸出順序, 也就是最先顯示最新的日誌。
六、完成將多個主機(要求主機名為ip)的nginx日誌集中寫入到mysql表中
安裝MySQL和建立相應賬號
[root@centos8 ~]#yum install mysql-server
#在MySQL資料庫伺服器上建立相關資料庫和表,並授權rsyslog能連線至當前伺服器
[root@centos8 ~]#mysql -u
mysql>source /data/mysql-createDB.sql
mysql>CREATE USER 'rsyslog'@'10.0.0.%' IDENTIFIED BY '123456';
mysql>GRANT ALL ON Syslog.* TO 'rsyslog'@'10.0.0.%' ;

配置日誌伺服器將日誌傳送至指定資料庫

#配置rsyslog將日誌儲存到mysql中
[root@centos8 ~]#vim /etc/rsyslog.conf
#
####MODULES####
#在 MODULES 語言下面,如果是 Ubuntu22.04,20.04和CentOS8 加下面行
module(load="ommysql")
#在 MODULES 語言下面,如果是 CentOS 7,6 加下面行
$ModLoad ommysql
#在RULES語句塊加下面行的格式
#facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD
*.info :ommysql:10.0.0.18,Syslog,rsyslog,123456
[root@centos8 ~]#systemctl restart rsyslog.service
#Ubuntu 自動生成以下配置檔案,只需要按環境修改
[root@ubuntu2004 ~]#cat /etc/rsyslog.d/mysql.conf
### Configuration file for rsyslog-mysql
### Changes are preserved
module (load="ommysql")
*.* action(type="ommysql" server="10.0.0.18" db="Syslog" uid="rsyslog"
pwd="123456")

驗證
#在日誌伺服器上生成日誌
[root@centos8 ~]#logger "this is a test log"
#在資料庫上查詢到上面的測試日誌
mysql>SELECT COUNT(*) FROM SystemEvents;

七、嘗試使用logrotate服務切割nginx日誌,每天切割一次,要求大於不超過3M, 儲存90天的日誌, 舊日誌以時間為字尾,要求壓縮。
[root@rocky8 ~]cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 90
missingok
compress
delaycompress
notifempty
create 644 ngnix nginx
size 1M
postrotate
echo `date +%F_%T` >> /data/test1.log
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}

相關文章