Linux日誌服務初識

本文主要從日誌分類、分割日誌和日誌收集等幾個方面介紹了和服務器日誌有關的工具。
上篇文章回顧: 陣列卡緩存電池充放電問題詳解


對常常在服務器上面工做的人來講,日誌的閱讀和利用每每是很是重要的。偶爾出現了問題或解決以後,查看相關日誌每每是定位問題緣由的主要方法。所以,讓咱們來了解一下和服務器日誌有關的工具。php

一、/var/log 下的日誌分類

首先來看看這個目錄,下面存放大部分的系統日誌,如下是比較經常使用的幾個日誌文件:
/var/log/message :核心系統日誌文件,包含系統啓動引導,系統運行狀態和大部分錯誤信息等都會記錄到這個文件,所以這個日誌是故障診斷的首要查看對象。
/var/log/dmesg:核心啓動日誌,系統啓動時會在屏幕顯示與硬件有關的信息,這些信息會保存在這個文件裏面。
/var/log/secure:驗證,受權和安全日誌,常見的用戶登陸驗證相關日誌就存放在這裏。
/var/log/spooler:UUCP和news設備相關的日誌信息
/var/log/cron:與定時任務相關的日誌信息
/var/log/maillog:記錄每個發送至系統或者從系統發出的郵件活動
/var/log/boot:系統引導日誌前端

二、logrotate 分割日誌工具

目前大部分 linux 系統都會默認安裝有 logrotate,日誌分割工具。而這個工具的功能就是你們在 /var/log/ 目錄下面看到的形如 messages-20181028 樣式的日誌,在使用 logrotate 進行配置後就能夠按照時間或者大小對日誌進行分割存儲。若是對 /etc/logrotate.conf 文件和 /etc/logrotate.d/目錄沒有改動,能夠看到 /etc/logrotate.conf 默認配置:mysql

/etc/logrotate.conf

# 按周輪訓
weekly
# 保留4週日志備份
rotate 4# 標記分割日誌並建立當前日誌
create
# 使用時間做爲後綴
dateext
# 對 logrotate.d 目錄下面的日誌種類使用
include /etc/logrotate.d
# 對於wtmp 和 btmp 日誌處理在這裏進行設置
/var/log/wtmp {
    monthly
    create 0664 root utmp
 minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}複製代碼

那麼在 /etc/logrotate.d/ 目錄下面。咱們來看比較典型的兩類日誌,按時間和大小處理。linux

/etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok # 忽略文件相關錯誤
    sharedscripts # 全部指令完成以後,執行script中內容
    postrotate
  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true # 對每次的輪循處理後,rsyslog從新讀取配置運行
    endscript
}複製代碼

/etc/logrotate.d/syslog 對日誌的處理,是繼承了 /etc/logrotate.conf 裏面的配置,所以就會對日誌 cron,maillog,messages,secure,spooler 進行按周分割,並保留 4 周內的分割日誌,久遠的日誌將進行刪除。sql

/etc/logrotate.d/yum

/var/log/yum.log {
    missingok
    notifempty # 日誌爲空不輪循
    size 30k
    yearly
    create 0600 root root
}複製代碼

而在 /etc/logrotate.d/yum 裏面能夠看到指定了 size 和 yearly,所以對於 yum 類日誌將會按日誌大小進行年分割。若是日誌達到設定的大小,那麼將會在現有的日誌上面進行分割。而一年內若是爲達到設定大小,則按年進行分割。緩存

此外,若是你在服務器上面安裝了mysql,httpd 或者其餘應用服務後,logrotate 它會自動在 /etc/logrotate.d/ 下面建立對應的日誌處理方式,基本是繼承 logrotate.conf。安全

/etc/logrotate.d/httpd

/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}複製代碼

所以,不管是你服務器上面系統日誌仍是應用日誌,面對日誌量太大的問題,均可以使用 logrotate 進行設置處理。bash

三、rsyslog 日誌收集

rsyslog 是一個能夠進行日誌轉發和收集的工具,利用它能夠擁有一臺日誌收集服務器,從而能夠減小客戶端日誌的壓力,對於相關日誌的統一也是很是有用的,同時還有相應的前端展現工具來進行日誌的查看統計。服務器

