天天看點

Linux日志管理

無意義的卷首語:大資料時代,日志作為資料的切實表現載體,重要性不言而喻。前幾天阿拉還看到有差點為了資料輕生的工程師。啊啊,一身過硬的本領果然是存活于人世的基本素養啊。不過人無完人,事情發生了也隻能解決問題不是。如果能在事情發生之前有防患于未然的意識就再好不過了。順便,人生一世不易,放棄之前還請三思。

日志說明

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

繼續閱讀