# Zabbix

Zabbix数据集成

# 告警配置

按数据库类型在页面选择 事件-Mysql事件-PostgreSQL,以事件-Mysql为例,如下图所示。

选择DIP实例类型图

# 属性配置

  • 名称:输入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

# 数据映射

映射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)
    • 若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},多个规则之前用||分隔。

# 级别映射

重要

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实例名称。
  • 宿主机:列表中任选其一,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
1
  • 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
1
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
1
  • 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
1
  • 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
1
  • 首次获取时间段(分钟)默认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

# 数据映射

  • 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},多个规则之前用||分隔。
  • timestamp(性能时间),在一栏的填写方式有三种情况:
    • 1)当对方是13位时间戳即毫秒数,格式dateformat(${对方性能中代表时间的字段})
    • 2)当对方是10位时间戳即秒数的时候首先要相应的补充000即调整为13位时间戳,格式dateformat({对方性能中代表时间的字段}000)
    • 3)当对方是日期格式的时候,需要再加一个参数即指定当前对方时间的格式是什么,格式dateformat(${对方性能中代表时间的字段},对方的时间式),例如:dateformat(${对方的时间},yyyy/MM/dd HH:mm:ss)

# 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实例名称。
  • 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行

# IN配置

  • 接口地址:zabbixAPI的接口地址
  • 用户名:zabbixAPI登录的用户名
  • 密码:zabbixAPI登录的密码
  • 请求ID:调用API的ID值,默认为1
  • 字符集:获取API告警数据时的字符集编码,默认UTF-8
  • 首次获取时间段(分钟)默认10分钟
  • 轮询间隔(秒):告警数据采集时间间隔 默认60秒
  • 告警源:EMV中定义的告警源,项目通常要对接来自不同系统的告警,依照该字段来区分不同系统的告警
    • :关于增量获取zabbix告警 10表示第一次获取告警取得的是当前系统时间向前10分钟的告警(这个分钟数可以通过询问第三方或客户从当前系统时间向[历史时间]取多少分钟的告警可以取全,需求调研时要注意),DIP实例取Zabbix告警的机制是增量获取告警,第二次以第一次取到的告警中的最大时间点开始取所有告警,也包括该时间点的告警。

# 数据映射

映射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},多个规则之前用||分隔。

# 告警级别映射

重要

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实例名称。
  • 宿主机:列表中任选其一,DIP实例将在选中的宿主机上运行

# IN配置

  • 接口地址:zabbixAPI的接口地址
  • 用户名:zabbixAPI登录的用户名
  • 密码:zabbixAPI登录的密码
  • 请求ID:调用API的ID值,默认为1
  • 主机组参数:zabbix系统中设置的主机组的名称(多个主机组名称用英文逗号隔开)
  • 字符集:获取性能数据时的字符集编码,默认UTF-8
  • 轮询周期:性能数据采集周期 默认60秒
  • 指标映射:将zabbix系统的指标名称映射成自己想要展示的名称,如下图: 指标映射
    • 文件sheet页名称必须是zabbix
    • kpi:是zabbix系统指标的名称
    • kpiName:是映射后的名称

# 指标参数

获取指定指标的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},多个规则之前用||分隔。
  • timestamp(性能时间),在一栏的填写方式有三种情况。
    • 1)当对方是13位时间戳即毫秒数,格式dateformat(${对方性能中代表时间的字段})
    • 2)当对方是10位时间戳即秒数的时候首先要相应的补充000即调整为13位时间戳,格式dateformat({对方性能中代表时间的字段}000)
    • 3)当对方是日期格式的时候,需要再加一个参数即指定当前对方时间的格式是什么,格式dateformat(${对方性能中代表时间的字段},对方的时间格式),例如:dateformat(${对方的时间},yyyy/MM/dd HH:mm:ss)

# 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系统,进入监测中--最新数据,如下图:

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
    #!/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
    30

    创建脚本

  • 2.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

# 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"}'
1

日志

上次更新时间: 10/21/2022, 5:24:44 PM