rsyslog 不只能夠進行系統日誌的收集,同時也支持應用日誌的收集,只不過若是收集應用自定義日誌的話,須要在客戶端機器上面進行設置。因咱們業務種類較多,不可能在初始化裝機時在業務服務器上面配置相同的應用日誌服務。所以,業務能夠根據本身的需求,進行相關配置。下面讓咱們看一下當前咱們使用的rsyslog服務狀況。運維

ps aux | grep rsyslog 查看服務是否正常運行

root     14468  0.0  3.6 664592 69584 ?        Ssl  Nov06   0:31 /usr/sbin/rsyslogd -n複製代碼

rsyslog 的配置文件爲 /etc/rsyslog.conf,當咱們想把一臺服務器變成rsyslog日誌收集服務器的時候,對這個配置文件進行修改便可。

在服務端配置有如下兩個地方須要進行修改和配置:

/etc/rsyslog.conf

開啓udp日誌傳輸模式
$ModLoad imudp
$UDPServerRun 514

設置日誌收集路徑,包括客戶端機器名與日誌類型
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template RemoteLogs,"/home/syslogs/%HOSTNAME%/%PROGRAMNAME%.log"
*.*  ?RemoteLogs
& ~複製代碼

而在業務機器上面,只須要在配置的末尾,開啓日誌轉發便可:

/etc/rsyslog.conf

#*.* @10.21.109.2
#authpriv.* @@10.101.10.199
*.*             @syslog.sys.srv複製代碼

@ 表示使用 UDP 進行轉發,正好對應服務端開啓了 UDP 收集方式。

在通過上面的配置以後,重啓 systemctl restart rsyslog.service ,這樣一個日誌收集服務就成功創建了。咱們能夠看一下在rsyslog服務器上面收集到的日誌是什麼樣子:

日誌收集

[root@amazing00 amazing01]# pwd
/home/syslogs/amazing01 # 能夠看到這是在配置裏面設置好的路徑,轉發過來的日誌信息會以客戶端的主機名進行識別和收集
[root@amazing00 amazing01]# ll
total 5484
-rw------- 1 root root    8651 Nov 15 03:24 anacron.log
-rw------- 1 root root     284 Nov 13 15:56 auditd.log
-rw------- 1 root root  126201 Nov 15 15:20 CROND.log
-rw------- 1 root root     245 Nov  7 17:56 groupadd.log
-rw------- 1 root root      96 Nov  6 10:18 kernel.log
-rw------- 1 root root      90 Nov  7 17:37 passwd.log
-rw------- 1 root root    1980 Nov  7 17:57 polkitd.log
-rw------- 1 root root   10633 Nov  8 10:14 root.log
-rw------- 1 root root     434 Nov 12 03:16 rsyslogd.log
-rw------- 1 root root   39812 Nov 15 15:01 run-parts(.log
-rw------- 1 root root 4763118 Nov 15 05:42 sshd.log
-rw------- 1 root root  606036 Nov 15 15:20 systemd.log
-rw------- 1 root root    1343 Nov  8 13:53 systemd-logind.log
-rw------- 1 root root     313 Nov  7 17:56 useradd.log
-rw------- 1 root root     874 Nov  7 17:57 yum.log複製代碼

從這臺amazing01機器上面轉發過來的日誌,咱們能夠看到和正常服務器/var/log下面的日誌文件名是不同的。這裏按照每一條系統日誌的種類進行了分類收集,十分的清楚和方便查詢。

最後,rsyslog 還有一個相應的前端日誌展現工具 loganalyzer,其利用的工具備 httpd,php和mysql。

這個前端工具適用於中小型服務器集羣,對於咱們當前的rsyslog服務收集的機器日誌很是多,考慮對rsyslog服務器的壓力,因此不建議採用這個前端展現工具。

四、日誌相關的展望

對於日誌的分析和利用,是運維工做須要常常接觸的,有時候能夠考慮用日誌作一些功能,好比監控錯誤日誌產生,根據日誌預測等等,那麼可能會對工做起到必定的幫助效果,減小平常重複的運維工做。


本文首發於公衆號「小米運維」,點擊查看原文

相關文章
相關標籤/搜索