Linux日誌系統分析:rsyslog、syslog和klog

来源:https://www.cnblogs.com/markcoven/archive/2019/07/16/11197146.html
-Advertisement-
Play Games

參考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/article/details/83684052 1.syslog是 Unix 系統的一個常見組件,用於執行 ...


參考博客:

 https://blog.csdn.net/lidonghat/article/details/55004280

 https://blog.csdn.net/u012247418/article/details/83684052

1.syslog是 Unix 系統的一個常見組件,用於執行系統日誌記錄活動。
2.syslogd 是它的守護進程,syslogd 從一組日誌源(如 /dev/log 和 /dev/klog )中讀取數據,並按照 /etc/syslog.conf 中的說明處理這些日誌消息。通過調用syslog(),可將應用程式日誌消息記錄到 syslog 中。syslog 消息採用一種包含可選優先順序和設備的標準格式。優先順序指示消息的緊急程度,設備指示發佈消息的子系統。/usr/include/syslog.h中定義了它的優先順序和設備資源。
3.klog是一個從Unix內核接受消息的設備,klogd 守護進程獲得並記錄 Linux 內核信息。通常,syslogd 會記錄 klogd 傳來的所有內核信息。
syslog日誌運行邏輯

kernel---> 物理終端(/dev/console) --> /var/log/message  命令dmesg  就是控制台輸出/var/log/message日誌信息

/sbin/init

  /var/log/message: 系統標準錯誤日誌信息;非內核產生引導信息,各子系統產生的信息;

  /var/log/maillog: 郵件系統產生的日誌信息;

  /var/log/secure:  系統登錄日誌信息

----------------------

syslogd是Linux下的一個記錄日誌文件服務。從結構來說,可以理解為這個服務下麵有一系列的子服務,例如mail、auth、cron、kern等等,這些子服務對外提供日誌記錄的功能,而當其它的程式或服務需要記錄日誌的時候,就可以直接調用這些子服務將日誌記錄到設定的地方。而配置這整個守護進程以及其子服務的地方就是/etc/syslog.conf這個文件。

而目前不少的Linux發行版已經用rsyslogd將syslogd代替了。rsyslogd是syslogd的升級版,其配置語法與syslogd的配置文件一致。ubuntu-gnome-16.04使用的是rsyslogd。

註:

在用戶空間有專門用於記錄系統日誌的程式,統稱為“syslog守護進程”。早期及現在的大部分嵌入式系統使用的是klogd+syslogd組合,現在大多數發行版都使用rsyslogd或者syslogd-ng。

如果需要修改系統日誌配置,修改以下兩個文件。

1)/etc/rsyslog.conf

2)/etc/rsyslog.d/50-default.conf 日誌文件的記錄規則和路徑

操作:

sudo service rsyslog restart

sudo service rsyslog stop

sudo service rsyslog start

 

2. 查看linux日誌的三種途徑:

1)dmesg

printk()列印的日誌會寫到kernel ring buffer(環緩衝區)中,dmesg是從kernel ring buffer中讀取內核日誌信息;效果等同於cat /var/log/message

2)/var/log/

系統所有日誌(包括用戶日誌和系統內核日誌)均記錄在/var/log/目錄下。

rsyslogd守護進程根據/etc/rsyslog.conf和/etc/rsyslog.d/XXXXX.conf,將不同的服務產生的log記錄到不同的文件中。

3)/proc/kmsg

通過讀取/proc/kmsg也可以得到ring buffer(環緩衝區)的日誌,但是對/proc/kmsg進行讀操作後,ring buffer中被讀取的數據將被清空。

註:如果啟用了rsyslogd服務,則不能讀取/proc/kmsg 文件(文件為空),同一時間只能用一種方法來獲取日誌文件。

3. 日誌記錄的介面:

1)內核空間:printk()

可以使用dmesg命令來查看,使用printk()列印的日誌同時也會記錄在/var/log/kern.log和/var/log/syslog。當然也可以關閉rsyslogd服務,通過讀取/proc/kmsg來查看。

