- 日志介紹
- rsyslog
- 日志管理journalctl
- MySQL管理日志
一、日志介紹
(一)日志的基本概念
- 日志:將事件發生的時間、地點、人物、事件等信息保存記錄
- 日志級別:根據事件的關鍵程度對日志的分級
- 事件記錄格式:一般包含日期時間、主機、進程[pid]、事件內容
- 基于C/S架構的日志系統:通過TCP或UDP協議的服務完成日志記錄傳送,將分布在不同主機的日志實現集中管理
(二)日志系統的發展
-
sysklogd: CentOS5之前的系統日志服務
- syslogd: 記錄應用日志
- klogd:記錄內核日志
-
rsyslog: CentOS6, 7使用的系統日志服務
- 支持TCP, UDP
- 支持日志轉儲于數據庫MySQL, Oracle
- 強大的過濾器
- 自定義輸出格式
-
ELK:elasticsearch, logstash, kibana
- 非關系型分布式數據庫
- 專業的日志管理平臺
(三)rsyslog的關鍵概念
facility:設施,從功能或程序上對日志進行歸類
auth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security(auth), user, uucp, local0-local7(預留自定義), syslogpriority:優先級別,從低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
二、rsyslog
(一)rsyslog相關文件路徑
- 主程序:/usr/sbin/rsyslogd
- CentOS 6服務管理:service rsyslog {start|stop|restart|status}
- CentOS 7服務管理:systemctl {start|stop|restart|status} rsyslog.service
- 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
- 庫文件:/lib64/rsyslog/*.so
(二)rsyslog配置文件格式
(1)總體分為三部分
- MODULES:相關模塊配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志記錄相關的規則配置
(2)RULES配置格式
格式:facility.priority;facility.priority… target
-
facility
- *:所有的facility
- facility1,facility2,facility3,...:指定的facility列表
-
priority
- *:所有級別
- none:沒有級別,即不記錄
- PRIORITY:指定級別(含)以上的所有級別
- =PRIORITY:僅記錄指定級別的日志信息
-
target
- 文件路徑:通常在
/var/log/
,文件路徑前的-
表示異步寫入 - 用戶:將日志事件通知給指定的用戶,
*
表示登錄的所有用戶 - 日志服務器:
@host
,把日志送往至指定的遠程服務器記錄 - 管道:
| COMMAND
,轉發給其它命令處理
- 文件路徑:通常在
(三)rsyslog的網絡日志服務
(1)配置網絡日志服務:修改配置文件,當UDP和TDP服務模塊開啟
vim /etc/rsyslog.conf
#### MODULES ####
# Provides UDP syslog reception
$ModLoadimudp //取消行前的注釋符
$UDPServerRun514 //取消行前的注釋符
# Provides TCP syslog reception
$ModLoadimtcp //取消行前的注釋符
$InputTCPServerRun514 //取消行前的注釋符
(2)實驗:配置rsyslog網絡日志服務
主機配置:兩臺主機
日志服務器:負責接收客戶端通過UDP或TCP發來的日志信息(IP:192.168.136.230)
日志客戶端:負責發出寫入日志請求實驗1:通過UDP使客戶端的事件記錄在日志服務器的/var/log/messages中
// 修改服務器配置文件module部分,開啟UDP通信模塊
vim /etc/rsyslog.conf
$ModLoad imudp //刪除行前注釋符
$UDPServerRun 514 //刪除行前注釋符
systemctl restart rsyslog
// 修改客戶端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.136.230 //修改target
systemctl restart rsyslog
//客戶端測試
logger -p syslog.info "this is 1st message"
//服務器查看日志記錄
tail /var/log/messages
- 實驗2:通過TCP使客戶端的事件記錄顯示在日志服務器的所有登錄用戶終端上
// 修改服務器配置文件module和rules部分,開啟TCP通信模塊
vim /etc/rsyslog.conf
$ModLoad imtcp //刪除行前注釋符
$InputTCPServerRun 514 //刪除行前注釋符
local2.* *
systemctl restart rsyslog
// 修改客戶端配置文件rules部分
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages //恢復上個實驗的修改
local2.* @@192.168.136.230 //TCP使用兩個@
systemctl restart rsyslog
//客戶端測試
logger -p local2.info "this is 2nd message"
(四)其他日志
/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的日志管理工具,可以查看所有內核日志和應用日志
配置文件:/etc/systemd/journald.conf
(一)journalctl查看日志
查看所有日志(默認情況下,只保存本次啟動的日志)
journalctl查看內核日志(不顯示應用日志)
journalctl -k查看系統本次啟動的日志
journalctl -b
journalctl -b -0查看上一次啟動的日志(需更改設置)
journalctl -b -1查看指定時間的日志
journalctl --since="2012-10-30 18:17:16"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2015-01-10" --until "2015-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
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以JSON 格式(單行)輸出
journalctl -b -u nginx.service -o json以JSON 格式(多行)輸出,可讀性更好
journalctl -b -u nginx.service -o json-pretty顯示日志占據的硬盤空間
journalctl --disk-usage指定日志文件占據的最大空間
journalctl --vacuum-size=1G指定日志文件保存多久
journalctl --vacuum-time=1years
四、MySQL管理日志
(一)實驗1:rsyslog將日志記錄于MySQL中
- 實現此功能需要兩臺主機
主機1:rsyslog服務器(IP: 192.168.136.230)
主機2:mysql數據庫(IP: 192.168.136.130)
(1)主機1安裝mysql與rsyslog的接口
安裝rsyslog-mysql
yum install rsyslog-mysql
查看安裝文件路徑,其中的SQL腳本文件用于生成數據庫,直接傳送至主機2
rpm -ql rsyslog-mysql
scp /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql 192.168.136.130:/root
(2)主機2安裝并配置數據庫
- 安裝mariadb
yum install mariadb-server
systemctl start mariadb.service
mysql_secure_installation
- 用傳送來的SQL腳本生成數據庫
mysql -u root -pmagedu < mysql-createDB.sql
- 創建管理用戶并授權
MariaDB [(none)]> grant all on Syslog.* to loguser@'%' identified by 'centos';
(3)主機1配置rsyslog
- 編輯/etc/rsyslog.conf文件
vim /etc/rsyslog.conf
$ModLoad ommysql //載入模塊
local2.* :ommysql:192.168.136.130,Syslog,loguser,centos //設置rules
- 重啟rsyslog服務并測試
systemctl restart rsyslog.service
logger -p local2.info "this is the message for rsyslog-mysql"
(4)主機2查看數據庫
mysql -u loguser -pcentos
MariaDB [(none)]> use Syslog;
MariaDB [Syslog]> show tables;
MariaDB [Syslog]> select * from SystemEvents\G;
(二)實驗2:通過loganalyzer展示數據庫中的日志
本實驗環境承接實驗1,并且需要添加主機3用于通過web界面展示數據庫的日志
主機分工:
主機1:rsyslog服務器(IP: 192.168.136.230)
主機2:mysql數據庫(IP: 192.168.136.130)
主機3:apache httpd服務器,php,loganalyzer(IP: 192.168.136.229)
(1)主機3安裝apache httpd, php
yum install httpd php php-mysql php-gd
service httpd start
(2)主機3測試是否成功連接到數據庫
vim /var/www/html/index.php
<?php
$mysqli=new mysqli("192.168.136.130","loguser","centos");
if(mysqli_connect_errno()){
echo "連接數據庫失敗!";
$mysqli=null;
exit;
}
echo "連接數據庫成功!";
$mysqli->close();
phpinfo();
?>
瀏覽器登錄http://192.168.136.229/
,測試連接數據庫成功
(3)主機3編譯安裝loganalyzer
tar xvf loganalyzer-4.1.5.tar.gz
cd loganalyzer-4.1.5
cp -r src/ /var/www/html/log //只復制src子目錄的文件至網頁存放目錄
cd /var/www/html/log/
touch config.php //準備安裝配置文件
chmod 666 config.php
(4)配置loganalyzer
- 瀏覽器登錄
http://192.168.136.229/log/
,出現提示如下圖
- 點擊here,進入安裝過程。依次點擊繼續,在step 7時,填寫mysql數據庫的關鍵信息
紅框中的信息按照創建數據庫的相關信息填寫
Source Type: MYSQL Native
Database Host: 192.168.136.130
Database Name: Syslog
Database Tablename: SystemEvents
Database User: loguser
Database Password: centos
- 安裝成功,顯示界面如下,可以看到日志信息