Linux 第79天 syslog

Linux 第79天 syslog

時間: 20181021


目錄

日誌作用

Rsyslog

配置rsyslog成爲日誌服務器

其它的日誌文件作用

日誌管理命令journalctl

示例:rsyslog將日誌記錄於MySQL中

示例:通過loganalyzer展示數據庫中的日誌



日誌作用

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

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

系統日誌服務:

sysklogd:CentOS 5之前版本

syslogd: system application 記錄應用日誌

klogd: linuxkernel 記錄內核日誌

事件記錄格式:

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

C/S架構:通過TCP或UDP協議的服務完成日誌記錄傳送,

將分佈在不同主機的日誌實現集中管理


Rsyslog

rsyslog特性:CentOS6和7

多線程

UDP, TCP, SSL, TLS, RELP

MySQL, PGSQL, Oracle實現日誌存儲

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

自定義輸出格式

ELK:elasticsearch, logstash, kibana

非關係型分佈式數據庫

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

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

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

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


facility:設施,從功能或程序上對日誌進行歸類

auth

authpriv

cron 

daemon

ftp

kern

lpr

mail

news

security(auth)

user

uucp 

local0-local7


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:

*: 所有級別

none:沒有級別,即不記錄

PRIORITY:指定級別(含)以上的所有級別

=PRIORITY:僅記錄指定級別的日誌信息

target:

文件路徑:通常在/var/log/,文件路徑前的-表示異步寫入

用戶:將日誌事件通知給指定的用戶,* 表示登錄的所有用戶

日誌服務器:@host,把日誌送往至指定的遠程服務器記錄

管道:| COMMAND,轉發給其它命令處理


通常的日誌格式:

事件產生的日期時間主機進程(pid):事件內容

如:/var/log/messages,cron,secure等

配置rsyslog成爲日誌服務器

#### MODULES ####

# Provides UDP syslog reception

$ModLoadimudp

$UDPServerRun514

# Provides TCP syslog reception

$ModLoadimtcp

$InputTCPServerRun514



其它的日誌文件作用

/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) 在mysqlserver上授權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 ####

$ModLoadommysql

#### RULES ####

facility.priority:ommysql:DBHOST,DBNAME,DBUSER, PASSWORD


示例:通過loganalyzer展示數據庫中的日誌


(1) 在rsyslog服務器上準備amp或nmp組合

yum install httpdphpphp-mysqlphp-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

chmod666 config.php


(3) 配置loganalyzer

systemctlstart httpd.service

http://HOST/loganalyzer

MySQL Native, Syslog Fields, Monitorware

(4) 安全加強

cd /var/www/html/loganalyzer

chmod644 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轉儲時不發送日誌文件

olddirdirectory 轉儲後的日誌文件放入指定的目錄,必須和當前日

志文件在同一個文件系統

noolddir轉儲後的日誌文件和當前日誌文件放在同一個目錄下

prerotate/endscript在轉儲以前需要執行的命令可以放入這個對,

這兩個關鍵字必須單獨成行

postrotate/endscript在轉儲以後需要執行的命令可以放入這個對,

這兩個關鍵字必須單獨成行

daily 指定轉儲週期爲每天

weekly 指定轉儲週期爲每週

monthly 指定轉儲週期爲每月

size 大小指定日誌超過多大時,就執行日誌轉儲

rotate count 指定日誌文件刪除之前轉儲的次數,0指沒有備份,5指保留5個備份

Missingok如果日誌不存在,提示錯誤

Nomissingok如果日誌不存在,繼續下一次日誌,不提示錯誤


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