搜索结果正在快递途中

有没有用ELK收集数据中心所有网络设备日志的解决方案?

资料分享 | 作者 Klein | 发布于2019年09月06日 | 阅读数:1513

目前,我们数据中心的所有网络设备的日志都发到syslog server存储,需要查问题的时候,登上去用grep, sed命令什么的去查,效率比较低。现在想部署一套ELK来提高查找问题的效率,并进一步设置一些告警规则。目前,通路已经调通,网络设备的日志已传到elasticsearch服务器上,但从kibana上,似乎也没看到有多好用,能生成什么图标。网上查了一下资料,也都是讲如何配置通路的。对如何使用kibana,对网络设备的数据进行优化处理的基本没有。不知道,哪里有相关的解决方案可以参考一下。网络设备也就是通用的cisco,H3C交换机,路由器,Juniper防火墙,F5的bigip等通用设备。(当然,所有网络设备已经被Zabbix监控。)
已邀请:

Klein

赞同来自: leoelk echoyangjx

发布消息之后,一直没有回复,只能自己摸索。后来发现,是mapping没有做好,所以强大的搜索功能显示不出来。曾经试过filebeat中的cisco module,但发现它并不能把日志中的字段识别出来。后来在logstash中,使用dissect把日志中的关键字段取了出来,才能制作virtulization和dashboard. 目前还有些小毛病,还在继续研究中。

Klein

赞同来自: sony_zhang chenjiale0055

经过自己的努力,基本上将三种网络设备的日志成功提取出来,导入ES,并制作了仪表盘,logstash的配置文件放在这里做个纪念。也请高手提意见。
 
现在仍有的问题是,filter里面的date仍然工作不正常。虽然我开始做第一个日志分析时,可以成功。但不知道为什么现在不行了。现在的配置,在日志中显示_dateparsefailure, 我知道原因(就是我从日志中提取出来的日期字符串中月和日之间有两个空格,而我这个配置中只有一个空格),但是一旦我修改成两个空格,ES中就没有数据了。怀疑是logstash匹配失败给丢弃了。目前正准备打开logstash的debug日志,查找原因。
 
logstash.confinput {
  beats {
    port => 5044
  }
}

filter {
  if "Hillstone" in [tags] {
    grok {
      patterns_dir => ["/usr/share/logstash/pipeline/patterns"]
      match => { "message" => "%{HILLSTONELOGBASE}: %{HILLSTONETRAFFICLOG}" }
      match => { "message" => "%{HILLSTONELOGBASE}: %{HILLSTONEFW43240501}" }
      match => { "message" => "%{HILLSTONELOGBASE}: %{HILLSTONETHREATLOG}" }
    }
    date {
      match => [ "ts", "MMM d HH:mm:ss" ]
    }
  }

  if "H3C" in [tags] {
    dissect {
      mapping => {
        # The following mapping worked for H3C switch and router log
        "message" => "%{event_timestamp->} %{+event_timestamp} %{+event_timestamp} %{+event_timestamp} %{src} %{module}/%{severity}/%{MNEMONIC}: %{msg}"
      }
    }
  }
}

output {
  if "Hillstone" in [tags] {
    elasticsearch {
      hosts => ["192.168.100.110:9200"]
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    }
  }
  if "H3C" in [tags] {
    elasticsearch {
      hosts => ["192.168.100.110:9200"]
      index => "logstash-%{+YYYY.MM.dd}"
    }
  }
}

注:上述配置文件中,Hillstone是国产山石防火墙,而下面的日志是H3C的交换机和路由器的防火墙日志。
 

Klein

赞同来自: sony_zhang chenjiale0055

date的问题已经找到并解决。原因是发过来的日志的时间是北京时间,而ES是使用UTC时间。在date转换时,如果没有timezone的设置,logstash会把日志中的时间当做是UTC时间,入库时,就会发生错误,因为超过了当前的时间,所以被丢弃了。在date中加入timezone参数,就可以完美的解决这个问题。下面是配置信息。目前我已将所有日志中的时间戳作为timestamp导入es中。
 
    date {
      timezone => "Asia/Shanghai"
      match => [ "ts", "MMM dd HH:mm:ss", "MMM  d HH:mm:ss" ]
    }
 
 
 

chenjiale0055

赞同来自:

跟兄弟设备和环境基本一样~~正在开始搭建环境,,学习

Felixw

赞同来自:

你好,楼主,有没有完整的思路提供一下,比如交换机的日志是先导入rsyslog当中吗?

Klein

赞同来自:

是的。交换机传到rsyslogd, 再通过filebeat传到logstash, logstash进行日志格式化以后,导入es,然后在kibana查询数据和制作仪表盘。
 
Switch/Router/SSLVPN/Firewall -> rsyslogd -> filebeat -> logstash -> elasticsearch <- kibana
 
我用docker建的测试环境,完成上述流程。本想从filebeat直接到es,但filebeat自带的module不支持我的网络设备,只能再走一遍logstash. 当然,也可以让直接让logstash和rsyslogd配合,跳过filebeat。不过以后抓服务器日志,应该还是filebeat去取会好一些。

496859932asd

赞同来自:

大佬 我怎么判断filebeat获取到rsyslogd传过来日志了?  rsyslogd -> filebeat -> logstash -> elasticsearch 这中间怎么判断收到前面传过来的数据了?

Hicer - 90后怪蜀黍

赞同来自:

Switch/Router/SSLVPN/Firewall -> rsyslogd -> filebeat -> logstash -> elasticsearch <- kibana
 
这里能不能把网络设备里日志服务器IP配成filebeat的IP,把rsyslog省略掉,让filebeat去监听个端口号。

要回复问题请先登录注册