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