我在公司工作了 1 年半多,但公司的日志服务器我真的是很少摸过,都是前辈大佬们留下来的遗物,已经 1 年多没有怎么维护过了。我们的日志服务器主要是自动收集各核心设备的告警信息,并展示到我们的监控墙中,并存储到硬盘中以便往后查询。

我比较了其他日志服务器平台,还是不如 Kiwi Syslog 直接方便,毕竟在 Windows 就能直接用了,所以先作为本次的主角

搭建 Kiwi Syslog

日志服务器的实现原理是,在服务器开启 UDP 514 端口(可以开 TCP/SNMP trip),再配置远程设备的信息系统,指定到日志服务器的 IP 或 DNS 地址即可。

怎么安装与琐碎

你上网找吧,破解版或体验版就看别人的讲解好一点。安装完毕后记得先在防火墙放行 514 端口,如果设定成其他端口或开启 TCP 端口需要放行相关端口才可以接收。

安装完毕后

这个工具基本部署后就能拎包入住,不过个人建议先点击 [File] -- [Setup],将 [Inputs] 的 [UDP] 中的 [Date encoding] 改为 UTF-8,避免不同设备的编码问题。

udp.jpg

搞定完毕后,我们就开始配置远程设备的日志信息平台吧

用华为交换机发送日志

毕竟爷的家里没有实体交换机,只能在公司摸一摸。所以只能用在大学中又爱又恨的 eNSP 模拟交换机配置信息中心系统,发送到我的 Kiwi Syslog 服务器中。

拓扑图

很简单的 HCNA 范例,但由于需要跟物理机通信必须开 Cloud 桥接到电脑的虚拟网卡中。

ensp.jpg

Cloud 的配置,使用 VMware 虚拟机的 NAT 网卡,实际上不需要开启虚拟机。其实开一张虚拟 Loopback 网卡就行了。

cloud.jpg

配置命令

交换机链路配置就不展示了,但本次实现需要所有设备除了模拟PC外都要连通物理机,所以需要全网可达外网。主要是怎样配置华为的 info-center 发送到我们的日志服务器中。

其中:

  • loghost 是远程日志服务器的主机IP,而 channel loghost 是 loghost 通道,可以理解为一个消息区域
  • timestamp log date 设置日志时间格式
  • 在 loghost频道中,关闭所有模块的状态
  • 将 192.168.223.1 作为日志主机,设置信息级别为 信息级 ,并允许所有信息输出到这个模块

    info-center enable
    info-center loghost 192.168.223.1 channel loghost
    info-center timestamp log date
    info-center source default channel loghost debug state off log state off trap state off
    info-center loghost 192.168.223.1 facility local6 language english
    info-center source default channel loghost log level informational

配置完毕后,输入 show channel loghost 查看是否通道是否生效。
生效情况

关于配置相关问题可见下方的参考资料中,我也是拿来的。

用 Python3 发送日志信息

这是最简单的发送日志信息的脚本,用 logging 的日志库发送日志信息。除了交换机,我们也可以通过服务器以脚本的形式发送到日志服务器中。

import logging
import logging.handlers

logger = logging.getLogger()
fh = logging.handlers.SysLogHandler(('127.0.0.1', 514), logging.handlers.SysLogHandler.LOG_AUTH)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.warning("加油!奥力给!!")

实验情况

我们将交换机到 PC 的链路 shutdown,按理来说在 Kiwi Syslog 会出现 Down 的日志告警。如图所示,连我敲的命令和状态信息都会直接输出在前端,可说明成功收集到日志了

down.jpg

执行下脚本,也会收到电脑发出的日志信息。

aoligei.jpg

进阶

只展示我们想看的内容

如果未来再搞几百台设备,一堆无用的数据刷着我们就无法正常获得我们想要的,那有没有一款可以过滤信息的日志服务...................Kiwisyslog 就自带这功能了!

打开 Setup ,在 [Rules] 的标签中点击左上角的新建的图标按钮,然后名字自取,改成想要的名称。目前我的想法先把接口中断的告警发送到另一个展示页 (Display 01)中

先在 [Filters] 新建一个标签,看到 [New Filter] 点击进去,在头上有个两个选择栏,

  • Field:Message text
  • Filter Type:Complex 或 Simple(看需求,Complex 可以匹配多个关键字,会正则建议 RegExp)
  • 内容,字符串必须带双引号,否则点击 OK 会报错。

filter.jpg

设置好过滤器规则,我们就要配置 Actions,跟上面一样,也要在 [Actions] 中新建标签页,将内容展示到 Display 01 中,最后OK 即可。

action.jpg

我们再执行shutdown操作,可以看到日志已经输出到 01 分区中了,其他日志不会再出现。

shutdown.jpg

我想收告警邮件

啊,我的老伙计,因为系统刷得太快,我们查阅还要翻翻滚动条才能看到最近的日志,就想看回以前的告警岂不是很麻烦,一个一个文件得找。用邮件提醒是好办法,收到什么值得注意的告警发一份日志文字到我的邮箱,我有空再去瞧瞧就行。(兄啊,你就不会去 Kiwisyslog 网页端看吗?)

(公司的kiwi还是旧版,完全不支持 SSL 的 SMTP 端口,逼得我自建邮箱给同事们看。而新版已经支持加密的 SSL,ohhhhhhhh)

在 Kiwisyslog 也有邮件提醒功能,同样打开 [Setup] 的 [E-mail] ,先配置好相关邮箱配置。如果 Test 中收到邮件就表示成功了

mail.jpg

好了好了,最后我们配置下如果上面的端口断了,发送一份告警邮件到我的邮箱。在上面的过滤规则的行为中再添加一个动作即可。配置如下,配置完毕务必 Test 一下。

mailaction.jpg

再执行一下刚才的操作,看看有无收到相关邮件。(如果没有收到邮件,要关掉kiwi syslog,以管理员权限运行才可以。)

mailok.jpg

参考资料