又是一個吃著火鍋唱著歌的日子,同事A過來吐槽說,某某交換機的風扇壞了,要不是今天過去例行巡檢設備,發現設備聲音不對勁還發現不了這個問題。
作為一名資深網工其實你深深的知道這種報錯,設備的日志會有體現的,而且公司是有一臺日志服務器滴,但是由于開打速度慢,查詢速度慢,幾乎沒有分析展示功能,也沒有報警功能。大家幾乎很少去用它。
這個時候領導過來說: 我們要做一種日志分析系統,查詢速度飛快,分析界面高端大氣上檔次,低調奢華有內涵,最重要是能主動發微信報警,要是以前聽到這樣的需求一般都是 下面的表情:
但是我們今天就是要好好聊聊這個日志分析,設備的哭喊 沒有日志分析系統怎么能及時聽得到。
架構簡述
日志系統首先要面臨幾個問題:
不同廠家設備的不同日志格式的處理,如何調用微信來發報警信息。采用的解決辦法是 不同廠商的設備發送日志的時候采用不同的端口,日志先發送到logstash, logstash會先解析日志成標準格式,然后logstash會做2件事情,一個是存放日志到es里面,通過kibana做出展示。
環境搭建
Elk的搭建就省掉了 這不是今天講的重點,推薦先百度,或者私信、留言。
交換機配置
其實交換機的配置是一個痛點,幾臺設備手動配置一下也就算了,要是你的環境中有幾百臺,要是還沒有統一配置工具 直接配到你懷疑人生啊。
#cisco: logging host 10.100.18.18 transport udp port 5002 #H3C info-center enable info-center source default channel 2 trap state off // 必要,不然日志會出現 不符合級別的 alert 日志 info-center loghost 10.100.18.18 port 5003 #huawei info-center enable info-center loghost 10.100.18.18 info-center timestamp log short-date info-center timestamp trap short-date
上面是思科設備的腳本,H3C, 華為的腳本 。
Logstash配置
不同廠商的日志 gork我都寫好了,復制過去就能用。
input{ tcp {port => 5002 type => "Cisco"} udp {port => 514 type => "HUAWEI"} udp {port => 5002 type => "Cisco"} udp {port => 5003 type => "H3C"} } filter { if [type] == "Cisco"{ grok{ match => { "message" => "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: .%{SYSLOGTIMESTAMP:timestamp}: %%{DATA:facility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" } match => { "message" => "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: %{SYSLOGTIMESTAMP:timestamp}: %%{DATA:facility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" } add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } else if [type] == "H3C"{ grok { match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{YEAR:year} %{DATA:hostname} %%%{DATA:vvmodule}/%{POSINT:severity}/%{DATA:digest}: %{GREEDYDATA:message}" } remove_field => [ "year" ] add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } else if [type] == "HUAWEI"{ grok { match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %%%{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"} match => { "message" => "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %{DATA:ddModuleName}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"} remove_field => [ "timestamp" ] add_field => {"severity_code" => "%{severity}"} overwrite => ["message"] } } mutate { gsub => [ "severity", "0", "Emergency", "severity", "1", "Alert", "severity", "2", "Critical", "severity", "3", "Error", "severity", "4", "Warning", "severity", "5", "Notice", "severity", "6", "Informational", "severity", "7", "Debug" ] } } output{ elasticsearch { index => "syslog-%{+YYYY.MM.dd}" hosts => ["your_ipaddress:9200"] } }
日志量top 10的設備
設備產生日志量很大,需要關注一下呢
日志分類的占比
不同級別的日志 一目了然
日志分類數量占比
可以在一張圖上看到日志級別和占比最多的主機
每小時的日志量
講道理 日志量會有一定的規律 如果有異常高的日志量的時候 需要關注一下
Dashboard
創建一個Dashboard 在一個頁面中完成日志的展示,查詢,ELK的查詢速度快到飛起。
作為一個網工,網絡設備的日志,備份其實是一直困擾我的問題。值得欣喜的是Oxidized系統的出現,完美的解決了交換機等網絡設備備份的問題, 日志分析報警也伴隨這ELK。變的更加方便實用,給網工們帶來真正的利好。