日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

rsyslog syslog详解

發(fā)布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rsyslog syslog详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:

rsyslog 是一個 syslogd 的多線程增強版。syslog是Linux系統(tǒng)默認的日志守護進程。默認的syslog配置文件是/etc/syslog.conf文件。程序,守護進程和內(nèi)核提供了訪問系統(tǒng)的日志信息。因此,任何希望生成日志信息的程序都可以向 syslog 接口呼叫生成該信息。
????? 幾乎所有的網(wǎng)絡設備都可以通過syslog協(xié)議,將日志信息以用戶數(shù)據(jù)報協(xié)議(UDP)方式傳送到遠端服務器,遠端接收日志服務器必須通過syslogd監(jiān)聽UDP 端口514,并根據(jù) syslog.conf配置文件中的配置處理本機,接收訪問系統(tǒng)的日志信息,把指定的事件寫入特定文件中,供后臺數(shù)據(jù)庫管理和響應之用。意味著可以讓任何事件都登錄到一臺或多臺服務器上,以備后臺數(shù)據(jù)庫用off-line(離線) 方法分析遠端設備的事件。
???? ?通常,syslog 接受來自系統(tǒng)的各種功能的信息,每個信息都包括重要級。/etc/syslog.conf 文件通知 syslogd 如何根據(jù)設備和信息重要級別來報告信息。

?

需求背景:

?

以及在系統(tǒng)日志落地前支持hook處理。

?

安裝:

yum install rsyslog -y

  

?

一、什么是syslog協(xié)議

1、介紹(略)

2、syslog標準協(xié)議如下圖

  這里的facility為模塊,serverity為等級,由這兩個信息共同計算出一個PRI頭部。HEADER部分包含了時間和主機名。在HEADER和MSG之間有一個空格,MSG是需要記錄的日志部分(日志消息體)。

  這里也就是說,理論上使用這種格式構(gòu)造的字符串發(fā)送,接收方就能解析出來。實際上根據(jù)實驗,我使用了UDP發(fā)送,接收方syslog日志服務器能正確解析。

  這里需要注意的是,如果使用了程序的庫,比如:python的syslog庫(同樣c++也有相似的庫),那么就不再需要關注PRI和HEADER部分,只要將相關的參數(shù)(facility,severity,time,ip)傳入函數(shù),調(diào)用發(fā)送就可以,不必自己構(gòu)造字符串。對服務端來說,接收到的是整個消息,但通常來講,比如使用linux默認的rsyslog作為接收服務端的話,是不能看到除MSG之外的部分。所看到的消息跟接收端配置有關,這個在下面有具體的講。

3、以下是各級別及對應的數(shù)字代碼

Facility:有0-23種設備可選,在python的syslog庫中有一部分缺失

0 kernel messages?
1 user-level messages?
2 mail system?
3 system daemons?
4 security/authorization messages?
5 messages generated internally by syslogd?
6 line printer subsystem?
7 network news subsystem?
8 UUCP subsystem?
9 clock daemon?
10 security/authorization messages?
11 FTP daemon?
12 NTP subsystem?
13 log audit?
14 log alert?
15 clock daemon?
16-23     local0 - local7

Severity:日志等級

0 Emergency
1 Alert
2 Critical
3 Error
4 Warning
5 Notice
6 Informational
7 Debug

這里結(jié)合等級再詳細講一下syslog協(xié)議:

Priority(優(yōu)先級) = facility * 8 + severity值。比如說,一個核心信息(facility=0)和一個Emergency的severity將會產(chǎn)生優(yōu)先級為0。同樣, 一個“l(fā)ocal use 4”信息(facility=20)和一個Notice的severity(severity=5)將會產(chǎn)生165的優(yōu)先級。

標題(HEADER)部分由稱為TIMESTAMP和HOSTNAME的兩個域組成,PRI結(jié)尾的“>”會馬上跟著一個 TIMESTAMP,任何一個TIMESTAMP或者HOSTNAME域后面都必須跟著一個空格字符。HOSTNAME包含主機的名稱,若無主機名或無法 識別則顯示IP地址。如果一個主機有多個IP地址,它通常會使用它傳送信息的那個IP地址。TIMESTAMP是本機時間,采用的格式是“Mmm dd hh:mm:ss”表示月日時分秒。HOSTNAME域僅僅能夠包括主機名稱,Ipv4地址或者是信息產(chǎn)生者的Ipv6地址。

