# Zabbix
# 告警配置
按数据库类型在页面选择 事件-Mysql或事件-PostgreSQL,以事件-Mysql为例,如下图所示。
# 属性配置
- 名称:输入DIP实例名称。
- 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行。
# IN配置
- 数据库类型:填默认的MySQL
- 主机:Zabbix库的主机IP
- 端口:Zabbix库占用的端口
- 数据库名:Zabbix库的名称
- 用户名:连接zabbix数据库的用户名
- 密码:连接zabbix数据库的密码
- 查询SQL:查询zabbix告警所需的sql,由zabbix厂商提供
SELECT h.host as node_name,ev.objectid as object_id,IF(tg.priority!=0, tg.priority, 3) as severity, itm.name as kpi_name, itm.key_ as kpikey, replace(tg.description,'{HOST.NAME}',h.host) as message, ev.clock as event_occur_time , FROM_UNIXTIME(ev.clock ) as occur_time,ev.eventid event_id,ev.source source_id,IF(ev.VALUE=0,2,1) as value FROM events ev left join triggers tg on ev.objectid=tg.triggerid left join functions fun on fun.triggerid=tg.triggerid and (tg.expression like '%'||fun.functionid||'%') left join items itm on itm.itemid=fun.itemid left join hosts h on itm.hostid=h.hostid where ev.source=0 and h.host is not NULL
1
2
3 - 首次获取时间段(分钟):默认10分钟
- 轮询周期(秒):告警数据采集周期 默认60秒
- 告警源:EMV中定义的告警源,项目通常要对接来自不同系统的告警,依照该字段来区分不同系统的告警
- 注:关于增量获取zabbix告警
- 1)10表示第一次获取告警取得的是当前系统时间向前10分钟的告警(这个分钟数可以通过询问第三方或客户从当前系统时间向
[历史时间]
取多少分钟的告警可以取全,需求调研
时要注意),DIP实例取Zabbix告警的机制是增量获取告警,第二次以第一次取到的告警中的最大时间点开始取所有告警,也包括该时间点的告警。 - 2)写sql语句时需要注意:必须有告警最后发生时间的字段且为该字段起的别名必须是
event_occur_time
,上面的sql语句为告警的最后发生时间ev.clock
起的别名就是event_occur_time
。
- 1)10表示第一次获取告警取得的是当前系统时间向前10分钟的告警(这个分钟数可以通过询问第三方或客户从当前系统时间向
- 注:关于增量获取zabbix告警
# 数据映射
映射CI将从zabbix中获得的告警匹配到发生该告警的设备(森数据DIX系统中的设备
)上。
从
下方填写的是zabbix告警的字段,到
的下方填写的是森数据DIX系统中的告警字段。
从 | 到 | 映射 |
---|---|---|
${NODE_NAME} | SourceCIName | CI映射 |
${MESSAGE} | Summary | |
${KPI_NAME} | SourceAlertKey | |
${SOURCE_SEVERITY} | SourceSeverity | |
SourceIdentifier | ||
${EVENT_ID} | SourceEventID | |
${SEVERITY} | Severity | |
${TIME} | LastOccurrence | |
${VALUE} | Status |
- 备注:
- Severity此处也由${LEVEL}映射,会通过后面的告警级别映射改变。
- LastOccurrence(告警最后发生时间),在
从
一栏的填写方式有三种情况:- 1)当对方是13位时间戳即毫秒数,格式
dateformat(${对方告警中代表最后发生时间的字段})
。 - 2)当对方是10位时间戳即秒数的时候首先要相应的补充000即调整为13位时间戳,格式
dateformat({对方告警中代表最后发生时间的字段}000)
。 - 3)当对方是日期格式的时候,需要再加一个参数即指定当前对方时间的格式是什么,格式
dateformat(${对方告警中代表最后发生时间的字段},对方的时间格式)
,例如:dateformat(${对方的时间},yyyy/MM/dd HH:mm:ss)
。
- 1)当对方是13位时间戳即毫秒数,格式
- 若SourceIdentifier在对方的Zabbix系统中存在对应的字段注意在
从
一栏和sql语句中都要添加。 - SourceCIName是
CMV
中用于确定发生告警的CI的ciCode,其所在行映射CI字段
列的填写方式有三种情况:- 1)当${NODE_NAME}在对方系统中具有唯一性,且${NODE_NAME}是CI分类中的主键(CI分类中不一定也叫NODE),此时在
SourceCIName
这一行的映射CI字段
处不填任何内容,会默认按照cicode查找。 - 2)当${NODE_NAME}在对方系统中具有唯一性,但${NODE_NAME}不是CI分类中的主键,此时
映射CI字段
一栏填写分类名。属性名(CMV中的分类及属性名,该属性必须能够唯一标识CI
,该属性在CMV中不一定叫NODE_NAME),如X86宿主机.主机名
,即按照搜索分类的指定属性查找。 - 3)若对方系统的告警中没有属性来标识发生告警的设备,则可以用两个或多个属性来匹配到唯一的设备(这两个或多个属性在CI分类中必须存在),此时需要在NOAH中使用这两个或多个属性建立规则索引。规则表达式的书写格式:$(属性1)_$(属性2),下划线可以用其他符号代替。在
映射CI字段
列填写rulecode=索引名称,此时按照按照在NOAH中建立的规则索引查找,5.5版本后推荐使用下面的多分类多属性匹配
。 - 4)多分类多属性匹配。如:CIPropertys=[{"className":"ghws,ghw1","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
其中
CIPropertys=
为标识,必须填,CIPropertys=
后面的是匹配规则,为json格式。className
为CMV中CI的分类名称,可以填多个,多个分类名称之间使用英文逗号分隔,
,填入具体的分类会按照填写的分类进行匹配,不填则在全部分类中进行匹配;CIAttribute
为匹配的CI属性是一个数组格式,如果多属性匹配可配置多个属性的规则,name
为属性名称,opType
匹配的方式,1
为精确匹配,2
为模糊匹配,value
为属性值${}是源数据中的值;- 不同分类或全部分类下的相同属性匹配:如
CIPropertys=[{"className":"","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
- 不同分类下的不同属性,如
CIPropertys=[{"className":"服务器","CIAttribute":[{"name":"配置项编码","opType": "1","value": "${2}"}]},{"className":"交换机","CIAttribute":[{"name":"IP地址","opType": "1","value": "${2}"}]}]
- 5)根据业务主键匹配。
5.6之后版本支持(包含5.6)
,可根据CMDB中设置的业务主键
做CI匹配。如:CMDB的A分类中设置了两个业务主键,匹配规则应这样填写hashCode=${NODE_NAME},${IP}
。其中${NODE_NAME}、${IP}是源数据中的属性值(在这里使用${}
括起来表示变量,也可以是常量如:192.168.1.1
),这两个值分别对应CMDB的A分类中的两个业务主键的值。以下是项目中常见的几种匹配机制:- 相同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}
或者hashCode=${NODE_NAME}
;只有一个业务主键时填写如后者,多个业务主键时填写如前者,多个属性值之间用英文的逗号,
分隔。 - 不同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}||${IP}
,多个规则之前用||
分隔。
- 相同个数业务主键匹配。规则代码的填写如
- 1)当${NODE_NAME}在对方系统中具有唯一性,且${NODE_NAME}是CI分类中的主键(CI分类中不一定也叫NODE),此时在
# 级别映射
重要
zabbix的默认告警级别,与森数据DIX告警级别不匹配,需要通过映射来进行匹配。
- 从:zabbix的告警级别
- 到:森数据DIX的告警级别(1为最高级别)
级别映射配置,若无特殊需求,无需更改
从 | 到 |
---|---|
1 | 4 |
2 | 4 |
3 | 3 |
4 | 2 |
5 | 1 |
# Out配置
点击 添加,根据是否部署EMV选择告警的发送方式,是选择MQ发送,否选择MYSQL或ES发送
- 将zabbix告警发送至MQ
- URL: 部署森数据DIX时MQ的地址,格式为tcp://${ip} : ${port},例如tcp://0.0.0.0:61616
- 队列名:产品中发送告警的指定队列
eventQueue
- 用户名:username
- 密码:password
- 将zabbix告警保存MYSQL
- URL:连接MYSQL的URL,例如:jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
- 用户名:username
- 密码:password
- 是否存历史数据:默认为true
- 将zabbix告警保存ES
- ES请求地址:连接ES的URL地址,多个ES用分号隔开。例如:0.0.0.0:9200;0.0.0.0:9200
- 用户名:ES认证用户名
- 密码:ES认证密码
- 保留天数:历史数据保留天数 默认7天
# 保存并启动
点击保存将会在森数据DIX界面看到创建的DIP实例。
点击启动按钮,待启动成功之后,点击日志按钮,查看数据是否能正常接入。
名词解释
已接入:当前数据接口接入到的总数据量
处理中:当前数据接口正在进行处理的数据量
发送中:当前数据接口正在向外部发送的数据量
已发送:当前数据接口发送到外部的总数据量
# 监控信息
- DIP实例启动成功后,点击监控按钮,进入DIP实例的监控页面。
- 当前状态:此时DIP实例的状态是启动的,在这里可以看到DIP实例的下载运行日志。
- 基本信息:包括DIP实例名称、DIP实例唯一标识、DIP实例类型、DIP实例产品名称、DIP实例主机。除DIP实例唯一标识和DIP实例产品名称是系统生成的外,其余信息是在配置DIP实例时写的。
- 注:当待处理或待发送的数据量比较大时,可以将
采集周期
调整的长一点。
# 性能配置
按数据库类型在页面选择 性能-Mysql或性能-PostgreSQL,以性能-Mysql为例,如下图所示。
# 属性配置
- 名称:输入DIP实例名称。
- 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行。
# IN配置
- 数据库类型:填默认的MySQL
- 主机IP:Zabbix库的主机IP
- 端口:Zabbix库占用的端口
- 数据库名:Zabbix库的名称
- 用户名:连接zabbix数据库的用户名
- 密码:连接zabbix数据库的密码
- SQL1:获取value值为float类型的性能
select hosts.hostid, hosts.host as node_name, history.value as value,items.value_type as value_type, items.units as unitFROM_UNIXTIME(history.clock) as arisingTime, items.name as kpi_name, items.key_ as kpikey from history left join items onhistory.itemid=items.itemid left join hosts on items.hostid=hosts.hostid
- SQL2:获取value值为字符串类型的性能
select hosts.hostid, hosts.host as node_name, history_str.value as value, items.value_type as value_type, items.units as unit,
FROM_UNIXTIME(history_str.clock) as arisingTime, items.name as kpi_name, items.key_ as kpikey
from history_str left join items on history_str.itemid=items.itemid left join hosts on items.hostid=hosts.hostid
2
3
- SQL3:获取value值为Long类型的性能
select hosts.hostid, hosts.host as node_name, history_log.value as value, items.value_type as value_type, items.units as unit,FROM_UNIXTIME(history_log.clock) as arisingTime, items.name as kpi_name, items.key_ as kpikey from history_log left join itemson history_log.itemid=items.itemid left join hosts on items.hostid=hosts.hostid
- SQL4:获取value值为Numeric类型的性能
select hosts.hostid, hosts.host as node_name, history_uint.value as value, items.value_type as value_type, items.units as unit, FROM_UNIXTIME(history_uint.clock) as arisingTime, items.name as kpi_name, items.key_ as kpikey from history_uint left join items on history_uint.itemid=items.itemid left join hosts on items.hostid=hosts.hostid
- SQL5:获取value值为Text类型的性能
select hosts.hostid, hosts.host as node_name, history_text.value as value, items.value_type as value_type, items.units as unit,FROM_UNIXTIME(history_text.clock) as arisingTime, items.name as kpi_name, items.key_ as kpikey from history_text left joinitems on history_text.itemid=items.itemid left join hosts on items.hostid=hosts.hostid
首次获取时间段(分钟):默认10秒
轮询间隔(秒):性能数据采集时间间隔 默认60秒
- 注:关于增量获取zabbix性能
- 1)10表示第一次获取性能取得的是当前系统时间向前10分钟的性能(这个分钟数可以通过询问第三方或客户从当前系统时间向
[历史时间]
取多少分钟的性能可以取全,需求调研
时要注意),DIP实例取Zabbix性能的机制是增量获取性能,第二次以第一次取到的性能中的最大时间点开始取所有性能,也包括该时间点的性能。 - 2)写sql语句时需要注意:必须有性能的时间字段,先要将该字段转化为
yyyy-MM-dd HH:mm:ss
的格式,然后必须
要起别名是arisingTime
,上面的sql语句是将10位的时间戳转换为yyyy-MM-dd HH:mm:ss
格式,起的别名就是arisingTime
。
- 1)10表示第一次获取性能取得的是当前系统时间向前10分钟的性能(这个分钟数可以通过询问第三方或客户从当前系统时间向
- 注:关于增量获取zabbix性能
# 数据映射
- ciCode:cicode
- metric:指标名称
- value:性能值
- instance:实例
- unit:单位
- desc:描述信息
- timestamp:性能采集时间
- kpikey:性能指标
CI映射将Zabbix的性能数据匹配到设备(森数据DIX系统中的设备)上。
从
下方填写的是Zabbix系统中性能的字段,到
下方写森数据DIX中接入性能必须的字段:
从 | 到 | 映射 |
---|---|---|
${NODE_NAME} | ciCode | |
${KPI_NAME} | metric | |
${VALUE} | value | |
_ | instance | |
${UNIT} | unit | |
desc | ||
${ARISINGTIME} | timestamp | |
${KPIKEY} | kpikey |
- 备注:
ciCode是
CMV
中用于确定性能所在CI的ciCode,其所在行映射CI字段
列的填写方式有三种情况:- 1)当${NODE_NAME}在对方系统中具有唯一性,若${NODE}是CI分类中的主键(CI分类中不一定也叫NODE_NAME),此时在
SourceCIName
这一行的映射CI字段`处不填任何内容,会默认按照cicode查找。 - 2)当${NODE_NAME}在对方系统中具有唯一性,但${NODE_NAME}不是CI分类中的主键,此时
映射CI字段
一栏填写分类名.属性名(CMV中的分类属性名,该属性必须能够唯一标识CI
,该属性在CMV中不一定叫NODE_NAME),如X86宿主机.主机名
,即按照搜索分类的指定属性查找。 - 3)若对方系统的性能中没有属性来标识该性能所属的设备,则可以用两个或多个属性来匹配到唯一的设备(这两个或多个属性在CI分类中必须存在,此时需要在NOAH中使用这两个或多个属性建立规则索引。规则表达式的书写格式:$(属性1)_$(属性2),下划线可以用其他符号代替。在
映射CI段
列填写rulecode=索引名称,此时按照按照在NOAH中建立的规则索引查找。5.5版本后推荐使用下面的多分类多属性匹配
。 - 4)多分类多属性匹配。如:CIPropertys=[{"className":"ghws,ghw1","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]]
其中
CIPropertys=
为标识,必须填,CIPropertys=
后面的是匹配规则,为json格式。className
为CMV中CI的分类名称,可以填多个,多个分类名称之间使用英文逗号分隔,
,填入具体的分类会按照填写的分类进行匹配,不则在全部分类中 进行匹配;CIAttribute
为匹配的CI属性是一个数组格式,如果多属性匹配可配置多个属性的规则,name
为属性名称,opType
匹配的方式,1
为精匹配,2
为模糊匹配,value
为属性值${}是源数据中的值;- 不同分类或全部分类下的相同属性匹配:如
CIPropertys=[{"className":"","CIAttribute":[{"name":"id","opType": "1","value": "{2}"}]}]
- 不同分类下的不同属性,如
CIPropertys=[{"className":"服务器","CIAttribute":[{"name":"配置项编码","opType": "1","value": "{2}"}]}, {"className":"交换机","CIAttribute":[{"name":"IP地址","opType": "1","value": "${2}"}]}]
- 5)根据业务主键匹配。
5.6之后版本支持(包含5.6)
,可根据CMDB中设置的业务主键
做CI匹配。如:CMDB的A分类中设置了两个业务主键,匹配规则应这样填写hashCode=${NODE_NAME},${IP}
。其中${NODE_NAME}、${IP}是源数据中的属性值(在这里使用${}
括起来表示变量,也可以是常量如:192.168.1.1
),这两个值分别对应CMDB的A分类中的两个业务主键的值。以下是项目中常见的几种匹配机制:- 相同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}
或者hashCode=${NODE_NAME}
;只有一个业务主键时填写如后者,多个业务主键时填写如前者,多个属性值之间用英文的逗号,
分隔。 - 不同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}||${IP}
,多个规则之前用||
分隔。
- 相同个数业务主键匹配。规则代码的填写如
- 1)当${NODE_NAME}在对方系统中具有唯一性,若${NODE}是CI分类中的主键(CI分类中不一定也叫NODE_NAME),此时在
- timestamp(性能时间),在
从
一栏的填写方式有三种情况:- 1)当对方是13位时间戳即毫秒数,格式
dateformat(${对方性能中代表时间的字段})
。 - 2)当对方是10位时间戳即秒数的时候首先要相应的补充000即调整为13位时间戳,格式
dateformat({对方性能中代表时间的字段}000)
。 - 3)当对方是日期格式的时候,需要再加一个参数即指定当前对方时间的格式是什么,格式
dateformat(${对方性能中代表时间的字段},对方的时间式)
,例如:dateformat(${对方的时间},yyyy/MM/dd HH:mm:ss)
。
- 1)当对方是13位时间戳即毫秒数,格式
# Out配置
点击 添加,根据是否部署PMV选择性能的发送方式,是选择MQ发送,否选择MYSQL或ES发送
- 将zabbix性能发送至MQ
- URL: 部署森数据DIX时MQ的地址,格式为tcp://${ip} : ${port},例如tcp://0.0.0.0:61616。
- 队列名:产品中发送性能的指定队列
noah_perfs
- 用户名:username
- 密码:password
- 将zabbix性能保存MYSQL
- URL:连接MYSQL的URL,例如:jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
- 用户名:username
- 密码:password
- 是否存历史数据:默认为true
- 将zabbix性能保存ES
- ES请求地址:连接ES的URL地址,多个ES用分号隔开。例如:0.0.0.0:9200;0.0.0.0:9200
- 用户名:ES认证用户名
- 密码:ES认证密码
- 保留天数:历史数据保留天数 默认7天
# 保存并启动
点击保存将会在森数据DIX界面看到创建的DIP实例。
点击启动按钮,待启动成功之后,点击日志按钮,查看数据是否能正常接入。
名词解释
已接入:当前数据接口接入到的总数据量
处理中:当前数据接口正在进行处理的数据量
发送中:当前数据接口正在向外部发送的数据量
已发送:当前数据接口发送到外部的总数据量
# 监控信息
- DIP实例启动成功后,点击监控按钮,进入DIP实例的监控页面。
- 当前状态:此时DIP实例的状态是启动的,在这里可以看到DIP实例的下载运行日志。
- 基本信息:包括DIP实例名称、DIP实例唯一标识、DIP实例类型、DIP实例产品名称、DIP实例主机。
- 注:当待处理或待发送的数据量比较大时,可以将
采集周期
调整的长一点。
# API告警配置
页面左上角选择 事件-API,如下图所示。
# 属性配置
- 名称:输入DIP实例名称。
- 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行。
# IN配置
- 接口地址:zabbixAPI的接口地址
- 用户名:zabbixAPI登录的用户名
- 密码:zabbixAPI登录的密码
- 请求ID:调用API的ID值,默认为1
- 字符集:获取API告警数据时的字符集编码,默认UTF-8
- 首次获取时间段(分钟):默认10分钟
- 轮询间隔(秒):告警数据采集时间间隔 默认60秒
- 告警源:EMV中定义的告警源,项目通常要对接来自不同系统的告警,依照该字段来区分不同系统的告警
- 注:关于增量获取zabbix告警
10表示第一次获取告警取得的是当前系统时间向前10分钟的告警(这个分钟数可以通过询问第三方或客户从当前系统时间向
[历史时间]
取多少分钟的告警可以取全,需求调研
时要注意),DIP实例取Zabbix告警的机制是增量获取告警,第二次以第一次取到的告警中的最大时间点开始取所有告警,也包括该时间点的告警。
- 注:关于增量获取zabbix告警
10表示第一次获取告警取得的是当前系统时间向前10分钟的告警(这个分钟数可以通过询问第三方或客户从当前系统时间向
# 数据映射
映射CI将从zabbix中获得的告警匹配到发生该告警的设备(森数据DIX系统中的设备
)上。
从
下方填写的是zabbix告警的字段,到
的下方填写的是Tarsier系统中的告警字段。
从 | 到 | 映射 |
---|---|---|
${NODE_NAME} | SourceCIName | 不填/分类名.属性名/rulecode=索引名 |
${MESSAGE} | Summary | |
${KPI_NAME} | SourceAlertKey | |
${SOURCE_SEVERITY} | SourceSeverity | |
ZabbixIdentifier | SourceIdentifier | |
${NODE_NAME}_${OBJECT_ID} | SourceEventID | |
${SEVERITY} | Severity | |
${TIME} | LastOccurrence | |
${VALUE} | Status |
- 以上配置,除了
SourceIdentifier
属性的配置可做修改,其他的不允许做修改 - SourceCIName是
CMV
中用于确定发生告警的CI的ciCode,其所在行映射CI字段
列的填写方式有三种情况:- 1)当${NODE_NAME}在对方系统中具有唯一性,且${NODE_NAME}是CI分类中的主键(CI分类中不一定也叫NODE),此时在
SourceCIName
这一行的映射CI字段
处不填任何内容,会默认按照cicode查找。 - 2)当${NODE_NAME}在对方系统中具有唯一性,但${NODE_NAME}不是CI分类中的主键,此时
映射CI字段
一栏填写分类名.属性名(CMV中的分类及属性名,该属性必须能够唯一标识CI
,该属性在CMV中不一定叫NODE_NAME),如X86宿主机.主机名
,即按照搜索分类的指定属性查找。 - 3)若对方系统的告警中没有属性来标识发生告警的设备,则可以用两个或多个属性来匹配到唯一的设备(这两个或多个属性在CI分类中必须存在),此时需要在NOAH中使用这两个或多个属性建立规则索引。规则表达式的书写格式:$(属性1)_$(属性2),下划线可以用其他符号代替。在
映射CI字段
列填写rulecode=索引名称,此时按照按照在NOAH中建立的规则索引查找。5.5版本后推荐使用下面的多分类多属性匹配
。 - 4)多分类多属性匹配。如:CIPropertys=[{"className":"ghws,ghw1","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
其中
CIPropertys=
为标识,必须填,CIPropertys=
后面的是匹配规则,为json格式。className
为CMV中CI的分类名称,可以填多个,多个分类名称之间使用英文逗号分隔,
,填入具体的分类会按照填写的分类进行匹配,不填则在全部分类中进行匹配;CIAttribute
为匹配的CI属性是一个数组格式,如果多属性匹配可配置多个属性的规则,name
为属性名称,opType
匹配的方式,1
为精确匹配,2
为模糊匹配,value
为属性值${}是源数据中的值;- 不同分类或全部分类下的相同属性匹配:如
CIPropertys=[{"className":"","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
- 不同分类下的不同属性,如
CIPropertys=[{"className":"服务器","CIAttribute":[{"name":"配置项编码","opType": "1","value": "${2}"}]},{"className":"交换机","CIAttribute":[{"name":"IP地址","opType": "1","value": "${2}"}]}]
- 5)根据业务主键匹配。
5.6之后版本支持(包含5.6)
,可根据CMDB中设置的业务主键
做CI匹配。如:CMDB的A分类中设置了两个业务主键,匹配规则应这样填写hashCode=${NODE_NAME},${IP}
。其中${NODE_NAME}、${IP}是源数据中的属性值(在这里使用${}
括起来表示变量,也可以是常量如:192.168.1.1
),这两个值分别对应CMDB的A分类中的两个业务主键的值。以下是项目中常见的几种匹配机制:- 相同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}
或者hashCode=${NODE_NAME}
;只有一个业务主键时填写如后者,多个业务主键时填写如前者,多个属性值之间用英文的逗号,
分隔。 - 不同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}||${IP}
,多个规则之前用||
分隔。
- 相同个数业务主键匹配。规则代码的填写如
- 1)当${NODE_NAME}在对方系统中具有唯一性,且${NODE_NAME}是CI分类中的主键(CI分类中不一定也叫NODE),此时在
# 告警级别映射
重要
zabbix的默认告警级别,与森数据DIX告警级别不匹配,需要通过映射来进行匹配。
- 从:zabbix的告警级别
- 到:森数据DIX的告警级别(1为最高级别)
级别映射配置,若无特殊需求,无需更改
从 | 到 |
---|---|
1 | 4 |
2 | 4 |
3 | 3 |
4 | 2 |
5 | 1 |
# Out配置
点击 添加,根据是否部署EMV选择告警的发送方式,是选择MQ发送,否选择MYSQL或ES发送
- 将zabbix告警发送至MQ
- URL: 部署森数据DIX时MQ的地址,格式为tcp://${ip} : ${port},例如tcp://0.0.0.0:61616
- 队列名:产品中发送告警的指定队列
eventQueue
- 用户名:username
- 密码:password
- 将zabbix告警保存MYSQL
- URL:连接MYSQL的URL,例如:jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
- 用户名:username
- 密码:password
- 是否存历史数据:默认为true
- 将zabbix告警保存ES
- ES请求地址:连接ES的URL地址,多个ES用分号隔开。例如:0.0.0.0:9200;0.0.0.0:9200
- 用户名:ES认证用户名
- 密码:ES认证密码
- 保留天数:历史数据保留天数 默认7天
# 保存并启动
点击保存将会在森数据DIX界面看到创建的DIP实例。
点击启动按钮,待启动成功之后,点击日志按钮,查看数据是否能正常接入。
名词解释
已接入:当前数据接口接入到的总数据量
处理中:当前数据接口正在进行处理的数据量
发送中:当前数据接口正在向外部发送的数据量
已发送:当前数据接口发送到外部的总数据量
# 监控信息
- DIP实例启动成功后,点击监控按钮,进入DIP实例的监控页面。
- 当前状态:此时DIP实例的状态是启动的,在这里可以看到DIP实例的下载运行日志。
- 基本信息:包括DIP实例名称、DIP实例唯一标识、DIP实例类型、DIP实例产品名称、DIP实例主机。除DIP实例唯一标识和DIP实例产品名称是系统生成的外,其余信息是在配置DIP实例时写的。
- 注:当待处理或待发送的数据量比较大时,可以将
采集周期
调整的长一点。
# API性能配置
页面左上角选择 性能-API,如下图所示。
# 属性配置:
- 名称:输入DIP实例名称。
- 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行。
# IN配置
- 接口地址:zabbixAPI的接口地址
- 用户名:zabbixAPI登录的用户名
- 密码:zabbixAPI登录的密码
- 请求ID:调用API的ID值,默认为1
- 主机组参数:zabbix系统中设置的主机组的名称(多个主机组名称用英文逗号隔开)
- 字符集:获取性能数据时的字符集编码,默认UTF-8
- 轮询周期:性能数据采集周期 默认60秒
- 指标映射:将zabbix系统的指标名称映射成自己想要展示的名称,如下图:
- 文件sheet页名称必须是
zabbix
- kpi:是zabbix系统指标的名称
- kpiName:是映射后的名称
- 文件sheet页名称必须是
# 指标参数
获取指定指标的key值
主机组名称 | 指标过滤条件 |
---|---|
Linux servers | cpu |
# 数据映射
- ciCode:cicode
- metric:指标名称
- value:性能值
- instance:实例
- unit:单位
- desc:描述信息
- timestamp:性能采集时间
- kpikey:性能指标
CI映射将Zabbix的性能数据匹配到设备(森数据DIX系统中的设备)上。
从
下方填写的是Zabbix系统中性能的字段,到
下方写tarsier中接入性能必须的字段:
从 | 到 | 映射 |
---|---|---|
${NODE_NAME} | ciCode | |
${KPI_NAME} | metric | |
${VALUE} | value | |
_ | instance | |
${UNIT} | unit | |
desc | ||
${ARISINGTIME} | timestamp |
- ciCode是
CMV
中用于确定性能所在CI的ciCode,其所在行映射CI字段
列的填写方式有三种情况:- 1)当${NODE_NAME}在对方系统中具有唯一性,若${NODE}是CI分类中的主键(CI分类中不一定也叫NODE_NAME),此时在
SourceCIName
这一行的映射C字段
处不填任何内容,会默认按照cicode查找。 - 2)当${NODE_NAME}在对方系统中具有唯一性,但${NODE_NAME}不是CI分类中的主键,此时
映射CI字段
一栏填写分类名.属性名(CMV中的分类及属性名该属性必须能够唯一标识CI
,该属性在CMV中不一定叫NODE_NAME),如X86宿主机.主机名
,即按照搜索分类的指定属性查找。 - 3)若对方系统的性能中没有属性来标识该性能所属的设备,则可以用两个或多个属性来匹配到唯一的设备(这两个或多个属性在CI分类中必须存在),此需要在NOAH中使用这两个或多个属性建立规则索引。规则表达式的书写格式:$(属性1)_$(属性2),下划线可以用其他符号代替。在
映射CI字段
列填rulecode=索引名称,此时按照按照在NOAH中建立的规则索引查找。5.5版本后推荐使用下面的多分类多属性匹配
。 - 4)多分类多属性匹配。如:CIPropertys=[{"className":"ghws,ghw1","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
其中
CIPropertys=
为标识,必须填,CIPropertys=
后面的是匹配规则,为json格式。className
为CMV中CI的分类名称,可以填多个,多个分类名称之间使用英文逗号分隔,
,填入具体的分类会按照填写的分类进行匹配,不填则在全部分类中进行匹配;CIAttribute
为匹配的CI属性是一个数组格式,如果多属性匹配可配置多个属性的规则,name
为属性名称,opType
匹配的方式,1
为精确匹配,2
为模糊匹配,value
为属性值${}是源数据中的值;- 不同分类或全部分类下的相同属性匹配:如
CIPropertys=[{"className":"","CIAttribute":[{"name":"id","opType": "1","value": "${2}"}]}]
; - 不同分类下的不同属性,如
CIPropertys=[{"className":"服务器","CIAttribute":[{"name":"配置项编码","opType": "1","value": "${2}"}]},{"className":"交换机","CIAttribute":[{"name":"IP地址","opType": "1","value": "${2}"}]}]
。
- 5)根据业务主键匹配。
5.6之后版本支持(包含5.6)
,可根据CMDB中设置的业务主键
做CI匹配。如:CMDB的A分类中设置了两个业务主键,匹配规则应这样填写hashCode=${NODE_NAME},${IP}
。其中${NODE_NAME}、${IP}是源数据中的属性值(在这里使用${}
括起来表示变量,也可以是常量如:192.168.1.1
),这两个值分别对应CMDB的A分类中的两个业务主键的值。以下是项目中常见的几种匹配机制:- 相同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}
或者hashCode=${NODE_NAME}
;只有一个业务主键时填写如后者,多个业务主键时填写如前者,多个属性值之间用英文的逗号,
分隔。 - 不同个数业务主键匹配。规则代码的填写如
hashCode=${NODE_NAME},${IP}||${IP}
,多个规则之前用||
分隔。
- 相同个数业务主键匹配。规则代码的填写如
- 1)当${NODE_NAME}在对方系统中具有唯一性,若${NODE}是CI分类中的主键(CI分类中不一定也叫NODE_NAME),此时在
- timestamp(性能时间),在
从
一栏的填写方式有三种情况。- 1)当对方是13位时间戳即毫秒数,格式
dateformat(${对方性能中代表时间的字段})
。 - 2)当对方是10位时间戳即秒数的时候首先要相应的补充000即调整为13位时间戳,格式
dateformat({对方性能中代表时间的字段}000)
。 - 3)当对方是日期格式的时候,需要再加一个参数即指定当前对方时间的格式是什么,格式
dateformat(${对方性能中代表时间的字段},对方的时间格式)
,例如:dateformat(${对方的时间},yyyy/MM/dd HH:mm:ss)
。
- 1)当对方是13位时间戳即毫秒数,格式
# Out配置
点击 添加,根据是否部署PMV选择性能的发送方式,是选择MQ发送,否选择MYSQL或ES发送
- 将zabbix性能发送至MQ
- URL: 部署森数据DIX时MQ的地址,格式为tcp://${ip} : ${port},例如tcp://0.0.0.0:61616
- 队列名:产品中发送性能的指定队列
noah_perfs
- 用户名:username
- 密码:password
- 将zabbix性能保存MYSQL
- URL:连接MYSQL的URL,例如:jdbc:mysql://0.0.0.0:3306/db_vmdb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
- 用户名:username
- 密码:password
- 是否存历史数据:默认为true
- 将zabbix性能保存ES
- ES请求地址:连接ES的URL地址,多个ES用分号隔开。例如:0.0.0.0:9200;0.0.0.0:9200
- 用户名:ES认证用户名
- 密码:ES认证密码
- 保留天数:历史数据保留天数 默认7天
# 保存并启动
点击保存将会在森数据DIX界面看到创建的DIP实例。
点击启动按钮,待启动成功之后,点击日志按钮,查看数据是否能正常接入。
名词解释
已接入:当前数据接口接入到的总数据量
处理中:当前数据接口正在进行处理的数据量
发送中:当前数据接口正在向外部发送的数据量
已发送:当前数据接口发送到外部的总数据量
# 监控信息
- DIP实例启动成功后,点击监控按钮,进入DIP实例的监控页面。
- 当前状态:此时DIP实例的状态是启动的,在这里可以看到DIP实例的下载运行日志。
- 基本信息:包括DIP实例名称、DIP实例唯一标识、DIP实例类型、DIP实例产品名称、DIP实例主机。
- 注:当待处理或待发送的数据量比较大时,可以将
采集周期
调整的长一点。
# API性能指标参数配置
- 根据主机组对应的指定的指标key值,获取相应的性能数据(填写的主机组名称和主机组参数中填写的名称要一致)
- 1)名称要和主机组参数中填写的名称一致。
- 2)可以比主机组参数中的主机组少,但不能多。例如主机组参数填写了Zabbix servers,Linux servers两个,在这里可以只配置Linux servers,没有做指标配置的将取全量的指标数据。
# 获取指标
- 1)登录zabbix系统,进入监测中--最新数据,如下图:
- 2)主机群组中选择要查询的主机组名称,如何就会列出该主机组下所有设备的性能数据,如上图。
- 3)指标过滤条件,就是上图红色方块标出的地方(注:查询时要选中查看细节)。可以把整个都填在这里,也可以填一些关键词,多个过滤条件之间请用中竖线
|
隔开。
# 告警shell脚本方式
# 1. 实现原理
- 当Zabbix中有事件(非维护期)产生时(新出现的告警事件or关闭的告警事件),会触发trigger
- trigger调用一个shell脚本,将上述事件通过HTTP REST方式发送给森数据DIX
- shell脚本会将发送的信息和调用rest的返回结果记录到日志中
# 2. 部署
2.1 - 创建报警媒介
- 在
管理
下,选择报警媒介类型
,新建- 类型:脚本
- 脚本参数:{ALERT.MESSAGE},即报警的内容
- 在
2.2 - 创建触发器
- 在
配置
下,选择动作
,新建触发器。动作标签页下,条件设置为非维护期
操作
标签页下,配置告警发生时的操作;消息内容符合JSON格式,消息字段可参考Zabbix支持宏的文档https://www.zabbix.com/documentation/4.2/manual/appendix/macros/supported_by_location
;操作细节配置如下图所示:
{ "SourceEventID":"{EVENT.ID}", "SourceCIName":"{HOST.HOST}", "SourceAlertKey":"{ITEM.KEY}", "SourceSeverity":"{TRIGGER.SEVERITY}", "LastOccurrence":"{EVENT.DATE} {EVENT.TIME}", "Summary":"{TRIGGER.NAME}", "Status":"{EVENT.STATUS}" }
1
2
3
4
5
6
7
8
9- 在
恢复操作
标签页下,配置告警恢复时的操作。消息内容同上面的要求,操作细节配置如下图所示:
- 2.3 - 将用户与报警媒介关联
- 在
管理
下,选择用户
,将用户与报警媒介进行关联,否则会出现no media defined for user
的错误,操作细节如下图所示:
- 在
2.4 - 部署shell脚本
- shell脚本部署位置在zabbix_server.conf下查看,比如/usr/lib/zabbix/alertscrpts
- 复制以下内容,去创建脚本。环境变量结合现场实际情况来调整
- 脚本的名称务必与2.1步骤中定义的名称一致,比如,
event_to_oix.sh
- 赋予脚本执行权限,比如,
chmod 755 event_to_oix.sh
- 脚本的属主必须是zabbix,
chown zabbix:zabbix event_to_oix.sh
- 务必先用root用户执行下该脚本,以创建
event2oix.log
- 脚本的名称务必与2.1步骤中定义的名称一致,比如,
#!/bin/bash # 调用OIX中提供的REST接口,以推送告警事件 # by 卞英红 # 定以环境变量 #!/bin/bash # 调用森数据DIX中提供的REST接口,以推送告警事件 # by 卞英红 # 定以环境变量 logPath=/usr/lib/zabbix/alertscripts logName=event2dix.log restUrl=http://[ip]:[port]/http/rest/zabbixEvent # 判断日志是否存在,如果不存在,会自动创建,并赋予zabbix属主 function judgeLog(){ if [ ! -f "${logPath}/${logName}" ];then touch ${logPath}/${logName} chown zabbix:zabbix ${logPath}/${logName} fi } judgeLog # 内容中有单个"\"的,会被误认为转义字符,需要进行特殊处理,转变为"\\" eventData=${1//\\/\\\\} echo -e "\n <==========" `date +"%Y-%m-%d %H:%M:%S"` "开始 ==========>" >> ${logPath}/${logName} echo -e "接收到zabbix的推送的告警数据: \n" "${eventData}" >> ${logPath}/${logName} echo "森数据DIX返回的处理结果:" >> ${logPath}/${logName} curl -H "Content-type:application/json" -s -X POST -d "${eventData}" ${restUrl} >> ${logPath}/${logName} 2>&1 echo -e "\n" "<==========" `date +"%Y-%m-%d %H:%M:%S"` "结束 ==========>" >> ${logPath}/${logName}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
302.5 - 配置rest服务
- 复制以下代码,在森数据DIX中创建一个REST服务。需结合项目实际情况调整以下内容
- 告警级别的映射,在第19行
- 丰富CI信息,有3种情况,根据ciCode、根据属性、根据索引规则,在第46行
- ActiveMQ的url,在第56行
function run(args) { try { // 1-获取数据;脚本推送过来的数据统一放在args里,是符合JSON格式的字符串 var receiveTime = Date(); logger.info("args==================" + args); var data = JSON.parse(args); heartBeat.addInCount(1); // 2-对数据进行处理,然后放入到arrEvents中 heartBeat.setMappingCount(1); var arrEvents = new Array(); var objEvent = new Object(); // 结合项目中的实际情况,修改事件源序号 objEvent.SourceID = 6; objEvent.SourceCIName = data.SourceCIName; objEvent.SourceAlertKey = data.SourceAlertKey; objEvent.Summary = data.Summary; objEvent.SourceEventID = data.SourceEventID; objEvent.SourceSeverity = data.SourceSeverity; // Zabbix的告警级别有6个,请结合项目实际情况调整级别映射 if (objEvent.SourceSeverity == "Disaster") { objEvent.Severity = 1; } else if (objEvent.SourceSeverity == "High") { objEvent.Severity = 2; } else if (objEvent.SourceSeverity == "Average") { objEvent.Severity = 3; } else if (objEvent.SourceSeverity == "Warning") { objEvent.Severity = 4; } else if (objEvent.SourceSeverity == "Information") { objEvent.Severity = 5; } else if (objEvent.SourceSeverity == "Not classified") { objEvent.Severity = 5; } else { } // Zabbix告警状态的映射 if (data.Status == "PROBLEM") { objEvent.Status = 1; } else if (data.Status == "OK") { objEvent.Status = 2; } else if (data.Status == "RESOLVED") { objEvent.Status = 2; } else { } objEvent.SourceIdentifier = "_"; // 处理时间格式,将"."替换成"-",yyyy-MM-dd HH:mm:ss objEvent.LastOccurrence = data.LastOccurrence.replace(/\./g, "-"); // 默认是调用getCIbyCICode方法,即根据ciCode查询CI,来丰富CIObject var ArrayList = Java.type("java.util.ArrayList"); var arrCIPrimaryKey = new ArrayList(); arrCIPrimaryKey.add(objEvent.SourceCIName); objEvent.CIObject = getCIbyCIPrimaryKey(arrCIPrimaryKey); logger.info("objEvent.CIObject==========> " + objEvent.CIObject); // 将objEvent添加到arrEvents arrEvents.push(objEvent); logger.info("arrEvents==================" + JSON.stringify(arrEvents)); heartBeat.setMappingCount(0); // 3-推送数据到ActiveMQ,请结合项目实际情况修改url heartBeat.setOutingCount(arrEvents.length); var ActiveMqOut = Java.type("com.uinnova.di.dip.base.out.ActiveMqOut"); //url, queue, username, passowrd var out = new ActiveMqOut("tcp://192.168.1.47:61616", "eventQueue", "admin", "admin"); out.out(convertJs2Java(arrEvents)); heartBeat.setOutingCount(0); heartBeat.addOutCount(arrEvents.length); var sendTime = Date(); return receiveTime + ",接收数据[1]条; " + sendTime + ",发送数据[" + arrEvents.length + "]条" } catch (error) { logger.info("error==================" + error); return error; } } // 根据CIPrimaryKey查询CI function getCIbyCIPrimaryKey(arg1) { var mapCI = tarsierTool.getCiByHashCode(arg1); if (mapCI == "{}") { var CIObject = new Object(); } else { var CIObject = mapCI; } return CIObject; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81- 复制以下代码,在森数据DIX中创建一个REST服务。需结合项目实际情况调整以下内容
# 3.测试
可以利用以下命令模拟推送一条告警数据,进行手工调试,并观察日志。
./event_to_oix.sh '{"SourceEventID":"843100","SourceCIName":"192.168.1.148","SourceAlertKey":"vm.memory.size[free]","SourceSeverity":"High","LastOccurrence":"2018.10.30 03:28:25","Summary":"内存剩余容量小于500M","Status":"PROBLEM"}'