國内關于Syslog-ng的内容比較少,就是找到了也都是些許的隻言片語,或者都僅僅是一些簡簡單單的配置facility或則和level以及destination等。
這兩天碰到一個問題,就是在日志轉發時,需要更改收到的日志的facility和level,結果中文文檔幾乎木有,英文的文檔倒是碰到一些,興奮之餘,一打開傻眼了。。。好幾個都是問how to change the facility and level的,然後在balabit中看到回複如下:
"Simply because we're not there yet and because I didn't feel it that
important when we implemented the rewrite functionality."。。。
原來還木有實作這個功能啊,直接修改看來是行不通了,然後去下載下傳“syslog-ng-v2.0-guide-admin-en.pdf”學習Syslog-ng的這本書可真是指明燈啊。終于找到解決方案:利用Syslog-ng中的template可以完美解決此問題 :D
執行個體如下, 比如當我收到facility為local 6,level為debug的日志時,我需要将其facility改為local0, 同時 level 改為info然後存儲到本機,實作如下:
同時發往的目的地伺服器(此處問本機127.0.0.1) 也要配置接收log,配置如下:
流程如下:
1. 本機收到屬性為local6.debug的日志,
2.發往[b]d_template1[/b] 由于其應用規則為:[b]{udp('127.0.0.1' port(514) template("<166>$DATE $HOST $MSG\n"));[/b] 故将其屬性轉換為local4.info,同時應用其他規則,
3.将應用新規則的log轉發給127.0.0.1,
4.本機的其他過濾器[b]dest[/b]進行接收。
此過程完成也就将log的facility和level修改并存儲了。
此處轉換的核心是template中的規則,[b]template("<166>$DATE $HOST $MSG\n");[/b] , 下面進行一個大緻的說明:
166 代表的意思是local4.info, 這個是PRI辨別,首先請看下表,這是syslog-ng中預定義的。
左邊是值,右邊是對應的facility,下表的level也是如此。
PRI 就等于facility * 8 + level, 166 = local4*8 + info,即166代表local4.info
至于$DATE就比較簡單了,代表日期, $MSG代表日志内容, $HOST代表主機。
時間有限,暫時先寫到這裡吧~~