為了統(tǒng)一管理日志,也考慮到設備一旦出現(xiàn)問題會導致日志丟失,筆者將日志全部遠程存儲在專門的日志服務器集群中。
日志服務器集群本身結構很簡單,如圖1所示。我們將所使用的各類設備進行了分組,規(guī)則如下:
1.參照網(wǎng)絡類型、設備型號。如用戶接入網(wǎng)大量使用的某廠家OLT、用戶接入網(wǎng)少量使用的其它廠家OLT、內部專網(wǎng)的RADIUS服務等。
2.不同類型設備的日志數(shù)量差別非常大。如接入網(wǎng)設備,其日志包含上下線信息、配置推送信息等。
經(jīng)過數(shù)月的統(tǒng)計,僅某型號設備1臺平均1天產(chǎn)生12萬條日志,而這類設備全市納入日志監(jiān)控的數(shù)量超過300臺,4個月的時間產(chǎn)生了43億條數(shù)據(jù),占用服務器843GB數(shù)據(jù)庫硬盤空間。
3.不同的設備權重不同??赡芤恍┰O備1天僅僅產(chǎn)生幾條日志,數(shù)量很少,但每條都非常重要必須實時觀測到。日志數(shù)量和實時性的不同,對服務器的壓力也相差甚大。
圖1 日志服務器拓撲圖
綜上,網(wǎng)絡、設備、時效和日志數(shù)量等各方面,我們給設備設計了不同的類型分組,如圖1所示的A類型。
同一類型的設備使用一主一備兩臺日志服務器。同時定期刪除debug、info等不重要的日志記錄后,將日志遷移到歸檔服務器。用于日志分析的服務器,會同時讀取歸檔和實時日志。
最后,為了日志的安全,我們將主備服務器放置在了不同的機柜上,同時備份服務器放在了不同地理位置(各縣和區(qū))的機房。各個專網(wǎng)之間也是物理隔離的。
得益于大部分設備采用的syslog日志服務,我們選擇了syslog-ng開源軟件進行日志的中繼,MySQL進行日志的保存。平臺部署于centos6.8環(huán)境下,系統(tǒng)的安裝不在贅述,系統(tǒng)配置為最小安裝,僅開啟SSHD服務。系統(tǒng)安裝完畢后,需要注意如下幾點事項:
第一,將系統(tǒng)中的全部軟件升級到最新版本,防止已有軟件漏洞。
第二,設置系統(tǒng)的PS1參數(shù),即命令行中每行前面的提示內容。為用戶名、用戶路徑、主機名設置不同的顏色,并添加實時時間。這看起來不起眼,但對于生產(chǎn)環(huán)境防止在錯誤的服務器上執(zhí)行錯誤的命令很有幫助。
第三,關閉SELinux并開啟NTP時間校對服務。作為日志服務器,沒有準確的時間,那么日志就沒有意義了。
第四,更改ulimit參數(shù)并配置系統(tǒng)防火墻,以便于提升系統(tǒng)IO性能并增強基本防護。
數(shù)據(jù)庫我們選擇了可免費使用的MySQL/MariaDB社區(qū)版本。數(shù)據(jù)庫的安裝不在贅述。安裝完畢后,首先設置用戶名密碼,然后設置訪問權限,以便于控制哪些終端可以訪問數(shù)據(jù)庫中的日志信息。筆者設置的策略如下:
grant select on *.*to readonly@'10.66.66.%'identified by '${MYSQL_ROOT_PASSWORD}'
grant select on *.*to readonly@'10.66.6.%'identified by '${MYSQL_ROOT_PASSWORD}'
通過IP網(wǎng)段和密碼進行授權。
當數(shù)據(jù)庫部署完畢后,需要在上面的centos系統(tǒng)中配置syslog-ng軟件,以便于讓系統(tǒng)能夠接受其他設備的日志,并轉發(fā)到數(shù)據(jù)庫中。
為了讓大量的日志能夠在寫入數(shù)據(jù)庫時就拆分開,有兩種策略,一是按照日期拆分,二是按照設備IP或HOSTNAME拆分。
經(jīng)過測試,HOSTNAME的獲取會浪費大量的系統(tǒng)資源,IP雖然包含在日志中,但是數(shù)據(jù)庫的表不能含有小數(shù)點。因此,我們選擇日期進行拆分,每天生成一個數(shù)據(jù)表。為了做到數(shù)據(jù)表的自動生成,則需要在syslog中將create_dirs設置為yes。
服務器接收到的數(shù)據(jù),筆者定義在source s_leniynet規(guī)則中,允許四種類型的數(shù)據(jù)進入服務器:UDP514、UDP1514、TCP514、TCP1514。 其 中514是syslog協(xié)議的默認數(shù)據(jù)包端口,另外還有一些設備未使用默認端口,在端口上加1000選擇了1514端口,防止端口掃描。
服務器轉發(fā)策略定義 在destination d_leniymysql規(guī)則中。數(shù)據(jù)表格式為table("logs_${R_YEAR}${R_MONTH}${R_DAY}"),通過前面提到的create_dirs自動創(chuàng)建。各個表中的數(shù)據(jù)項包含sourceip、host、r_isodate、s_isodate、facility、priority、level、program以及msg。
數(shù)據(jù)庫中同時記錄設備時間和服務器時間,以便針對不同情況進行針對性的分析。真實時間作為參照依據(jù),設備時間用來定性分析。數(shù)據(jù)庫由于數(shù)據(jù)量太大,我們將r_isodate和sourceip加入了索引。
最后,開啟設備防火墻,只允許 3306、514、1514 端口的數(shù)據(jù)通過,SSH服務也關閉防止遠程攻擊。
經(jīng)過4個月的數(shù)據(jù)統(tǒng)計,我們收集到了大量的設備日志,并做到了針對某設備的連續(xù)分析和針對某時間段的跨設備分析。
集中式日志服務的成功應用,對IT系統(tǒng)日志數(shù)據(jù)的留存、查看、審計、分析和管理,提供了一個良好的平臺。日志數(shù)量雖然龐大,但用的好了,就是保障網(wǎng)絡的一大利器。