劉磊 孫路強 周利霞 許賀



摘要??? 本文基于Syslog的網絡日志管理平臺對海量日志進行收集,并通過模式匹配的方法對日志進行了分析,形成了日志分析告警,有效對設備和服務運行狀態進行監控,在實際應用中很好的解決了暴力破解發現,異常操作感知等問題。
【關鍵詞】Syslog 模式匹配 日志分析 告警 監控
Syslog是一種工業標準的協議,用來記錄設備的運行日志,在Linux系統、路由器、交換機等網絡設備中日志記錄了系統中發生的大小事件。運維人員通過審計日志記錄可以隨時掌握系統和應用程序的狀態。目前存在RFC3164和RFC5424兩個規范,文章主要應用RFC3164這個規范,其中描述了BSDSyslog協議,這個協議不是強制性的,很多設備并不完全遵守這個規范。實際運維中發現不同設備日志格式是不同的,協議中定義的嚴重性并不能完全符合運維需要,這就需要根據系統特征定義符合實際應用的規則對日志進行處理。
1 RFC3164 Syslog協議
RFC3164規范中Syslog日志信息發送使用UDP協議的514端口,信息長度不能大于1024字節,格式如圖1所示由PRI、HEADER、MSG三部分組成,PRI由帶尖括號的一個數字構成,這個數字包含了日志的程序模塊(Facility)、嚴重性(Severity)信息,由Facility乘以8加上Severity得來。Facility如表1所示,Severity如表2所示。HEADER部分包括兩個字段,Time和Name,Time緊跟在PRI后面中間沒有空格,格式是“mm dd hh:mm:ss”,不包括年份?!叭铡钡臄底秩绻?~9,前面會補一個空格,“小時”、“分”、“秒”在前面補“0”。HEADER部分后面跟一個空格,之后是MSG部分。MSG部分有兩個部分TAG和Content。其中TAG部分是可選的,TAG后面用一個冒號隔開Content部分,這部分的內容是應用程序自定義的。一條典型的日志信息如下所示:
<78>Dec 4 17:30:01 nagios /usr/sbin/ cron[5545]: (cactiuser) CMD (/usr/bin/php5 /srv/ www/htdocs/cacti/poller.php > /dev/null 2>&1)
2日志收集系統實現
2.1 服務器收集端配置
為了更好的對系統日志進行分析,根據RFC3164規范編寫了日志收集系統,在收集系統中定義了設備編號、嚴重級別、日志來源、接收字節大小,綁定IPv4網絡協議套接字、UPD接口類型,通過514端口接收數據包,對接收的數據包數據進行分離,分離出設備名稱、設備地址、發生時間、日志來源、日志等級、日志內容等信息,插入到Mysql數據庫,實現了日志信息的集中收集,為了提高檢索效率,對每一臺設備建立了單獨的數據表。
2.2 客戶端系統配置
(1)在suse linux中一般使用syslog-ng,在系統的/etc/syslog-ng下,配置syslog-ng.conf,定義日志來源source、日志目標destination、使用端口port,通過發送命令log{source(my_log);destination(center_log_server);};發送到日志收集端。
(2)在centoslinux中,一般使用rsyslog,通過/etc/rsyslog.conf進行配置,通過命令*.*@remote-host:514進行配置,通過UDP514端口發送到日志收集端。
(3)在h3c交換機中,通過info-center loghost IP port 514命令發送到日志收集端。
日志收集實現:日志服務器實現了路由器、防火墻、DNS、交換機、FTP服務、WEB服務、NTP服務、Oracle服務、Mysql服務等日志信息的收集,如圖2所示,Mysql數據庫中匯集的日志信息如圖3所示。
通過日志收集發現,系統定義的日志事件嚴重等級和需要的告警并不是完全匹配的,發現在已知系統中日志格式是相似的,對應的異常是可知的,當未引入新的進程或未發生新的異常時日志種類是有限的。根據日志有限的特性可以應用統計規則對運行日志進行精確分類,標識出所有已知的日志,構建日志白名單規則,利用白名單進行日志告警。部分告警規則如表3所示。
2.3 日志統計告警實現
通過告警規則進行字符串匹配和分類,在日志數量相當龐大時,實現逐條告警也是不可取的。對最近10分鐘內接收的日志進行分析,對特定日志類型或某類日志達到一定數量進行告警并對運維人員發送信息。如圖4所示。
3 日志管理中需要解決的問題
(1)日志信息采集系統運行半年來個別系統日志信息達到25G,對數據庫性能造成很大影響,分析發現很多信息與系統運行無關,如何剔除這些無關信息是以后需要解決的重點。
(2)隨著時間的推移,日志信息量不斷增加,對海量日志數據進行查詢時,Mysql數據庫的性能瓶頸問題顯現,可以考慮使用非關系型數據庫或者混合型數據庫,解決海量數據下傳統數據庫性能上的瓶頸問題。
(3)本文的告警規則是在統計的基礎通過人工篩選的方法實現的,這種方法只適用于小型數據中心,在大型數據中心或者種類繁多的設備和服務下,人工篩選的方法就不適用了,就要引入數據挖掘、機器學習的方法對數據進
行分析。
(4)需要根據實際情況建立詳細告警規則,特征字符匹配僅能實現簡單告警,詳細的告警規則需要依靠實際生產情況進行制定,如某個IP段對一些服務區進行訪問就可以認定為異常、在一定時間段內登錄密碼錯誤幾次就可以認定為異常等。
4 結束語
本文實現了基于Syslog的網絡日志管理和分析,對日常網絡設備日志進行了收集和分析,通過模式匹配的方法實現了事件檢測和告警,但是在檢測特征字符的選取上更多的是靠人工統計,在準確程度和效率上都明顯存在不足,引入人工智能的方法對已有的日志數據進行分析,提取特征字符,分析運行信息是以后研究的方向。
參考文獻
[1]黃藝海,胡君.日志審計系統設計與實現[J],計算機工程,2014,32(22):67-93.
[2]IETF RFC 3164,The BSD syslog Protocol[S], C. Lonvick, August 2001.
[3]劉緒忠,王健.未匹配告警SYSLOG智能標準化研究[J],山東通信技術,2012,37(01):40-43.
[4]張驍,應時,張韜.應用軟件運行日志的收集與服務處理框架[J],計算機工程與應,2011,54(10):81-89.
[5]李清,沈彤,關毅.面向大規模日志數據的聚類算法研究[J].智能計算機與應用,2002(05):42-45.
[6]王衛華,應時,賈向陽等.一種基于日志聚類的多類型故障預測方法[J].計算機工程,2013,44(07):67-73.