2)用戶空間:syslog()函數和logger(logger可在命令行中直接執行)

void syslog(int priority, char*format,……);

列印的日誌記錄在 /var/log/syslog文件中。

註:據自己理解,syslog()列印的日誌不會寫到kernel ring buffer,只有printk才會寫入kernel ring buffer。

 

4. 自定義日誌記錄路徑

4.1 修改/etc/rsyslog.d/50-default.conf

在文件最後添加如下一行:

local0.* /var/log/my_logfile0

註:local0—local7均可

-----------------------------

解讀文件:/etc/syslog.conf或者rsyslog.conf

配置文件定義格式為:facility.priority   action

facility ,可以理解為日誌的來源或設備目前常用的

  auth    # 認證相關的

  authpriv   #許可權,授權相關的

  cron    #任務計劃相關的

  daemon  #守護進程相關的

  kern    #內核相關的

  lpr     #列印相關的

  mail    #郵件相關的

  mark    #標記相關的

  news    #新聞相關的

  security    #安全相關的,與auth類似

  user    #用戶相關的

  uucp      #unix to unix cp 相關的

  local0-local7  #用戶自定義

  *        # *表示所有類型

priority (log level) 日誌級別從低到高

  debug       #程式或者系統調試信息

  info      #一般信息

  notice     #不影響正常功能,需要註意的信息

  warning/warn   #可能影響系統功能,需要提醒用戶的重要事件

  err/error    #錯誤信息

  crit       # 比較嚴重的

  alert      #必須馬上處理的,警告

  emerg/oanic     # 會導致系統不可用的

  *          # 所有日誌級別

  none      # 跟 * 相反表示什麼都沒有

 action (動作) 日誌記錄位置

  系統上的絕對路徑    #普通文件 如:/var/log/xxxx

  |             # 管道,發送給其他命令處理,數據進一步加工

  終端          # 終端   如  /dev/console

  @HOST         # 遠程主機 如:@192.168.101.122 也可以後面更上該機器的對應路徑 ,  @192.168.101.122:/var/log/xxxxx

  用戶          # 系統用戶,發送給此用戶處理,按照此用戶的日誌來記錄

  *            #登錄到系統上的所有用戶,一般emerg級別日誌就是這樣處理的

三種方式:unix域套接字、udp埠514以及特殊的設備/dev/klog  

大多數出現調用syslog向/dev/log這個套接字發送日記消息。

Device:發送syslog的設備

Relay:轉發syslog的設備(Relay可能只是轉發部分接收到的syslog消息,它同時表現為Relay和Collector)

Collector:接收syslog的設備

syslog消息的udp報文不能超過1024位元組。

完整的syslog日誌中包含日記的程式模塊(Facility)、嚴重性(Severity | Level)、時間、主機名或ip、進程名、進程id和正文

完整的syslog消息由3部分組成,分別是PRI、HEADER和MSG(<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.),PRI:<30>。HEADER:Oct9...hlfedora。

PRI部分是由程式模塊(Facility)<<3 | 嚴重性(Severity)組成:換句話說 Facility可以有32種,Severity可以有8種。

 Numerical        Facility  #日誌類型
         Code
          0             kernel messages                  #內核信息
          1             user-level messages               #用戶級別信息
          2             mail system                   #郵件系統
          3             system daemons                #系統信息
          4             security/authorization messages (note 1)       #安全認證信息(標註1)
          5             messages generated internally by syslogd     #由syslogd內部生成的消息
          6             line printer subsystem              #行式印表機子系統
          7             network news subsystem              #網路信息子系統
          8             UUCP subsystem                #UUCP子系統
          9             clock daemon (note 2)              #時鐘守護進程(標註2)
         10             security/authorization messages (note 1)       #安全認證信息(標註2)
         11             FTP daemon                  #FTP守護進程
         12             NTP subsystem                  #NTP時鐘同步子系統
         13             log audit (note 1)                #日誌認證(標註1)
         14             log alert (note 1)                 #日誌告警(標註1)
         15             clock daemon (note 2)              #時鐘守護進程(標註2)
         16             local use 0  (local0)               #用戶自定義日誌來源標簽
         17             local use 1  (local1)
         18             local use 2  (local2)
         19             local use 3  (local3)
         20             local use 4  (local4)
         21             local use 5  (local5)
         22             local use 6  (local6)
         23             local use 7  (local7)

