syslog相關內容介紹


syslog相關內容介紹

簡介:   

  syslog server 從網絡設備接收系統日志消息,並實時顯示它們。


系統日志消息可以使用以下事件進行處理:

  1、在滾動窗口中顯示消息
  2、將消息記錄到文本文件
  3、將消息轉發到另一個系統日志服務器
  4、記錄到ODBC數據庫
  5、記錄到NT應用程序事件日志
  6、通過SMTP將消息通過電子郵件發送給某人
  7、運行外部程序,如尋呼通知系統
  8、發送SNMP陷阱消息


系統syslog內容的相關介紹

  安裝源碼包,既不影響系統里面運行的syslog,也由於二者容易沖突,所以選擇源碼安裝
  版本:rsyslog-7.4.10
  1、安裝依賴包,參考官方文檔
    yum install git valgrind autoconf automake flex bison python-docutils python-sphinx json-c-devel libuuid-devel libgcrypt-devel zlib-devel openssl-devel libcurl-devel gnutls-devel mysql-devel postgresql-devel libdbi-dbd-mysql libdbi-devel net-snmp-devel
    yum install autogen libtool
    export PKG_CONFIG_PATH=/lib64/pkgconfig/ #設置環境變量
    yum install libestr-devel -y
    yum install liblogging-devel-1.0.4-2.gf.el6.x86_64.rpm liblogging-1.0.4-2.gf.el6.x86_64.rpm
  2、./autogen.sh
    運行這個來生成所有的初始makefiles等,運行這個腳本之后就會有configure這個工具了
    接下來可以使用./congure --enable...添加各種插件功能,插件目錄在/rsyslog-7.4.10/plugins/下,使用-h查看支持的選項
    make && make install

  3、配置相應的功能之后就啟動服務了
    /usr/local/rsyslog/sbin/rsyslogd --help #查看相應的服務啟動參數

 


配置和相關文檔的說明

man8手冊的說明:http://man7.org/linux/man-pages/man8/rsyslogd.8.html

OPTIONS

  -D   配置解析器在調試模式下運行,通常在很難發現配置錯誤的情況下使用
  -d   在debug模式下運行
  -f    指定配置文件運行,默認在/etc/rsyslog.conf
  -i    指定pid文件運行,如果是多實例的話,需要指定不同的pid文件
  -n   默認是由init進程進行守護運行
  -N level 以檢查配置文件的方式運行,默認是0級別
    rsyslogd -f ../sample.conf -N 1 -i /var/run/rsyslogd1.pid
  -C  改變root目錄的方式運行
  -v   打印版本信息

SIGNALS

  Rsyslogd接受一些信號的響應
  示例:kill -SIGNAL $(cat /var/run/rsyslogd.pid)
  將SIGNAL替換成相應的信號值
  HUP 讓rsyslogd執行關閉所有打開的文件。
  TERM,INT,QUIT 停止rsyslog的運行
  USR1 當rsyslog運行在debug的時候有用,可以用來切換狀態
  CHLD 略

security threats

  rsyslogd守護進程可能被用作拒絕服務攻擊的管道,且在本機開啟UDP端口容易導致機器風險。
  1、使用防火牆來限制哪些機器可以訪問514端口
  2、將保存的信息存放在非根文件系統的位置,確保不會損害當前的機器。
  3、以非root用戶運行

FILES

  /etc/rsyslog.conf 配置rsyslogd運行的配置文件
  /dev/log Unix域套接字讀取本地syslog消息
  /var/run/rsyslogd.pid rsyslogd運行的pid文件
  prefix/lib/rsyslog rsyslogd rsyslogd 目錄,默認編譯的路徑


man5關於rsyslog配置文件的詳細說明

http://man7.org/linux/man-pages/man5/rsyslog.conf.5.html#top_of_page


MODULES

  im開頭的輸入模塊,om開頭的輸出模塊
  ommysql    輸出到mysql的模塊
  imfile     文本文件輸入模塊
  imudp    udp輸入模塊
  imtcp     tcp輸入模塊
  imrelp   RELP協議輸入插件
  ...

