Linux 日志系统
【概述】
日志數據是有價值的信息寶庫,也可以是毫無價值的數據泥潭。
日志可以記錄系統產生的所有行為,并按照某種規范表達出來。
我們可以使用日志系統所記錄的信息為系統進行排錯,優化系統的性能,或者根據這些信息調整系統的行為。
收集想要的數據,分析出有價值的信息,可以提高系統、產品的安全性,還可以幫助開發完善代碼,優化產品。
日志是在事故發生后查明“發生了什么”的一個很好的取證信息來源。
【系統日志】
在 Linux 中大部分的發行版都內置使用 syslog 系統日志,常見的日志一般存放在 /var/log 中,可以根據服務對象粗略的將日志分為:系統日志與應用日志兩類。
根據下圖中所顯示的日志,系統日志主要是存放系統內置程序或系統內核之類的日志信息,如:alternatives.log 、btmp 等;應用日志主要是存放第三方應用所產生的日志,如:apache2 等。
常見的系統日志有:
| alternatives.log | 系統更新替代信息記錄 |
| apport.log | 應用程序崩潰信息記錄 |
| apt/history.log | 使用 apt-get 安裝卸載軟件的信息記錄 |
| apt/term.log | 使用 apt-get 時的具體操作 |
| auth.log | 登錄認證的信息記錄 |
| boot.log | 系統啟動時的程序服務的日志信息 |
| btmp | 錯誤的信息記錄 |
| Consolekit/history | 控制臺的信息記錄 |
| dist-upgrade | dist-upgrade 這種更新方式的信息記錄 |
| dmesg | 啟動時,顯示屏幕上內核緩沖信息、與硬件有關的信息 |
| dpkg.log | dpkg 命令管理包的日志 |
| faillog | 用戶登錄失敗詳細信息記錄 |
| fontconfig.log | 與字體配置有關的信息記錄 |
| kern.log | 內核產生的信息記錄,在自己修改內核時有很大幫助 |
| lastlog | 用戶的最近信息記錄 |
| wtmp | 登錄信息的記錄。可以找出誰正在進入系統,誰使用命令顯示這個文件或信息等 |
| syslog | 系統信息記錄 |
查看日志的常見工具有:less、more、cat、last、lastlog 等命令。
【日志的配置】
1.概述
實現日志的配置主要有兩種方式:一種是由軟件開發商自己來自定義日志格式然后指定輸出日志位置,另一種是由 Linux 提供的日志服務程序。
在早期的大部分 Linux 發行版都是內置 syslog 的,syslog 是一個系統日志記錄程序,讓其作為系統的默認日志收集工具。
隨著時代的進步,syslog 已跟不上時代的需求,所以他被 rsyslog 所代替了,較新的 Ubuntu、Fedora 等都是默認使用 rsyslog 作為系統的日志收集工具。
rsyslog 的全稱是 rocket-fast system for log,它提供了高性能,高安全功能和模塊化設計,能夠接受各種各樣的來源,將其輸入,輸出的結果到不同的目的地,最高可以提供超過每秒一百萬條消息給目標文件。
2.rsyslog 的結構框架與數據流走向
如下圖,可以知道?rsyslog 主要是由 Input、Output、Parser 三個模塊構成,數據首先通過 Input module 來收集消息,然后將得到的消息傳給 Parser module,通過分析模塊的層層處理,將真正需要的消息傳給 Output module,然后便輸出至日志文件中。
但 rsyslog 的實際架構要比上圖復雜的多,通過下圖可以知道,rsyslog 還有一個核心的功能模塊便是 Queue,也正是因為它,rsyslog 才能做到每秒傳遞超過一百萬的消息,達到一個極高并發值。
3.rsyslog 的配置
既然 rsyslog 是一個服務,那么它便可以配置,為我們提供一些我們自定義的服務。
1)配置文件
rsyslog 的配置文件有兩個:一個是 /etc/rsyslog.conf,一個是 /etc/rsyslog.d/50-default.conf。
第一個主要是配置的環境,也就是 rsyslog 加載什么模塊,文件的所屬者等;第二個主要是配置的過濾條件(Filter Conditions)。
我們可以通過 vim 來配置其內容:
注:rsyslog?模塊接口的使用需要通過 $ModLoad 指令來加載,可以看到上圖配置生效的頭兩行,默認加載了 imklog、imuxsock 這兩個模塊。
2)語法格式:
rsyslog 支持三種配置語法格式
- sysklogd
- legacy rsyslog
- RainerScript
sysklogd 是老的簡單格式,一些新的語法特性不支持;legacy rsyslog 是以 $ 符號開頭的語法,其指令是全局指令,即?rsyslogd 守護進程的配置指令,要求每行只能有一個指令;RainnerScript 是最新的語法。
除此之外,新、老語法格式還有一重要的區別:老的語法格式(sysklogd & legacy rsyslog)是以行為單位,新的語法格式(RainnerScript)可以分割多行。
3)注釋語法:
注釋有兩種語法
- 井號:#
- C 語言風格:/* .. */
4)執行順序:
指令在 rsyslog.conf 文件中是從上到下,順序執行的。
5)模版:
模板是 rsyslog 一個重要的屬性,它可以控制日志的格式,支持類似 template() 語句的基于 string 或 plugin 的模板,通過它我們可以自定義日志格式。
模板定義的形式有四種,適用于不同的輸出模塊,一般簡單的格式,可以使用 string 的形式,復雜的格式,建議使用 list 的形式,使用 list 的形式,可以使用一些額外的屬性字段(property statement)。
如果不指定輸出模板,rsyslog 會默認使用 RSYSLOG_DEFAULT。
注:如果想要更深入的學習配置 rsyrlog 服務,可以查看其官方文檔:點擊這里
6)過濾條件
關于 /etc/rsyslog.d/50-default.conf 這個配置文件,其主要是配置的過濾條件(Filter Conditions),也就是我們在流程圖中所看見的 Parser & Filter Engine,它的名字叫 Selectors ,是過濾 syslog 的傳統方法,主要由兩部分組成:facility 與 priority,其配置格式為:
facility.priority log_location其中一個 priority 可以指定多個 facility,多個 facility 之間使用逗號分隔。
rsyslog 通過 Facility 的概念來定義日志消息的來源,以便對日志進行分類,Facility 的種類有:
| kern | 內核消息 |
| user | 用戶信息 |
| 郵件系統消息 | |
| daemon | 系統服務消息 |
| auth | 認證系統 |
| authpriv | 權限系統 |
| syslog | 日志系統自身消息 |
| cron | 計劃安排 |
| news | 新聞信息 |
| local 0~7 | 由自定義程序使用 |
priority 也稱之為 serverity level,除了日志的來源以外,對統一源產生日志消息還需要進行優先級的劃分,而優先級的類別有一下幾種:
| emergency | 系統已無法使用 |
| alert | 必須立即處理的問題 |
| critical | 很嚴重 |
| error | 錯誤 |
| warning | 警告信息 |
| notice | 系統正常,但是比較重要 |
| informational | 正常 |
| debug | debug 的調試信息 |
| panic | 很嚴重但是已淘汰不常用 |
| none | 沒有優先級,不記錄任何日志消息 |
通過 vim 我們可以查看 /etc/rsyslog.d/50-default.conf 這個配置文件:
以前以下兩行為例:
auth,authpriv.* ? ? ? /var/log/auth.log :代表 auth 與 authpriv 的所有優先級的信息全都輸出于 /var/log/auth.log 日志中。
kern.* ? ? ?-/var/log/kern.log :- 代表異步寫入,即日志寫入時不需要等待系統緩存的同步,也就是日志還在內存中緩存也可以繼續寫入無需等待完全寫入硬盤后再寫入。
【日志轉儲】
在本地的機器中,每天都有成百上千條日志被寫入文件中,會有數十兆甚至更多的日志信息被寫入文件中,如果是這樣的話,每天看著我們的日志文件不斷的膨脹,會占用大量的空間,為解決這種問題,有個叫 logrotate 的程序誕生了。
logrotate 程序是一個日志文件管理工具,用來把舊的日志文件刪除,并創建新的日志文件,可以根據日志文件的大小、天數等來切割日志、管理日志,這個過程叫做:轉儲。
logrotate 程序不但可以壓縮日志文件,減少存儲空間,還可以將日志發送到指定 E-mail,方便管理員及時查看日志。
logrotate 是基于 CRON 來運行的,其腳本是 /etc/cron.daily/logrotate,可以在 /etc/logrotate 中找到其配置文件
總結
以上是生活随笔為你收集整理的Linux 日志系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Two Strings Swaps(CF
- 下一篇: 基础算法 —— 模拟思维