Linux之日誌管理

朝聖布達拉發表於2018-10-23

日誌介紹
日誌配置
日誌管理
遠端日誌
基於MYSQL的日誌

日誌介紹
日誌:
歷史事件:時間,地點,人物,事件
日誌級別:事件的關鍵性程度,Loglevel
系統日誌服務:
sysklogd :CentOS 5之前版本
syslogd: system application 記錄應用日誌
klogd: linux kernel 記錄核心日誌
事件記錄格式:
日期時間 主機 程式[pid]: 事件內容
C/S架構:通過TCP或UDP協議的服務完成日誌記錄傳送,將分佈在不同主
機的日誌實現集中管理

rsyslog介紹
術語,參見man logger
facility:設施,從功能或程式上對日誌進行歸類
auth, authpriv, cron, daemon,ftp,kern, lpr, mail, news, security(auth),
user, uucp, local0-local7, syslog
Priority 優先順序別,從低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert,
emerg(panic)
參看幫助: man 3 syslog

rsyslog
rsyslog特性:CentOS6和7
多執行緒
UDP, TCP, SSL, TLS, RELP
MySQL, PGSQL, Oracle實現日誌儲存
強大的過濾器,可實現過濾記錄日誌資訊中任意部分
自定義輸出格式
ELK:elasticsearch, logstash, kibana
非關係型分散式資料庫
基於apache軟體基金會jakarta專案組的專案lucene
Elasticsearch是個開源分散式搜尋引擎
Logstash對日誌進行收集、分析,並將其儲存供以後使用
kibana 可以提供的日誌分析友好的 Web 介面