BASIC STRUCTURE

  Global directives

  全局指令用來設置rsyslog的運行全局屬性,譬如message的隊列尺寸等。

  Templates

  Templates 可以將message處理成指定的格式,必須在rules之前被定義好。

  Output channels

  為用戶可能需要的任何類型的輸出提供了..

  Rules(selector + action)

  每一個rules都包含了這兩個字段,這兩個字段由一個或多個空格或制表符分隔。
  selector字段指定屬於指定動作的facilities和priorities的模式。

 

SELECTORS

  facility和priority由點號分隔,不區分大小寫。
  facility由以下幾個關鍵字組成:
  auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security等
  你可以通過這些關鍵字來重定向這些消息。

  priority由以下幾個關鍵字組成:
  debug, info, notice, warning, warn, err, crit, alert, emerg, panic等
  可以用來定義消息的優先級

  1、* 表示所有facility或priority
  2、可以在相同的priority指定多個facility,使用,來分隔。
  3、多個selectors可以指定單個action,通過;號分隔,選擇器字段中的每個選擇器都可以覆蓋前面的選擇器。
  4、擴展語法,=指定單一的priority,!表示忽略所有priorities。

ACTIONS

作為一個規則表示如何處理消息,一般會是寫入文本文件或數據庫等操作。

  Regular file
  *.* /var/log/traditionalfile.log;RSYSLOG_TraditionalFileFormat
  #以指定的格式寫入指定的文件

  Named pipes
  支持將輸出記錄到命名管道(fifos),通過將管道符號'|'預先添加到文件的名稱,可以將fifo或命名管道用作日志消息的目的地。
  fifo必須在rsyslogd啟動之前使用mkfifo命令創建。
  一邊寫一邊讀,類似python中的queue,會阻塞。

  Terminal and console
  可以將輸出重定向到終端,/dev/console

  Remote machine
  輸出到遠程主機上,@表示udp,@@表示tcp,如果采用RELP協議,需要在遠程主機前加上:omrelp:。

  *.* @192.168.0.1
  #將消息發送到192.168.0.1的514端口(默認端口)
  action(type="omfwd" Target="192.168.0.1" Device="eth0" Port=514 Protocol="udp")
  #通過omfwd可以指定更多屬性
  *.* :omrelp:192.168.0.1:2514
  #使用RELP協議,需要先加載模塊后才可以使用

  List of users
  通常會將一些嚴重的信息通知給系統用戶
  :omusrmsg:root,user1,user2

  Everyone logged on
  一些緊急的消息需要發送給所有用戶,這時候可以使用*來表示
  :omusrmsg:*

  Database table
  利用相應的輸出模塊將message信息輸出到數據庫中

  Discard
  將不需要的消息進行丟棄
  *.* stop #stop表示丟棄動作,也可以使用~來表示

  Output channel
  將輸出通道定義綁定到此操作,必須以$開頭,支持模板定義。

  Shell execute
  略

FILTER CONDITIONS

提供3種條件過濾的類型
1、基於selectors的severity和facility
2、基於property
3、基於expression(表達式)

  Selectors是傳統的過濾方式syslog的消息。
  保持了傳統的語法, 如果只需要根據facility和priority進行篩選,則應該使用Selectors進行篩選。

  Property-Based Filters
  允許過濾任何屬性,例如HOSTNAME, syslogtag and msg等
  必須以:開頭,后面接屬性名,一個逗號,一個比較操作符,另一個逗號,然后是比較的值,這個值必須被引用。
  示例:
  :property, [!]compare-operation, "value"
  以下是compare-operation操作的支持情況:
    contains:  檢查值中包含的字符串是否包含在屬性中
    isequal:    比較提供的"值"字符串和屬性內容。 這兩個值必須完全相等。
    startswith:檢查值是否剛好在屬性值的起始處找到。
    regex:      將該屬性與提供的正則表達式進行比較。

  Expression-Based Filters
  參考官方文檔