Numerical         Severity  #日誌級別
        Code
         0         Emergency: system is unusable
         1         Alert: action must be taken immediately
         2         Critical: critical conditions
         3         Error: error conditions
         4         Warning: warning conditions
         5         Notice: normal but significant condition
         6         Informational: informational messages
         7         Debug: debug-level messages

HEADER部分包括兩個欄位:時間和主機名

MSG部分分為兩個部分:TAG和Content;TAG包含程式名稱和進程PID,TAG後面用一個冒號隔開Content部分

RFC3195:用tcp代替udp,進行可靠的syslog消息

//將info或更高級別的消息送到/var/log/messages,除了mail以外。

//其中*是通配符,代表任何設備;none表示不對任何級別的信息進行記錄。

*.info;mail.none;authpriv.none /var/log/messages

//將authpirv設備的任何級別的信息記錄到/var/log/secure文件中,這主要是一些和認、許可權使用相關的信息。

authpriv.* /var/log/secure

//將mail設備中的任何級別的信息記錄到/var/log/maillog文件中,這主要是和電子郵件相關的信息。

mail.* /var/log/maillog

//將cron設備中的任何級別的信息記錄到/var/log/cron文件中,這主要是和系統中定期執行的任務相關的信息。

cron.* /var/log/cron

//將任何設備的emerg級別的信息發送給所有正在系統上的用戶。

*.emerg *

//將uucp和news設備的crit級別的信息記錄到/var/log/spooler文件中。

uucp,news.crit /var/log/spooler

//將和系統啟動相關的信息記錄到/var/log/boot.log文件中。

local7.* /var/log/boot.log

---------------------------------------

基本語法格式

類型.級別[;類型.級別]  動作

news.=crit  /var/log/news.crit

‘=’特殊符號,如果存在說明只有本Severity的消息才進行處理,如果不存在則處理本Severity及其以下級別的消息

‘;'表示&&、'!'表示取反、’*'表示所有

 1 # Log all kernel messages to the console.
 2 # Logging much else clutters up the screen.
 3 #kern.*                            /dev/console
 4 
 5 # Log anything (except mail) of level info or higher.
 6 # Don't log private authentication messages!
 7 *.info;mail.none;authpriv.none;cron.none        /var/log/messages
 8 
 9 # The authpriv file has restricted access.
10 authpriv.*                        /var/log/secure
11 
12 # Log all the mail messages in one place.
13 mail.*                            -/var/log/maillog    ##  '-'分號代表是非同步寫入,非實時寫入
14 
15 
16 # Log cron stuff
17 cron.*                            /var/log/cron
18 
19 # Everybody gets emergency messages
20 *.emerg                            *
21 
22 # Save news errors of level crit and higher in a special file.
23 uucp,news.crit                        /var/log/spooler
24 
25 # Save boot messages also to boot.log
26 local7.*                        /var/log/boot.log

 

 

動作:表示信息發送的目的地

  可以是日記文件(絕對路徑),如果文件名前面加上減號表示不將日誌信息同步刷新到磁碟上(使用寫入緩存),這樣可以提高日誌寫入性能,但是增加了系統崩潰後丟失日誌的風險

  可以是遠程主機(@host,host可以是ip或功能變數名稱,預設在/etc/hosts文件下loghost這個別名已經指定給本機)

  可以是指定用戶(user1,user2),如果指定用戶已登入,那麼他們將收到消息

客戶端有兩種方式開發:

   完全基於協議從底層開發,也就是直接寫unix域套接字或者向UDP514發送定製消息

   基於庫函數供上層應用使用

