2017-03-09 91 views
0

我與您聯繫關於我與syslog-NG有關的問題。 我們的一些設備(主要是惠普交換機和SAN)正在發送不遵守系統日誌RFC 5424的系統日誌消息。無法過濾格式錯誤的消息在syslog-ng

給你舉幾個例子:

如果我嗅出了服務器的網絡界面,我們可以看到像這些「錯誤」的消息(如你所看到的,PRI後,我們可以看到程序,然後時區和字段用逗號分開總之,混合字段,缺少的字段等不是標準系統日誌消息):

<190>raslogd: 2017/03/08-16:03:20, [SEC-1203], 53642, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4 

因此,我目前無法過濾這些消息。 我試圖定義一個常規的過濾器,並嘗試打印諸如MSGHDR,MSG,PRI等字段,但看不到任何東西。

過濾此消息的唯一方法是隻定義外部接口和一個文件作爲輸出,不包含任何模板。

例如,如果我不喜歡這樣的過濾器:

destination d_INCOMING_ALL { file("/app/syslog-ng/logs/incoming_all.log"); }; 

log { 
    source(s_EXTERNAL); 
    destination(d_INCOMING_ALL); 
}; 

我可以看到的消息在日誌文件中,但格式化的,不知何故(我想syslog-ng的重新格式化它們):

[[email protected] logs]# grep -i cswc incoming_all.log 
Mar 9 09:44:20 cswc-mo8x-hpsan01 raslogd: 2017/03/09-08:34:50, [SEC-1203], 53647, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4 
[[email protected] logs]# 

問題是我不能過濾這些消息(我們接收來自1000多個設備的日誌) 那裏,我需要過濾來自這些設備的消息! ,我能做到這一點的唯一方法是在主機名(cswc- )或程序名(raslogd

所以我試圖通過添加模板到該文件,例如顯示的字段:

destination d_test { 
    file ("/app/syslog-ng/logs/test_olivier.log" 
    template("pri=${priority} date=${ISODATE} host=${HOST} program=${PROGRAM} message=${MSG}\n") 
    ); 
}; 

但沒有任何作品,沒有顯示。 我試過所有的領域,味精,信息,MSGHDR等..不能管理顯示任何東西。 唯一的工作是解析沒有過濾器或模板。

自然,如果我TRED所有種類的過濾器,這樣的下面,它不工作(如字段是混合型):

filter f_is_SAN  { 
    host("cswc.*" flags(ignore-case)); 
}; 

同樣爲:

filter f_is_SAN  { 
    match(".*cswc.*" flags(ignore-case)); 
}; 

如何任何提示我爲來自這些設備的這些消息(在主機名或程序名上)創建過濾器?

感謝 問候,

+1

嗨,嘗試發送有問題的消息到您的syslog-ng服務器上的一個單獨的端口,並在源中使用no-parse標誌: source {network(ip(XXXX)port(X)transport(「tcp」)) flags(no-parse));}; 這將導致syslog-ng爲消息添加一個頭,並將消息中的所有內容(包括原始頭文件)包含在$ MESSAGE宏中,並將HOST字段設置爲發件人的IP地址。 要避免使用單獨的端口,請使用連接:https://www.balabit.com/documents/syslog-ng-ose-latest-guides/en/syslog-ng-ose-guide-admin/html/junctions。 html –

+0

嗨羅伯特,感謝您的提示,我會嘗試並給你一個反饋 – olivierg

+0

mmh我不能使用另一個端口,惠普交換機不支持它:( – olivierg

回答

0

MMH感謝羅伯特,我試圖用這樣的單結,和它的作品! (它工作,即使沒有交界處) 不幸的是,我的其他過濾器不工作了(我只是在這裏顯示1,但我有超過20,原始文件要大得多)

我們不能聽兩個來源使用相同的端口,但有不同的標誌?:(

source s_EXTERNAL { 
    udp(); 
}; 

source s_EXTERNAL_NOPARSE { 
    udp(flags(no-parse) persist-name('noparse')); 
}; 

destination d_INCOMING_ALL { file("/app/syslog-ng/logs/incoming_all.log"); }; 
destination d_OUTGOING_ISERIES { file("/app/syslog-ng/logs/outgoing_iseries.log"); }; 
destination d_olivier2 { file ("/app/syslog-ng/logs/test_olivier2.log" template("host=${HOST} message=${MESSAGE}\n")); }; 

filter f_is_iSeries { 
    match ("PowerTech.*Interact" value("MESSAGE") flags(ignore-case)); 
}; 

filter f_is_Network  { 
    host("cswc.*" flags(ignore-case)) 
    or program("raslogd" flags(ignore-case)); 
}; 

# -------- not working anymore 
log { 
source(s_EXTERNAL); 
filter(f_is_iSeries); 
destination(d_OUTGOING_ISERIES); 
flags(final); 
}; 

# ------- working now 
log { 
source(s_EXTERNAL_NOPARSE); 
junction { 
    channel { 
      filter(f_is_Network); 
    }; 
}; 
destination(d_olivier2); 
}; 

我現在可以看到在測試d_olivier2 DEST此日誌:

[[email protected] etc]# cat ../logs/test_olivier2.log 
host=cswc-mo8x-hpsan01 message=<190>raslogd: 2017/03/23-16:29:44, [SEC-1203], 53656, WWN 10:00:50:eb:1a:6c:21:38 | FID 128, INFO, cswc-mo8x-SAN01, Login information: Login successful via TELNET/SSH/RSH. IP Addr: 1.2.3.4 

,但沒有在/app/syslog-ng/logs/outgoing_iseries.log :(

+1

嗨,你不能有兩個來源在同一端口(除非一個來源使用udp,而另一個tcp)。爲了解決這個問題,開發了連接點,關鍵是要在它們中有多個通道,就像文檔中的示例一樣。現在您只有一個處理有問題日誌的通道。使用篩選器添加另一個通道,以選擇其他日誌,幷包含syslog解析器以正確解析這些消息。 –

+0

好吧,我明白了,謝謝。 但事情是,如果我添加第二個通道處理好日誌,我將不得不重寫所有過濾器,我想?因爲這些消息將由syslog重新格式化? – olivierg

+0

不,系統日誌分析器是使過濾器首先工作的原因。默認情況下,syslog-ng使用syslog解析器解析每個傳入的日誌消息。問題是交換機發送格式錯誤的消息,這就是爲什麼您需要所有這些配置技巧(禁用解析,分離好的和不好的日誌,並解析好的日誌)。 –