TEMPLATES

  每一個rsyslog的輸出都是用templates,適用於文件,用戶信息等。
  如果你不指定一個templates的話,默認會使用一個預置的模板,被硬編碼在代碼之中。
  template由一個template指令,一個名稱,實際模板文本和可選的選項
    $template MyTemplateName,"\7Text %property% some more text\n",<options>
    $template TraditionalFormat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n"
    \斜杠是轉義,\7是一個ASCII字符,除了百分號以外的東西,模板中的所有文本都是字面使用的。
    %%里面是屬性值,可以訪問消息的內容,通過property replacer去訪問。
  templates可以用來生成selector行的動態文件名。
    $template DynFile,"/var/log/system-%HOSTNAME%.log"

  Template options
    請務必不要將模板選項與屬性選項相混淆-后者由property replacer處理,僅應用於單一屬性而不是整個模板。
    sql:格式化適合於MySQL格式的SQL語句的字符串,這將在每個字段內用單引號"'"和反斜線字符"'"和"\"替換反斜線字符。
    stdsql:提供標准的sql語句格式
    如果你將信息寫入數據庫中,一定要注意sql注入的問題。

  Template examples
  模板不能實際上被分割成多行。

  一個傳統的模板輸出:
    $template TraditionalFormat,"%timegenerated% %HOSTNAME%%syslogtag%%msg:::drop-last-lf%\n"
  復雜一點的模板
    $template precise,"%syslogpriority%,%syslogfacility%,%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%\n"
  RFC 3164 format的模板
    $template RFC3164fmt,"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%"
  傳統的模板格式用於用戶信息
    $template usermsg," XXXX%syslogtag%%msg%\n\r"


 

OUTPUT CHANNELS

  $outchannel name,file-name,max-size,action-on-max-size
    $outchannel name表示outchannel名稱
    file-name表示寫入文件名
    max-size表示寫入最大的尺寸
    action-on-max-size在達到最大尺寸的時候執行的動作,這個命令總是只有一個參數。
    *.* :omfile:$mychannel


PROPERTY REPLACER

property replacer是rsyslog輸出系統的核心組成部分,一個message有很多properties,通過property replacer訪問。

  Accessing Properties
  系統日志消息屬性在模板中使用,通過百分比標志之間的訪問,屬性可以由屬性替換器修改。完整的語法如下:
  %propname:fromChar:toChar:options% #propname為訪問屬性名

  Available Properties
    msg message的MSG部分
    rawmsg 從socket接受的消息,一般用於debug
    HOSTNAME message中的hostname
    FROMHOST 接收到message的主機來源
    syslogtag message的TAG部分
    programname tag的static部分,當TAG is "named[12345]", programname is "named".
    PRI message的PRI部分-未解碼(單一值)
    PRI-text message的PRI部分,以文本的形式
    IUT 略
    syslogfacility message的facility,以數字的形式
    syslogfacility-text message的facility,以文本的形式
    syslogseverity message的severity,以數字的形式
    syslogseverity-text message的severity,以文本的形式
    timegenerated message被接收到時候的時間戳
    timereported message里面的timestamp
    TIMESTAMP timereported的別名
    PROTOCOL-VERSION 略
    STRUCTURED-DATA 略
    APP-NAME 略
    PROCID 略
    MSGID MSGID的內容
    $NOW 當前的日期格式,YYYY-MM-DD
    $YEAR The current year (4-digit)
    $MONTH The current month (2-digit)
    $DAY The current day of the month (2-digit)
    $HOUR The current hour in military (24 hour) time (2-digit)
    $MINUTE The current minute (2-digit)
    這些不是源於消息,而是內部生成的。

  Character Positions
    FromChar and toChar被用於建立子串,指定的字符串被拷貝出來。
    "%msg:1:2%" #提取前兩個字符
    "%msg:::lowercase%" #所有字符串轉換成小寫
    %msg:10:$% #提取第十到結尾的字符

    正則的支持
    "%msg:R:.*Sev:. \(.*\) \[.*--end%" #使用正則需要R開頭

    基於字段
    "%msg:F:3%"
    "%msg:F,59:3%" #F指定分隔符

  Property Options
    uppercase 將屬性轉換為小寫
    lowercase 屬性的文本轉換為大寫
    drop-last-lf 刪除message結尾的LF
    date-mysql mysql的時間格式
    date-rfc3164 RFC 3164時間格式
    date-rfc3339 RFC 3339時間格式
    escape-cc 替換控制字符
    space-cc 替換控制字符為空格
    drop-cc 結果字符串將不包含控制字符,轉義序列或空間的任何其他替換字符。


操作系統版本syslog的使用情況

