Linux-日誌管理

title.png

本章內容

日誌介紹

日誌配置

日誌管理

遠程日誌

基於MYSQL的日誌

 

日誌介紹

日誌:

歷史事件:時間,地點,人物,事件

日誌級別:事件的關鍵性程度,Loglevel

系統日誌服務:

sysklogd :CentOS 5之前版本

syslogd: system application 記錄應用日誌

klogd: linux kernel 記錄內核日誌

事件記錄格式:

日期時間 主機 進程[pid]: 事件內容

C/S架構:通過TCPUDP協議的服務完成日誌記錄傳送,將分佈在不同主機的日誌實現集中管理

 

rsyslog

rsyslog特性:CentOS67

多線程

UDP, TCP, SSL, TLS, RELP

MySQL, PGSQL, Oracle實現日誌存儲

強大的過濾器,可實現過濾記錄日誌信息中任意部分

自定義輸出格式

ELKelasticsearch, logstash, kibana

非關係型分佈式數據庫

基於apache軟件基金會jakarta項目組的項目lucene

Elasticsearch是個開源分佈式搜索引擎

Logstash對日誌進行收集、分析,並將其存儲供以後使用

kibana 可以提供的日誌分析友好的 Web 界面

 

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

主程序:/usr/sbin/rsyslogd

CentOS 6service 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

 

例:ssh日誌

vim /etc/ssh/sshd_config

       #SyslogFacility authpriv 這行註釋掉

       SyslogFacility local2

vim /etc/rsyslog.d/ssh.conf

       local2                  /var/log/sshd.log

       local2                  @IPADDR  #發送到遠程主機的UDP514端口

       遠程主機要接受UDP日誌,需開啓UDP514端口,把以下兩行的註釋去掉

       vim /etc/rsyslog.conf

       $ModLoad imudp

       $UDPServerRun 514

       local2                  @@IPADDR  #發送到遠程主機的TCP514端口

       遠程主機要接受TCP日誌,需開啓TCP514端口,把以下兩行的註釋去掉

       vim /etc/rsyslog.conf  把以下兩行的註釋去掉

       $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 --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

 

示例: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展示數據庫中的日誌

產生日誌的服務器,mysql,loganalyzer可分在3臺機器上

(1) rsyslog服務器上準備ampnmp組合

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

(3) 配置loganalyzer

systemctl start httpd.service

http://HOST/loganalyzer

按網頁嚮導一步一步做就行,其中第7步如下圖所示配置

LogAnalyzer Step 7.jpg

MySQL Native, Syslog Fields, Monitorware,SystemEvents,

配置完畢

LogAnalyzer網頁2.jpg

(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 轉儲文件,使用指定的文件模式創建新的日誌文件

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如果日誌不存在,繼續下一次日誌,不提示錯誤


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章