日志管理
日志:
歷史事件:時間,地點,人物,事件
日志級別:事件的關鍵性程度,loglevel
系統日志服務:
Sysklogd:centos5之前版本
Klogd:linux kernel記錄內核日志
時間記錄格式:
日期時間 ??主機 ?進程[pid] ??事件內容
C/S 架構:通過TCP或udp協議的服務完成日志記錄傳送,將分布在不同主機的日志實現集中管理
Rsyslog特性:centos6和7
多線程
Udp,tcp,ssl,tlc,relp
Mysql,pgsql,oracle實現日志存儲
強大的過濾器,可實現過濾記錄日志信息中任意部分
自定義輸出格式
ELK:elasticsearch,logstash,kibana
非關系型分布式數據庫
基于Apache軟件基金會jakarta項目lucene
Elasticsearch是個開源分布式搜索引擎
Logstash對日志進行收集、分析,并將其存儲供以后使用
Kibana 可以提供的日志分期友好的web界面
術語,參見man logger
Facility:設施,從功能或程序上對日志進行歸類
Auth ,authpriv,cron,daemon,ftp,kern,lpr,mail,news,security,user,uucp,local0-7,syslog
Priority 優先級別,從低到高排序
Debug,info,notice,warn,err,crit,alert,emerg
程序包:rsyslog
主程序:/usr/sbin/rsyslogd
Centos6 :service rsyslog{start|stop|restart|status}
Centos7 :/usr/lib/systemd/system/rsyslog.service
配置文件:/etc/rsyslog.conf, /etc/rsyslog.d/*.conf
庫文件:/lib/64/rsyslog/*.so
配置文件格式:由三部分組成
MODULES:相關模塊配置
GLOBAL DIRECTIVES:全局配置
RULES:日志記錄相關的規則配置
RULES配置格式:facility.priority; facility.priority… ??target
Facility:
*:所有的facility
Facility1,facility2,facility3,..指定的facility
Priority:
*:所有級別
None:沒有級別,即不記錄
PRIORITY:指定級別以上的所有級別
=PRIORITY:僅記錄指定級別的日志信息
Target:
文件路徑:通常在在/var/log/,文件路徑前的-表示異步寫入用戶:將日志時間通知給指定的用戶,*表示登錄的所有用戶
日志服務器:@host,把日志送往至指定的遠程服務器記錄
管道:|COMMAND,轉發給其他命令處理
通常的日志格式:
事件產生的日期時間 主機 進程 :事件內容
如:/var/log/messages,cron,secure
配置rsyslog成為日志服務器
###MODULES####
#Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
#Provides TCP syslog reception
$ModLoad imudp
$TCPServerRun 514
其它的日志文件
/var/log/secure:系統安裝日志,文本格式,應周期性分析
/var/log/btmp:當前系統上,用戶的失敗嘗試登錄相關的日志信息,二進制格式,lastb命令進行查看
/var/log/wrmp:當前系統上,用戶正常登錄系統的相關日志信息,二進制格式,last命令可以查看
/var/log/dmesg:系統引導過程中的日志信息,文本格式
文本查看工具查看
專用命令dmesg查看
/var/log/messages:系統中大部分的信息
/var/log/anaconda:anaconda的日志
Systemd統一管理所有unit的啟動日志。帶來的好處就是,可以只用journalctl一個命令,查看所有日志(內核日志和應用日志)。日志的配置文件/erc/systemd/journald.conf
Journalctl用法
查看所有日志(默認情況下,只保存本次啟動的日志)
Journalctl
查看內核日志(不顯示應用日志)
Journalctl -k
查看系統本次啟動的日志
Journalctl -b
Journalctl -b -0
查看上一次啟動的日志(需要更改設置)
Journalctl -b -1
查看指定服務的日志
Journalctl /usr/lib/systemd/systemd
查看指定進程的日志
Journalctl _PID=1
查看某個指定用戶的日志
Journalctl _UID=33 –since today
查看某個路徑的腳本的日志
Journalctl /usr/bin/bash
查看某個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
查看指定優先級的日志,共有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
以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=1yesrs
- 準備MYSQL Server
- 在mysql server上授權rsyslog能連接至當前服務器
Mysql > GRANT ALL ON Syslog.* TO ‘USER’@’HOST’
IDENTIFIED BY ‘PASSWLRD’;
- 在rsyslog服務器上安裝mysql模塊相關的程序包
Yum install rsyslog-mysql
- 為rsyslog創建數據庫及表
Mysql -uUSERNAME -hHOST -pPASSWORD<
/usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql
- 配置rsyslog將日志保存到mysql中
###MODULES####
$ModLoad ommysql
###RULES####
Facility.priority ??:ommysql:DBHOST,DBNAME,DBUSER,PASSWORD
示例:通過loganalyzer 展示數據庫中的日志
- 在rsyslog服務器上準備amp或nmp組合
Yum install httpd php php-mysql hph-gd
(2)安裝loganalyer
Tar xf loganalyzer-4.1.5.tar.gz
Cp -a loganalyzer-4.1.5/src
/var/www/html/loganalyzer
Touch config.php
Chmod 666 config.php
- 配置loganalyzer
Systemctl start httpd
http://HOST/loganalyzer
- 安全加強
Cd /var/www/html/loganalyzer
Chmod 644 config.php
Logrotate日志存儲
Logrotate程序是一個日志文件管理工具。用來把舊的日志文件刪除,并創建新的文件,稱為日志轉儲或滾動??梢愿鶕罩疚募拇笮。部梢愿鶕涮鞌祦磙D儲,這時過程一般通過cron程序來執行
配置文件時/etc/logrotate.conf
主要參數如下
Compress通過gzip壓縮轉儲以后的日志
Nocompress不需要壓縮時,用這個參數
Copytruncate用于還在打開中的日志文件,把當前日志備份并截斷
Nocopytruncate備份日志文件但是不截斷
Create mode ownergroup 轉儲文件,使用指定的文件模式創建新的日志文件
Nocreate 不建立新的日志文件
Delaycompress和compress一起使用時,轉儲的日志文件到下一次轉儲時才壓縮
Nodelaycompress覆蓋delaycompress選項,轉儲并壓縮
Error addres 轉儲時的錯誤信息發送到指定的Email地址
Ifempty 即使是空文件也轉儲,是缺省項
Notifempty如果是空文件的話,不轉儲
Mail address 把轉儲的日志文件發送到指定的Email地址
Nomail轉儲時不發送日志文件
Olddir directory 轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統
Noolddir 轉儲后的日志文件和當前日志文件放在同一個目錄下
Prerotate/endscript在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
Postrotate/endscript在轉儲以后需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行
Daily指定轉儲周期為每天
Weekly指定轉儲周期為每周
Monthly指定轉儲周期為每月
Size大小 指定日志文件刪除之前轉儲的次數,0指沒有備份,5指保留5個備份
Missingok 如果日志不存在,提示錯誤
Nomissingo如果日志不存在,繼續下一次日志,不提示錯誤
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91496