==================================================================================================

註意:

  一般隨著時間的推移系統日誌會越來越大,占用磁碟空間,增加記憶體和磁碟消耗,所以引出了進程logroate來進行日誌按照自動一大小分割和保留規定時間日誌,滾動覆蓋歷史日誌

logrotate:日誌文件會隨著日誌的增加而不斷增大,從而帶來效率的問題和空間使用問題,在常年運行的伺服器上面,通常會有logrotate程式定期進行日誌文件的輪替和刪除工作。

配置文件/etc/logroate.conf 來定義不同的功能日誌配置信息,裡面可以定義日誌的存儲時間周期,日誌分割文件大小,個數等;統一都放在/etc/logroate.d/目錄下

# see "man logrotate" for details
# rotate log files weekly
weekly                        #周期

# keep 4 weeks worth of backlogs
rotate 4                       #文件個數 

# create new (empty) log files after rotating old ones
create                        #新文件創造動作

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d              #存放目錄

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {                     #這裡定義每個不同功能日誌時,除了上面的預設屬性,
                              #如果自身未定義優先去查找自身定義的,如果沒有才會用預設定義的,優先使用自身定義的 monthly minsize 1M                      #最小大小 create
0664 root utmp                #以默寫用戶創建,給予文件許可權  rotate 1 } /var/log/btmp { missingok monthly minsize 1M create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 主要記錄下如何在EF 中連接Oracle s資料庫,很傻瓜式,非常簡單,但是不知道的童鞋,也會搞得很難受,我自己就是 1.創一個控制台程式,並且添加 Oracle.ManagedDataAccess.EntityFramework 2.添加完之後,會自動在App.config 中添加一堆配置信息,主 ...
  • 一、項目中一直用到了文字轉語音的功能,需求也比較簡單,就是將一段報警信息通過語音的方式播放出來,之前一直採用CS客戶端,利用微軟自帶的Speech語音播放庫就可以完成, 1.1 封裝winSpedk類代碼如下: namespace Speak { using System; using System ...
  • 當我傻啊,用戶在電商網站購買成功,還在微服務中,那肯定就是有一套微服務架構的電商系統。 設計一套電商系統還不簡單 簡單想象一下,既然是一個電商系統,有用戶去購買,就肯定得有一個用戶模塊,購買什麼東西總不是西北風吧,購買肯定是商品吧,省掉購物車,就得有商品模塊吧,商品總得有庫存吧,庫存就暫時跟商品放一 ...
  • string path = "test.txt"; FileStream mystream = new FileStream(path, FileMode.OpenOrCreate); StreamWriter myWrite = new StreamWriter(mystream); myWrit ...
  • 本項目採用ASP.Net Core微服務技術,搭建博客和Saas平臺。 全文將圍繞(1)設計模式 (2)敏捷開發 目的: 結構足夠合理,代碼足夠優美,擴展性、可讀性、易維護性做到最優。 以下目錄僅為整體思路,後期逐漸完善補充。 1.配置linux環境實現持續集成 2.快速搭建 ASP.net cor ...
  • LinuxShell——正則表達式 摘要:本文主要學習了Shell中的正則表達式。 簡介 含義 正則表達式,也稱作正規表示法,是用於描述字元排列和匹配模式的一種語法規則,它主要用於字元串的模式分割、匹配、査找及替換操作。 正則表達式是用來匹配文件中的字元串的方法,它會先把整個文本分成一行一行的字元串 ...
  • 本文主要介紹了 cgroup 的一些基本概念,包括其在 CentOS 系統中的預設設置和控制工具,以 CPU 為例闡述 cgroup 如何對資源進行控制。 ...
  • 我所使用的Contiki系統是contiki-sensinode。理解該文需要有cc2530里uart的相關知識,具體寄存器的用法不做介紹。 先放上所有代碼,然後再仔細分析。 首先是包含的頭文件,就不多說了。 然後是一個巨集定義,#if UART0_ENABLE,若該巨集未被定義,則uart0_init ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...