syslog 和 rsyslog
1. 介紹
rsyslog可以簡單的理解為syslog的超集,在老版本的Linux系統中,Red Hat Enterprise Linux 3/4/5默認是使用的syslog作為系統的日志工具,從RHEL 6 開始系統默認使用了rsyslog。
?其特性包括:
- 支持輸出日志到各種數據庫,如 MySQL,PostgreSQL,MongoDB,ElasticSearch,等等;
- 通過 RELP + TCP 實現數據的可靠傳輸(基于此結合豐富的過濾條件可以建立一種 可靠的數據傳輸通道供其他應用來使用);
- 精細的輸出格式控制以及對消息的強大 過濾能力;
- 高精度時間戳;隊列操作(內存,磁盤以及混合模式等); 支持數據的加密和壓縮傳輸等。
2. 配置
/etc/rsyslog.conf
syslog的配置文件有多種書寫方法:
- sysklogd(一些結構不兼容新特性),
- legacy rsyslog(以“$”開頭的寫法,如:$ModLoad imtcp.so),
- RainerScript(一種新的格式,是最推薦使用的一種,尤其是需要做復雜的配置時)
在本文中的配置都比較簡單,就采用了legacy rsyslog的配置書寫方法。更多詳情參考:
http://www.rsyslog.com/doc/master/configuration/basic_structure.html#statement-types
rsyslog的配置主要有以下模塊:
- modules,模塊,配置加載的模塊,如:ModLoad imudp.so配置加載UDP傳輸模塊
- global directives,全局配置,配置ryslog守護進程的全局屬性,比如主信息隊列大小(MainMessageQueueSize)
- rules,規則(選擇器+動作),每個規則行由兩部分組成,selector部分和action部分,這兩部分由一個或多個空格或tab分隔,selector部分指定源和日志等級,action部分指定對應的操作
- 模板(templates)
- 輸出(outputs)
?
2.1 常用的modules
- imudp,傳統方式的UDP傳輸,有損耗
- imtcp,基于TCP明文的傳輸,只在特定情況下丟失信息,并被廣泛使用
- imrelp,RELP傳輸,不會丟失信息,但只在rsyslogd 3.15.0及以上版本中可用
? ?更多參考:http://www.rsyslog.com/doc/master/configuration/modules/index.html
?
2.2 規則(rules)
規則的選擇器(selectors)
selector也由兩部分組成,設施和優先級,由點號.分隔。第一部分為消息源或稱為日志設施,第二部分為日志級別。多個選擇器用;分隔,如:*.info;mail.none。
日志設施有:
- auth(security), authpriv: 授權和安全相關的消息
- kern: 來自Linux內核的消息
- mail: 由mail子系統產生的消息
- cron: cron守護進程相關的信息
- daemon: 守護進程產生的信息
- news: 網絡消息子系統
- lpr: 打印相關的日志信息
- user: 用戶進程相關的信息
- local0 to local7: 保留,本地使用
日志級別有(升序):
- debug:包含詳細的開發情報的信息,通常只在調試一個程序時使用。
- info:情報信息,正常的系統消息,比如騷擾報告,帶寬數據等,不需要處理。
- notice: 不是錯誤情況,也不需要立即處理。
- warning: 警告信息,不是錯誤,比如系統磁盤使用了85%等。
- err:錯誤,不是非常緊急,在一定時間內修復即可。
- crit:重要情況,如硬盤錯誤,備用連接丟失。
- alert:應該被立即改正的問題,如系統數據庫被破壞,ISP連接丟失。
- emerg:緊急情況,需要立即通知技術人員。
日志設施的配置:
- . 代表比后面還要高的消息等級都會記錄下來
- .= 代表只有后面的這個消息等級會被記錄下來
- .! 代表除了后面的這個消息等級,其他的都會被記錄下來。
2.3 動作 (action)
action是規則描述的一部分,位于選擇器的后面,規則用于處理消息。總的來說,消息內容被寫到一種日志文件上,但也可以執行其他動作,比如寫到數據庫表中或轉發到其他主機。
寫到本地文件/var/log/lyh.log中
# # Save message to other file # local0.* /var/log/lyh.log寫到mysql數據庫中
# modules, 要將日志寫到mysql中需要加載ommysql模塊 $ModLoad ommysql # rule, send to mysql #*.* :ommysql:database-server,database-name,database-userid,database-password *.* :ommysql:127.0.0.1,Syslog,syslogwriter,topsecret2.4 模板(templates)
模板允許你指定日志信息的格式,也可用于生成動態文件名,或在規則中使用。
TEMPLATE_NAME:模板的名字;
PROPERTY:rsyslog本身支持的一些屬性參數。
$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION] $template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log" $template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"*.info ?DailyPerHostLogs *.* ?DynamicFile2.5 輸出(outputs)
輸出頻道為用戶可能想要的輸出類型提供了保護,在規則中使用前要先定義.其定義如下所示,
NAME:指定輸出頻道的名稱;FILE_NAME:指定輸出文件;MAX_SIZE指定日志文件的大小,單位是bytes;?ACTION:指定日志文件到達MAX_SIZE時的操作。
$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION在規則中使用輸出頻道按照如下的格式:
selectors :omfile:$NAME?
3. demo
#include <stdio.h> #include <stdlib.h> #include <syslog.h>int main() {openlog("msg-lyh", LOG_PID, LOG_LOCAL0);syslog(LOG_INFO, "this is a test");closelog();return 0; }在/etc/rsyslog.conf中增加。
# # Save message to other file # local0.* /var/log/lyh.log注:需要sudo service rsyslog restart 重啟服務,配置才能生效
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的syslog 和 rsyslog的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 游戏皇家消消乐Android
- 下一篇: 四年级上册java呢时候到_四年级上册数