rsyslog學(xué)習(xí)小記

Linux日志機(jī)制的核心是rsyslog守護(hù)進(jìn)程,該服務(wù)負(fù)責(zé)監(jiān)聽Linux下的日志信息棋恼,并把日志信息追加到對應(yīng)的日志文件中,一般在/var/log目錄下。它還可以把日志信息通過網(wǎng)絡(luò)協(xié)議發(fā)送到另一臺Linux服務(wù)器上邦邦,或者將日志存儲在MySQL或Oracle等數(shù)據(jù)庫中。目前rsyslog的大版本為v8醉蚁。

配置文件


一般情況下燃辖,rsyslog 配置的文件文件位于/etc/rsyslog.conf 以及 /etc/rsyslog.d/文件夾下,在/etc/rsyslog.conf中通過$IncludeConfig指令將/etc/rsyslog.d/的所有配置合并到一起网棍。配置主要可以分為以下幾類:

全局配置

加載一些通用的模塊

module(load="imuxsock") # provides support for local system logging
module(load="imklog")   # provides kernel logging support

設(shè)置默認(rèn)的日志格式:

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

一些權(quán)限相關(guān)黔龟,在后面的一些配置中需要特別注意:

$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

規(guī)則

每條規(guī)則都由選擇器和相應(yīng)的動作組成,選擇器說明來源和日志級別滥玷,而動作則說明如何處理對應(yīng)的日志,下面是一些例子:

cron.*  /var/log/cron
mail.warn   /var/log/mail.warn

把所有來自cron守護(hù)進(jìn)程的消息保存到/var/log/cron文件中氏身。 當(dāng)指定日志級別時,所有等于或大于該日志等級的信息都要被處理惑畴。比如在下面的例子中蛋欣,mail子系統(tǒng)所有warning及以上信息的日志都保存在/var/log/mail.warn文件中。

mail.=info  -/var/log/mail.info

使用=可以指定日志等級如贷,加上 - 表明日志異步寫入陷虎。

mail.!info  /var/log/mail.info

使用!可以排除這類信息到踏。

自定義channel

除了將日志寫入本地文件外,rsyslog還支持自定義的規(guī)則尚猿,下面的指令就定義了一個名稱為NAME的channel:

$outchannel NAME, FILE_NAME, MAX_SIZE, ACTION

下面是一個例子注意omfile指明輸出到文件窝稿。

$outchannel log_rotation, /var/log/test_log.log, 104857600, /home/millions/log_rotation_script

*.* :omfile:$log_rotation

實(shí)際用例


如果rsyslog只能做將日志寫入本地文件那就有點(diǎn)沒意思了,下面我們來看一下rsyslog的一些高級一點(diǎn)的功能谊路。

收集nginx的access log 寫入文件中

從nginx的access log中可以分析出很多東西讹躯,但是在分布式環(huán)境下nginx通常部署在多個不同的服務(wù)器下,使用rsyslog可以將這些日志整合起來缠劝。

我們在/etc/rsyslog.d/文件夾下新建一個配置文件access_log.conf:

module(load="imfile")

ruleset(name="remote") {
    action(type="omfwd"
        Protocol="tcp"
        Target="127.0.0.1"
        Port="8899")

    stop
}

input(type="imfile"
    File="/var/log/nginx/access.log"
    Facility="user"
    Severity="info"
    Tag="web_access"
    PersistStateInterval="1"
    Ruleset="remote")

由于要讀取文件潮梯,我們引入module(load="imfile")。然后在input中指明輸入的文件位置惨恭,以及日志的類型和級別秉馏。PersistStateInterval表示持久化的間隔,可以根據(jù)需要調(diào)整脱羡,Ruleset表示使用的規(guī)則是什么萝究。在規(guī)則中,我們指明了輸出類型為轉(zhuǎn)發(fā)锉罐,目標(biāo)是127.0.0.1的8899端口帆竹,并且使用tcp協(xié)議。

接下來脓规,我們再增加一個接受轉(zhuǎn)發(fā)日志的配置:

module(load="imtcp")

template(name="msg" type="string" string="%msg:2:$%\n")