MSG部分是Syslog數(shù)據(jù)包剩下的部分。這通常包含了產(chǎn)生信息進程的額外信息,以及信息的文本部分。MSG部分有兩個域,分別為TAG域和 CONTENT域,TAG域的值是產(chǎn)生信息的程序或者進程的名稱,CONTENT包含了這個信息的詳細內(nèi)容。傳統(tǒng)上來說,這個域的格式較為自由,并且給出 一些時間的具體信息。TAG是一個不許超過32個字符的字母數(shù)字字符串,任何一個非字母數(shù)字字符都將會終止TAG域,并且被假設是CONTENT域的開 始。在大多數(shù)情況下,表示TAG結(jié)束的CONTENT域的第一個字符用左大括號( [ ],分號( : )或者是空格來表示。

4、Syslog庫

  以python的庫為例:

  openlog(ident[, logopt[, facility]])

  首先需要使用openlog指定模塊及相應的信息。ident為頭部需要顯示的字符串,這個信息不包含在MSG中,可以通過配置日志服務器模板決定是否顯示。logopt是一些參數(shù),可選擇有(LOG_PID,?LOG_CONS,?LOG_NDELAY,?LOG_NOWAIT?and?LOG_PERROR),對應的分別是(包括每個消息PID,直接寫入系統(tǒng)控制臺,立即打開連接,不等待子進程(因為其有可能在記錄消息的時候就被創(chuàng)建了,GNU C庫不創(chuàng)建子進程,所以該選項在Linux上沒有影響),同時輸出到stderr)。facility則是模塊參數(shù),需要填入對應的值,這里syslog庫中有以下參數(shù)使用:

1

2

LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_LPR

LOG_NEWS, LOG_UUCP, LOG_CRON?and?LOG_LOCAL0 to LOG_LOCAL7

  通常來說,openlog需要在模塊最開始指定,即限定了這個模塊內(nèi)都是一個facility的日志。

  

  syslog([sevirity], msg):

  這個是具體打印日志的函數(shù),第一個參數(shù)指定消息的級別,第二個參數(shù)為日志內(nèi)容。

  sevirity對應的參數(shù)為:

1

LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, <br>LOG_NOTICE, LOG_INFO, LOG_DEBUG.

  

  closelog():

  這個是關閉的功能,不過多解釋了。

5、說明部分

  python的syslog庫打印日志是依賴了rsyslog服務,具體的轉(zhuǎn)發(fā)規(guī)則,記錄文件等在rsyslog.conf中配置

二、了解rsyslog服務

1、rsyslog介紹(略)

2、rsyslog配置文件

  配置文件/etc/rsyslog.conf大概分為三個部分

  #MODULES

  這個部分是針對接收配置的,主要是指定接收日志的協(xié)議和端口。若要配置日志服務器,則需要將相應的配置項去掉注釋。

  #GLOBAL DIRECTIVES

  這個部分主要用來配置模板,模板的作用是指定你希望在日志文件中保存的日志格式。

  默認配置為:

1

2

# Use default timestamp format

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

  這里列舉一個模板,將所有信息保存:

1

2

3

4

5

6

7

8

9

10

11

12

# 這里第一行(為了方便顯示,參數(shù)寫成了一列)是模板,即日志服務器記錄到日志文件的格式

# 第二行是指定需要使用的模板myFormat,這個名字可以自己定義

$template myFormat,"%TIMESTAMP%?host=%HOSTNAME%,

                   relayHost=%FROMHOST%,

                   tag=%syslogtag%,

                   programName=%programname%,

????????????????????????????????procid=%PROCID%,

????????????????????????????????facility=%syslogfacility-text%,

????????????????????????????????sev=%syslogseverity-text%,

????????????????????????????????appName=%APP-NAME%,

????????????????????????????????msg=%msg%\n"

$ActionFileDefaultTemplate myFormat

  模板額外說明:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#在rsyslog7 和更高版本使用以下格式:

template(name="scalaLogFormat"?type="list") {

????????property(name="timestamp"?dateFormat="rfc3339")

????????constant(value=" host=")

????????property(name="hostname")

????????constant(value=", relayHost=")

????????property(name="fromhost")

????????constant(value=", tag=")

????????property(name="syslogtag")

????????constant(value=", programName=")

????????property(name="programname")

????????constant(value=", procid=")

????????property(name="procid")

????????constant(value=", facility=")

????????property(name="syslogfacility-text")

????????constant(value=", sev=")

????????property(name="syslogseverity-text")

????????constant(value=", appName=")

????????property(name="app-name")

????????constant(value=", msg=")

????????property(name="msg"?)

????????constant(value="\n")

????????}

  ###?begin forwarding rule

  這個模塊主要講一下轉(zhuǎn)發(fā)

  #*.* @@remote-host:514

  根據(jù)這個實例可以看出,分為4個部分[模塊.等級] [轉(zhuǎn)發(fā)協(xié)議][日志服務器地址]:[日志服務器端口],其中轉(zhuǎn)發(fā)協(xié)議的參數(shù)@@為TCP協(xié)議,對應的接收端也需要配置接受TCP協(xié)議。@為UDP協(xié)議。

  注:使用TCP協(xié)議,若地址錯誤或不能連同的情況,轉(zhuǎn)發(fā)的協(xié)議會寫入緩存,但是不用擔心會卡死服務器,當?shù)竭_一定限度后會自動轉(zhuǎn)存到硬盤,這個不是我們應該關心的部分,使用就好了。

說明:

  針對rsyslog.conf配置文件的所有操作都需要重啟服務生效(service rsyslog restart)

  在新版本的rsyslog中,對日志發(fā)送有默認限速,如果有集中大量推送日志的情況,需要在配置文件中加上參數(shù)$SystemLogRateLimitInterval 0(具體位置沒有影響,但通常寫在GLOBAL DIRECTIVES模塊)

  通常來說,日志推送到服務器的協(xié)議使用UDP

總結(jié)

以上是生活随笔為你收集整理的rsyslog syslog详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。