無意義的卷首語:大資料時代,日志作為資料的切實表現載體,重要性不言而喻。前幾天阿拉還看到有差點為了資料輕生的工程師。啊啊,一身過硬的本領果然是存活于人世的基本素養啊。不過人無完人,事情發生了也隻能解決問題不是。如果能在事情發生之前有防患于未然的意識就再好不過了。順便,人生一世不易,放棄之前還請三思。
日志說明
安裝:yum install rsyslog -y(CentOS5為syslog)
rsyslog有三部分:
syslogd: system application 記錄應用與網絡服務日志
klogd: linux kernel 記錄核心日志
logrotate:對日志檔案進行切割循環記錄
rsyslog特性:
多線程
支援UDP, TCP, SSL, TLS, RELP加密可在
MySQL, PGSQL, Oracle等資料庫上實作日志存儲
強大的過濾器,可實作過濾記錄日志資訊中任意部分
自定義輸出格式,适用于各種需求
facility:應用程式中負責生成日志的機制,從功能或程式上對日志進行歸類
auth|authpriv(認證), cron(計劃任務),daemon(服務),ftp,kern, lpr(列印),mail,news, security(auth), ser|uucp|local0-local7(系統本身), syslog(syslog程式自身)
Priority:日志級别,從低到高排序
debug, info, notice, warn(warning), err(error),crit(critical), alert, emerg(panic)
參看幫助: man 3 syslog
logger工具可以用來生成日志,如:logger -p local1.info "This is a remote log",檢視/var/log/messages即可看到剛剛生成的日志
幫助:man logger
相關檔案
主程式:/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:日志記錄相關的規則配置
日志檔案:
/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的日志
配置檔案
主配置檔案内容如下:
配置格式:
facility.priority target
設施.級别 何處
facility和priority之間符号的含義:
.:點表示包含比自身級别低的所有等級
.=:僅記錄目前等級,其他都不要
.!:除目前等級外的都記錄
其餘等級:
*: 所有級别
none
:沒有級别,即不記錄
target:日志儲存的位置可以為以下幾種
檔案路徑:通常在/var/log/,檔案路徑前的-表示異步寫入
使用者:将日志事件通知給指定的使用者,* 表示登入的所有使用者
日志伺服器:@host,把日志送往至指定的遠端伺服器記錄
管道: | COMMAND,轉發給其它指令處理
配置rsyslog成為日志伺服器(隻需在配置檔案将下列幾行的注釋符去掉即可)
日志管理工具 journalctl (centos7)
配置檔案:/etc/systemd/journald.conf
用法:
檢視所有日志(預設情況下 ,隻儲存本次啟動的日志)
journalctl
檢視核心日志(不顯示應用日志)
journalctl -k
檢視系統本次啟動的日志
journalctl -b [-0]
檢視上一次啟動的日志(需更改設定)
journalctl -b -1
檢視指定時間的日志
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 /usr/lib/systemd/systemd
檢視指定程序的日志
journalctl _PID=1
檢視某個路徑的腳本的日志
journalctl /usr/bin/bash
檢視指定使用者的日志
journalctl _UID=33 --since today
檢視某個 Unit 的日志
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=1years
實驗:rsyslog将日志記錄于MySQL中
(1) 準備MySQL Server
yum install mariadb mariadb-client
systemctl start mariadb
mysql_secure_installation (執行一遍此腳本)
(2) 在mysql server上授權rsyslog能連接配接至目前伺服器
mysql> 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
以上中第一步和第四步centos6與CentOS7指令有所不同。centos6裡yum安裝資料庫應是mysql。第四步/usr/share/doc/目錄下可tab鍵補出對應的createDB.mysql檔案。
實驗:通過loganalyzer展示資料庫中的日志
(1) 在rsyslog伺服器上準備amp或nmp組合
yum install httpd php php-mysql php-gd
相關配置請參考:http://amelie.blog.51cto.com/12850951/1974905
(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
(3) 配置loganalyzer
systemctl start httpd.service
http://HOST/loganalyzer
MySQL Native, Syslog Fields, Monitorware
(4) 安全加強
chmod 644 config.php
Logrotate日志存儲
一般通過 cron 程式根據日志檔案的大小,也可以根據其天數來轉儲,進而執行日志滾動。
配置檔案是 /etc/logrotate.conf
主要參數如下:
compress 通過gzip 壓縮轉儲以後的日志
nocompress 不需要壓縮時,用這個參數
copytruncate 用于還在打開中的日志檔案,把目前日志備份并截斷
nocopytruncate 備份日志檔案但是不截斷
create mode owner group 轉儲檔案,使用指定的檔案模式建立新的日志檔案
nocreate 不建立新的日志檔案
delaycompress 和 compress 一起使用時,轉儲的日志檔案到下一次轉儲時才壓縮
nodelaycompress 覆寫 delaycompress 選項,轉儲并壓縮
errors address 專儲時的錯誤資訊發送到指定的Email 位址
ifempty 即使是空檔案也轉儲,是預設選項。
notifempty 如果是空檔案的話,不轉儲
mail address 把轉儲的日志檔案發送到指定的E-mail 位址
nomail 轉儲時不發送日志檔案
olddir directory 轉儲後的日志檔案放入指定的目錄,必須和目前日志檔案在同一個檔案系統
noolddir 轉儲後的日志檔案和目前日志檔案放在同一個目錄下
prerotate/endscript 在轉儲以前需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行
postrotate/endscript 在轉儲以後需要執行的指令可以放入這個對,這兩個關鍵字必須單獨成行
daily 指定轉儲周期為每天
weekly 指定轉儲周期為每周
monthly 指定轉儲周期為每月
size 大小 指定日志超過多大時,就執行日志轉儲
rotate count 指定日志檔案删除之前轉儲的次數,0指沒有備份,5指保留5個備份
Missingok 如果日志不存在,提示錯誤
Nomissingok如果日志不存在,繼續下一次日志,不提示錯誤