大部分系统都通过日志系统来记录系统中发生的各种各样的事件,通过这些事件可以让我们了解系统发生过的重要信息(如告警, 错误等)。对系统日志的监控是运维的一个重要工作,对于中心级的机房,对于大量的设备逐个轮询方式检查不仅费时费力, 而其还不及时。目前有2种比较常用的主动日志推送方法,snmp trap和syslog协议。这2种协议也是目前大部分的设备和程序所内置支持的方式。
Event-Central是一个使用java实现的snmp trap和syslog接收和管理系统,可以接收个系统推送过来的syslog和snmp trap事件,并进行相应的处理,如记录如数据库,分析并通过短信通知管理员,统一界面展示等。
Event-Central分为服务器端和Web客户端,其中服务器端可以运行多个实例,分布式部署。服务器端和客户端是相对独立运行的。
服务器端设计上采用了经典的观察者(Observer)设计模式, 其中定义的org.littlestar.event_central.EventListener接口扮演被观察者角色,具体有2个实现,分别是:
其中定义的org.littlestar.event_central.EventObserver扮演观察者, 具体由两个实现, 分别是:
客户端是一个基于java servlet和jQuery(datatables + jquery-ui)的数据Web展现。你也可以不用客户端,或者直接根据数据表自己展现,还可以不用客户端直接查数据库表。
数据库表:
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
<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>
...
"Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
"Serviceability"
--> "Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
IBM FlashSystem 900/Storwize V7000/SAN Volumne Controller管理界面都是一样的。
"Settings"
--> "Notifications"
--> "SNMP"
"Service Management"
--> "Manage Serviceable Event Notification"
--> "SNMP Trap Configuration"
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.