rpm -ql rsyslog-5.8.10-8.el6.x86_64

  /etc/logrotate.d/syslog    #用於logrotate的配置
  /etc/pki/rsyslog
  /etc/rc.d/init.d/rsyslog     #rsyslog的服務管理腳本
  /etc/rsyslog.conf       #主配置文件
  /etc/rsyslog.d         #配置文件包含目錄
  /etc/sysconfig/rsyslog    #rsyslogd選項
  /lib64/rsyslog           #庫文件目錄
  /sbin/rsyslogd          #運行的二進制文件
  /usr/share/doc/rsyslog-5.8.10 #幫助文檔

  /etc/rsyslog.conf配置內容簡介:
    $ModLoad imuxsock #本地系統日志的輸入支持(e.g. via logger command)
    $ModLoad imklog #提供內核日志輸入支持
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #默認模板
    $IncludeConfig /etc/rsyslog.d/*.conf #配置文件包含目錄
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
    authpriv.* /var/log/secure
    ...
    將各種日志的各種級別進行輸出重定向到文件

  /etc/logrotate.d/syslog
  利用syslog將系統各種信息輸出到指定的各個文件之后,再利用logrotate去對日志進行滾動壓縮等操作
  示例:
    /var/log/cron
    /var/log/maillog
    /var/log/messages
    /var/log/secure
    /var/log/spooler
    {
      sharedscripts
      postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        #在進行日志滾動的時候需要發送HUP信號給syslogd進程,關閉打開的所有文件
      endscript
    }

logrotate
可以基於日志的大小或時間進行滾動,支持壓縮,拷貝等眾多功能。
rpm -ql logrotate-3.7.8-17.el6.x86_64

  /etc/cron.daily/logrotate    #由cron定時任務管理器來啟動logrotate
  /etc/logrotate.conf       #logrotate主配置文件
  /etc/logrotate.d       #logrotate配置文件目錄
  /usr/sbin/logrotate       #logrotate運行的二進制文件
  /usr/share/doc/logrotate-3.7.8 #關於logrotate的文檔信息

  /etc/logrotate.conf配置文件簡介:
    compress #全局指定,日志進行壓縮處理。
    

  "/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5               #輪轉5個日志,之前的會被移除
    mail recipient@example.org #發送郵件信息
    size 100k          #按照大小進行輪轉
    sharedscripts         # 如果指定了sharedscripts,那么腳本只運行一次,因為在多個日志進行輪轉的時候只需要執行一次重載服務即可。
    postrotate
    /usr/bin/killall -HUP httpd
    endscript          #在postrotate和endcript之間的內容,在日志文件輪轉后執行(使用/bin/sh)。
    }

cron定時任務
logrotate由cron進行定時觸發執行,而logrotate作為syslog的工具對日志進行滾動,syslog進行日志分類收集存儲。
rpm -ql crontabs-1.10-33.el6.noarch

  /etc/cron.daily
  /etc/cron.hourly
  /etc/cron.monthly
  /etc/cron.weekly
  /etc/crontab
  /usr/bin/run-parts
  /usr/share/man/man4/crontabs.4.gz

rpm -ql cronie-1.4.4-15.el6_7.1.x86_64
  /etc/cron.d
  /etc/cron.d/0hourly
  /etc/cron.deny
  /etc/pam.d/crond
  /etc/rc.d/init.d/crond
  /etc/sysconfig/crond
  /usr/bin/crontab
  /usr/sbin/crond

  Cron在crontab文件中搜索/var/spool/cron,這些文件以/etc/passwd中的帳戶命名; 找到的crontabs被加載到內存中。
  Cron還會搜索/etc/anacrontab和/etc/cron.d目錄中具有不同格式的任何文件(請參閱crontab(5))。
  使用modtime選項時,Cron會每分鍾檢查一次crontables的modtimes以檢查是否有任何更改,並重新加載已更改的crontables。

Cron檢查的目錄如下:
  /etc/crontab #系統的crontab,現在文件默認是空的。通過讀取/etc/anacrontab配置文件的anacron運行。
  /etc/cron.d/ #包含為不同用戶存儲的系統cron job的目錄。
  /var/spool/cron #包含由crontab命令創建的用戶crontables的目錄。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM