本節索引:
一、日志介紹
二、日志配置
三、日志管理
四、遠程日志
五、實驗:實現遠程日志
六、實驗:實現基于MySQL的遠程日志
七、實驗:通過loganalyzer展示數據庫中的日志
一、日志介紹
日志主要包含以下內容:
歷史事件:時間,地點,人物,事件
日志級別:事件的關鍵性程度,Loglevel
系統中常見日志及說明:
系統日志服務:
CentOS 5之前版本
syslogd
syslogd: system application 記錄應用日志
klogd: linux kernel 記錄內核日志
事件記錄格式:
日期時間 主機 進程[pid]: 事件內容
C/S架構:通過TCP或UDP協議的服務完成日志記錄傳送,將分布在不同主
機的日志實現集中管理
CentOS 6和7
rsyslog特性:
多線程
UDP, TCP, SSL, TLS, 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(auth),
user, uucp, local0-local7, syslog
Priority: 優先級別,從低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
參看幫助: man 3 syslog
二、日志配置
程序包: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:日志記錄相關的規則配置
日志格式:
RULES配置格式:
facility.priority; facility.priority… target
facility:
*:所有的facility
facility1,facility2,facility3,…:指定的facility列表
priority:
*:所有級別;如:”authpriv.*”表示authpriv認證信息服務產生的所有等級日志都記錄
none:沒有級別,即不記錄
PRIORITY:指定級別(含)以上的所有級別
=PRIORITY:僅記錄指定級別的日志信息,其他等級都不記錄。如:”*.emerg”表示任何日志
服務產生的日志,只要等級為emerg就記錄;此用法較少見,了解即可
target:
文件路徑:通常在/var/log/,文件路徑前的-表示異步寫入
用戶:將日志事件通知給指定的用戶,* 表示登錄的所有用戶
日志服務器:@host,把日志送往至指定的遠程服務器記錄
管道: | COMMAND,轉發給其它命令處理
/etc/rsyslog.conf
#### RULES ####
# Log all kernel messages to the console.
內核產生的任何日志
# Logging much else clutters up the screen.
#kern.*???????????? ????????????????????????????????????/dev/console
# Log anything (except mail) of level info or higher.
定義了系統中除郵箱,身份驗證,計劃任務以外的其他日志
# Don’t log private authentication messages!
*.info;mail.none;authpriv.none;cron.none??????????????? /var/log/messages
定義身份驗證授權相關的日志文件路徑
# The authpriv file has restricted access.
authpriv.*????????????????????????????????????????????? /var/log/secure
定義郵件日志文件路徑,”-“代表異步傳輸
# Log all the mail messages in one place.
mail.*????????????????????????????????????????????????? -/var/log/maillog
定義計劃任務日志文件路徑
# Log cron stuff
cron.*????????????????????????????????????????????????? /var/log/cron
系統出現嚴重問題時,每個人都會收到提示
# Everybody gets emergency messages
*.emerg???????????????????????????????????????????????? :omusrmsg:*
新聞相關服務日志文件
# Save news errors of level crit and higher in a special file.
uucp,news.crit????????????????????????????????????????? /var/log/spooler
本地預留定制日志
# Save boot messages also to boot.log
local7.*??????????????????????????????????????????????? /var/log/boot.log
##################################
三、日志管理
Journalctl工具
Systemd 統一管理所有 Unit 的啟動日志。帶來的好處就是,可以只用
journalctl一個命令,查看所有日志(內核日志和應用日志)。日志的配置文件
/etc/systemd/journald.conf
journalctl用法
查看所有日志(默認情況下 ,只保存本次啟動的日志)
? journalctl
查看內核日志(不顯示應用日志)
? journalctl -k
查看系統本次啟動的日志
? journalctl -b
? 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
? 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
Logrotate工具
logrotate 程序是一個日志文件管理工具。用來把舊的日志文件刪除,并創建新
的日志文件,稱為日志轉儲或滾動??梢愿鶕罩疚募拇笮?,也可以根據其
天數來轉儲,這個過程一般通過 cron 程序來執行
配置文件:/etc/logrotate.conf
四、遠程日志
Linux系統中的日志不僅可以在本地存儲,還可以遠程發送至指定的主機,設置指定的Mysql數據庫中。
啟用遠程日志服務:
通常的日志格式:
事件產生的日期時間 主機 進程(pid):事件內容
如: /var/log/messages,cron,secure等
配置rsyslog成為日志服務器
#### MODULES ####
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
五、實驗:實現遠程日志
前期準備:
虛擬機三臺
發送日志端:192.168.30.10
遠程接收端:192.168.30.17
訪問端:192.168.30.11
發送日志端:
修改sshd默認日志為local2,記錄等級至少為INFO
vim /etc/ssh/sshd_config
vim /etc/rsyslog.d/ssh.conf
local2.*????????? @192.168.30.17? ? ? ? ? ? ? ? #若使用tcp協議,格式:@@IP
local2.*?? ??????? /var/log/local2.log??????? ? #若要本機和遠程都記錄日志可添加此行
重啟日志及SSH服務
systemctl restart rsyslog sshd
遠程接收端:
開啟514端口
#$ModLoad imudp ? ? ? ?==>?? 去掉注釋
#$UDPServerRun 514 ?==>?? 去掉注釋
# Save boot messages also to boot.log
local2.*??????????? /var/log/local2.log???????? #添加此行
重啟日志服務
systemctl restart rsyslog
查看514端口是否已開啟
ss -untl
測試:
切換到訪問端ssh連接192.168.30.10
ssh 192.168.30.10
切換到遠程接收端,已收到日志發生端發送過來的日志
六、實驗:實現基于MySQL的遠程日志
前期準備:
虛擬機三臺
發送日志端:192.168.30.10
遠程接收端:192.168.30.17
訪問端:192.168.30.11
發送日志端:
安裝rsyslog-mysql包
yum install rsyslog-mysql
rpm -ql rsyslog-mysql
將mysql- createDB.sql發送到遠程接收端
scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.30.17:/root/
切換到遠程接收端:
導入數據庫
mysql < mysql-createDB.sql
mysql > use Syslog
mysql > show tables;
創建一個syslog授權用戶
mysql > grant all on Syslog.* to syslog@’192.168.30.%’? identified by ‘centos’;
musql > flush privileges;
日志發送端:
vim /etc/rsyslog.conf
#### MODULES ####
$ModLoad ommysql????????????????? #添加ommysql模塊
#### RULES ####
*.info;mail.none;authpriv.none;cron.none???? :ommysql:192.168.30.17,Syslog,syslog,centos
重啟日志服務
systemctl restart rsyslog
模擬一條日志信息
logger “this is a test log”
切換回遠程接收端
能看到剛剛發送的模擬日志信息
Mysql> select * from SystemEvents\G;
七、實驗:通過loganalyzer展示數據庫中的日志
前期準備:
承接基于MySQL遠程日志的實驗環境
具體步驟:
在rsyslog服務器上準備amp或nmp組合
yum install httpd php php-mysql php-gd
安裝LogAnalyzer
tar xvf 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 644 config.php
重啟httpd服務
systemctl start httpd
打開瀏覽器: http://192.168.30.17/loganalyzer/,出現下圖頁面,進行一些數據庫的配置后,就可以進入
loganlyzer管理數據庫中的日志了
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101714