歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 關於Linux中 syslog-ng 如何在轉發時修改其facility以及level

關於Linux中 syslog-ng 如何在轉發時修改其facility以及level

日期:2017/2/28 15:57:00   编辑:Linux教程

國內關於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可以完美解決此問題

實例如下, 比如當我收到facility為local 6,level為debug的日志時,我需要將其facility改為local0, 同時 level 改為info然後存儲到本機,實現如下:

  1. filter f_local6 {facility(local6);};
  2. filter f_level {level(debug);};
  3. destination d_template1 {udp('127.0.0.1' port(514) template("<166>$DATE $HOST $MSGHDR$MSG\n"));
  4. };
  5. log { source(src);filter(f_tag_acs);filter(f_local6);destination( d_template1);};

同時發往的目的地服務器(此處問本機127.0.0.1) 也要配置接收log,配置如下:

  1. source src {
  2. file("/proc/kmsg");
  3. unix-stream("/dev/log" max-connections(256));
  4. internal(); };
  5. source s_remote { udp(ip(0.0.0.0) port(514)); };
  6. filter f_facility{ facility (local4 ); };
  7. filter f_level{ level (info ); };
  8. filter f_tag { match('acs') ; };
  9. destination dest{ file('/var/log/filter1.log');};
  10. log {
  11. source(src);
  12. source(s_remote);
  13. filter(f_facility;
  14. filter(f_level);
  15. filter(f_tag);
  16. destination(dest);
  17. };

流程如下:
1. 本機收到屬性為local6.debug的日志,
2.發往d_template1 由於其應用規則為:{udp('127.0.0.1' port(514) template("<166>$DATE $HOST $MSG\n")); 故將其屬性轉換為local4.info,同時應用其他規則,
3.將應用新規則的log轉發給127.0.0.1,
4.本機的其他過濾器dest進行接收。
此過程完成也就將log的facility和level修改並存儲了。

Copyright © Linux教程網 All Rights Reserved