ruleset(name="analysis") {
    action(type="omfile"
        File="/home/millions/log/access.log"
        Template="msg")

    stop
}

input(type="imtcp"
    Port="8899"
    Ruleset="analysis")

這里我們的input是tcp栽连,并且監(jiān)聽在8899端口上,輸出到指定的文件侨舆,并使用自定義的模板msg秒紧。這里要注意權(quán)限問題。

然后去訪問nginx挨下,就可以看到指定目錄下的文件了熔恢。

收集nginx日志并重定向到程序

稍微修改以下我們接收日志的配置,就可以把日志重定向給某個程序的標(biāo)準(zhǔn)輸入了:

module(load="imtcp")
module(load="omprog")

template(name="msg" type="string" string="%msg:2:$%\n")

ruleset(name="analysis") {
    action(type="omprog"
        Binary="/usr/bin/php /home/millions/log/test.php"
        Template="msg")

    stop
}

input(type="imtcp"
    Port="8899"
    Ruleset="analysis")

為了方便起見臭笆,我們這里采用php腳本叙淌,也可以換成其他想使用的語言,test.php的內(nèi)容如下愁铺。

$fp = fopen("/home/millions/log/f.log", "w+");
while (($data = fgets(STDIN)) !== false) {
        fwrite($fp, "got data:" . $data);
}

這樣就可以看到f.log中記錄的數(shù)據(jù)了:

got data:192.168.0.102 - - [08/Jan/2017:11:58:00 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
got data:192.168.0.102 - - [08/Jan/2017:13:20:34 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

如果kill掉test.php凿菩,下次同步日志時rsyslog還會啟動一個新的test.php,這樣可以在運(yùn)行一定次數(shù)后退出進(jìn)程防止內(nèi)存泄露帜讲。

總結(jié)


上面只是對rsyslog的使用做了一個簡單的介紹衅谷,具體使用還有很大的發(fā)揮空間。比如在腳本中不是簡單的把日志寫入本地文件似将,而是發(fā)往kafka获黔,記錄到mysql蚀苛,mongodb中去。進(jìn)一步的學(xué)習(xí)還是需要查看rsyslog的官方文檔玷氏。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末堵未,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盏触,更是在濱河造成了極大的恐慌渗蟹,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赞辩,死亡現(xiàn)場離奇詭異雌芽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)辨嗽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門世落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糟需,你說我怎么就攤上這事屉佳。” “怎么了洲押?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵武花,是天一觀的道長。 經(jīng)常有香客問我杈帐,道長髓堪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任娘荡,我火速辦了婚禮,結(jié)果婚禮上驶沼,老公的妹妹穿的比我還像新娘炮沐。我一直安慰自己,他們只是感情好回怜,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布大年。 她就那樣靜靜地躺著,像睡著了一般玉雾。 火紅的嫁衣襯著肌膚如雪翔试。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天复旬,我揣著相機(jī)與錄音垦缅,去河邊找鬼。 笑死驹碍,一個胖子當(dāng)著我的面吹牛壁涎,可吹牛的內(nèi)容都是我干的凡恍。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼怔球,長吁一口氣:“原來是場噩夢啊……” “哼嚼酝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竟坛,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤闽巩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后担汤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涎跨,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年漫试,在試婚紗的時候發(fā)現(xiàn)自己被綠了六敬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡驾荣,死狀恐怖外构,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情播掷,我是刑警寧澤审编,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站歧匈,受9級特大地震影響垒酬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜件炉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一勘究、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧斟冕,春花似錦口糕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秀撇,卻和暖如春超棺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呵燕。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工棠绘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓弄唧,卻偏偏與公主長得像适肠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子候引,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理侯养,服務(wù)發(fā)現(xiàn),斷路器澄干,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx逛揩?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,704評論 24 1,002
  • Ubuntu的發(fā)音 Ubuntu逞泄,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音拜效。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,372評論 9 467
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,009評論 0 9
  • 【同讀一本書.王朋彥】2016-9-14-001《溝通的藝術(shù)》P13 正文:有時候我們會希望可以回到過去喷众,消除某...
    王朋彥閱讀 237評論 2 1