又是一个吃着火锅唱着歌的日子,同事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, 华为的脚本 。
不同厂商的日志 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"] } }
设备产生日志量很大,需要关注一下呢
日志分类的占比
不同级别的日志 一目了然
日志分类数量占比
可以在一张图上看到日志级别和占比最多的主机
每小时的日志量
讲道理 日志量会有一定的规律 如果有异常高的日志量的时候 需要关注一下
Dashboard
创建一个Dashboard 在一个页面中完成日志的展示,查询,ELK的查询速度快到飞起。
作为一个网工,网络设备的日志,备份其实是一直困扰我的问题。值得欣喜的是Oxidized系统的出现,完美的解决了交换机等网络设备备份的问题, 日志分析报警也伴随这ELK。变的更加方便实用,给网工们带来真正的利好。