大部分系统都通过日志系统来记录系统中发生的各种各样的事件,通过这些事件可以让我们了解系统发生过的重要信息(如告警, 错误等)。对系统日志的监控是运维的一个重要工作,对于中心级的机房,对于大量的设备逐个轮询方式检查不仅费时费力, 而其还不及时。目前有2种比较常用的主动日志推送方法,snmp trap和syslog协议。这2种协议也是目前大部分的设备和程序所内置支持的方式。
1. 概述/架构
Event-Central是一个使用java实现的snmp trap和syslog接收和管理系统,可以接收个系统推送过来的syslog和snmp trap事件,并进行相应的处理,如记录如数据库,分析并通过短信通知管理员,统一界面展示等。
Event-Central分为服务器端和Web客户端,其中服务器端可以运行多个实例,分布式部署。服务器端和客户端是相对独立运行的。
服务器端设计上采用了经典的观察者(Observer)设计模式, 其中定义的org.littlestar.event_central.EventListener接口扮演被观察者角色,具体有2个实现,分别是:
- org.littlestar.event_central.listener.SnmpTrapListener – 对应snmp trap监听进程, 使用snmp4j实现。
- org.littlestar.event_central.listener.SyslogListener – 对应syslog事件监听, 使用syslog4j实现。
其中定义的org.littlestar.event_central.EventObserver扮演观察者, 具体由两个实现, 分别是:
- org.littlestar.event_central.observer.EventDbLogger – 将EventListener监听到的event记录到数据库。
- org.littlestar.event_central.observer.EventSmLogger – 将EventListener监听到的event通过短信发送给管理员(这个不是通用的,根据各自的短信猫接口编写)
客户端是一个基于java servlet和jQuery(datatables + jquery-ui)的数据Web展现。你也可以不用客户端,或者直接根据数据表自己展现,还可以不用客户端直接查数据库表。
数据库表:
- events – 用于记录接收到的事件;
- listeners – 用于记录连接到数据库的服务器端基本信息和状态信息;
- hosts – events表的辅助表,于event.source(外)连接,可以提高事件源的可读性;
- blacklist – 辅助表, 用于设置一些排除信息(如你不想每个事件都发短信), 对应org.littlestar.event_central.utils.BlackList.check方法。
2. 安装/使用方法
Event-Central提供了build.xml,可以使用apache ant构建:
$ git clone https://github.com/Li-Xiang/EventCentral.git
$ ant
构建生成的文件在dist目录下, lsecs.jar是服务器端程序, lsecs/lsecs.cmd分别对应linux/windows的启动脚本; lsecc.war是Web客户端程序。
服务器端和客户端都需要datasource.xml配置文件,指定数据库。配置文件的文件名是写死的都是datasource.xml.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<DataSource>
<Driver>com.mysql.cj.jdbc.Driver</Driver>
<Url>jdbc:mysql://127.0.0.1/lsec</Url>
<User>lsec</User>
<Password>Passw0rd</Password>
<Properties>useSSL=false;useUnicode=true;characterEncoding=UTF-8;autoReconnect=true</Properties>
</DataSource>
</Configuration>
但位置是分别指定的, 其中服务器端的配置文件固定, 在运行目录下。客户端的配置文件是通过WEB-INF/web.xml指定的, 你可以在执行ant之前修改为你需要的,也可以在deploy之后,到对应目录下修改:
$ web.xml -->
...
<context-param>
<param-name>ds_config</param-name>
<param-value>D:\product\lsec\datasource.xml</param-value>
</context-param>
...
3. 为设备配置snmp trap(IBM设备为例)
HMC(Hardware Managerment Console) v7版本
"Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
HMC(Hardware Managerment Console) v9版本:
"Serviceability"
--> "Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
IBM F900/V7000/SVC
IBM FlashSystem 900/Storwize V7000/SAN Volumne Controller管理界面都是一样的。
"Settings"
--> "Notifications"
--> "SNMP"
IBM DS8880
"Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
IBM DS5300 (OEM NetApp)
IBM System Storage SAN24B (OEM Brocade)
T_B16_1:admin> snmpconfig --set snmpv1
SNMP community and trap recipient configuration:
Community (rw): [Secret C0de]
Trap Recipient's IP address : [0.0.0.0]
Community (rw): [OrigEquipMfr]
Trap Recipient's IP address : [0.0.0.0]
Community (rw): [private]
Trap Recipient's IP address : [0.0.0.0]
Community (ro): [public] 192.168.1.1 --> 你的地址
Trap Recipient's IP address : [0.0.0.0]
Community (ro): [common]
Trap Recipient's IP address : [0.0.0.0]
Community (ro): [FibreChannel]
Trap Recipient's IP address : [0.0.0.0]
Committing configuration...done.