rsyslog
程式包:rsyslog
主程式:/usr/sbin/rsyslogd
CentOS 6:service rsyslog {start|stop|restart|status}
CentOS 7:/usr/lib/systemd/system/rsyslog.service
配置檔案:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
庫檔案: /lib64/rsyslog/*.so
配置檔案格式:由三部分組成
MODULES:相關?榕渲?
GLOBAL DIRECTIVES:全域性配置
RULES:日誌記錄相關的規則配置

rsyslog
RULES配置格式: facility.priority; facility.priority… target
facility:
*: 所有的facility
facility1,facility2,facility3,…:指定的facility列表
priority:
*: 所有級別
none:沒有級別,即不記錄
PRIORITY:指定級別(含)以上的所有級別
=PRIORITY:僅記錄指定級別的日誌資訊
target:
檔案路徑:通常在/var/log/,檔案路徑前的-表示非同步寫入
使用者:將日誌事件通知給指定的使用者,* 表示登入的所有使用者
日誌伺服器:@host,把日誌送往至指定的遠端伺服器記錄
管道: | COMMAND,轉發給其它命令處理

啟用網路日誌服務
通常的日誌格式:
事件產生的日期時間 主機 程式(pid):事件內容
如: /var/log/messages,cron,secure等
配置rsyslog成為日誌伺服器
#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

其它日誌
其它的日誌檔案
/var/log/secure:系統安裝日誌,文字格式,應週期性分析
/var/log/btmp:當前系統上,使用者的失敗嘗試登入相關的日誌資訊,二進位制格
式,lastb命令進行檢視
/var/log/wtmp:當前系統上,使用者正常登入系統的相關日誌資訊,二進位制格
式,last命令可以檢視
/var/log/lastlog:每一個使用者最近一次的登入資訊,二進位制格式,lastlog命令
可以檢視
/var/log/dmesg:系統引導過程中的日誌資訊,文字格式
文字檢視工具檢視
專用命令dmesg檢視
/var/log/messages :系統中大部分的資訊
/var/log/anaconda : anaconda的日誌

日誌管理journalctl
Systemd 統一管理所有 Unit 的啟動日誌。帶來的好處就是,可以只用
journalctl一個命令,檢視所有日誌(核心日誌和應用日誌)。日誌的配置檔案
/etc/systemd/journald.conf
journalctl用法
檢視所有日誌(預設情況下 ,只儲存本次啟動的日誌)
journalctl
檢視核心日誌(不顯示應用日誌)
journalctl -k
檢視系統本次啟動的日誌
journalctl -b
journalctl -b -0
檢視上一次啟動的日誌(需更改設定)
journalctl -b -1

日誌管理journalctl
檢視指定時間的日誌
journalctl –since=”2017-10-30 18:10:30″
journalctl –since “20 min ago”
journalctl –since yesterday
journalctl –since “2017-01-10” –until “2017-01-11 03:00”
journalctl –since 09:00 –until “1 hour ago”
顯示尾部的最新10行日誌
journalctl -n
顯示尾部指定行數的日誌
journalctl -n 20
實時滾動顯示最新日誌
journalctl -f

日誌管理journalctl
檢視指定服務的日誌
journalctl /usr/lib/systemd/systemd
檢視指定程式的日誌
journalctl _PID=1
檢視某個路徑的指令碼的日誌
journalctl /usr/bin/bash
檢視指定使用者的日誌
journalctl _UID=33 –since today
檢視某個 Unit 的日誌
journalctl -u nginx.service
journalctl -u nginx.service –since today
實時滾動顯示某個 Unit 的最新日誌
journalctl -u nginx.service -f
合併顯示多個 Unit 的日誌
journalctl -u nginx.service -u php-fpm.service –since today

日誌管理journalctl
檢視指定優先順序(及其以上級別)的日誌,共有8級
0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
日誌預設分頁輸出,–no-pager 改為正常的標準輸出
journalctl –no-pager

日誌管理journalctl
以 JSON 格式(單行)輸出
journalctl -b -u nginx.service -o json
以 JSON 格式(多行)輸出,可讀性更好
journalctl -b -u nginx.serviceqq -o json-pretty
顯示日誌佔據的硬碟空間
journalctl –disk-usage
指定日誌檔案佔據的最大空間
journalctl –vacuum-size=1G
指定日誌檔案儲存多久
journalctl –vacuum-time=1years

示例:rsyslog將日誌記錄於MySQL中
(1) 準備MySQL Server
(2) 在mysql server上授權rsyslog能連線至當前伺服器
GRANT ALL ON Syslog.* TO `USER`@`HOST` IDENTIFIED BY `PASSWORD`;
(3) 在rsyslog伺服器上安裝mysql?橄喙氐某絛虯?
yum install rsyslog-mysql
(4) 為rsyslog建立資料庫及表;
mysql -uUSERNAME -hHOST -pPASSWORD < /usr/share/doc/rsyslog-
7.4.7/mysql-createDB.sql
(5) 配置rsyslog將日誌儲存到mysql中
#### MODULES ####
$ModLoad ommysql
#### RULES ####
facility.priority :ommysql:DBHOST,DBNAME,DBUSER, PASSWORD

示例:通過loganalyzer展示資料庫中的日誌
(1) 在rsyslog伺服器上準備amp或nmp組合
yum install httpd php php-mysql php-gd
(2) 安裝LogAnalyzer
tar xf loganalyzer-4.1.5.tar.gz
cp -a loganalyzer-4.1.5/src /var/www/html/loganalyzer
cd /var/www/html/loganalyzer
touch config.php
chmod 666 config.php

示例:通過loganalyzer展示資料庫中的日誌
(3) 配置loganalyzer
systemctl start httpd.service
http://HOST/loganalyzer
MySQL Native, Syslog Fields, Monitorware
(4) 安全加強
cd /var/www/html/loganalyzer
chmod 644 config.php

Logrotate日誌儲存
logrotate 程式是一個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新
的日誌檔案,稱為日誌轉儲或滾動?梢願萑罩疚募拇笮。部梢願萜?
天數來轉儲,這個過程一般通過 cron 程式來執行
配置檔案是 /etc/logrotate.conf
主要引數如下
compress 通過gzip 壓縮轉儲以後的日誌
nocompress 不需要壓縮時,用這個引數
copytruncate 用於還在開啟中的日誌檔案,把當前日誌備份並截斷
nocopytruncate 備份日誌檔案但是不截斷
create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日誌檔案

Logrotate日誌儲存
nocreate 不建立新的日誌檔案
delaycompress 和 compress 一起使用時,轉儲的日誌檔案到下一次轉儲時
才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲並壓縮
errors address 專儲時的錯誤資訊傳送到指定的Email 地址
ifempty 即使是空檔案也轉儲,是預設選項。
notifempty 如果是空檔案的話,不轉儲
mail address 把轉儲的日誌檔案傳送到指定的E-mail 地址
nomail 轉儲時不傳送日誌檔案
olddir directory 轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在
同一個檔案系統
noolddir 轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下

Logrotate日誌儲存
prerotate/endscript 在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵
字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的命令可以放入這個對,這兩個關
鍵字必須單獨成行
daily 指定轉儲週期為每天
weekly 指定轉儲週期為每週
monthly 指定轉儲週期為每月
size 大小 指定日誌超過多大時,就執行日誌轉儲
rotate count 指定日誌檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個
備份
Missingok 如果日誌不存在,提示錯誤
Nomissingok如果日誌不存在,繼續下一次日誌,不提示錯誤

相關文章