集成Nagios

本文介绍如何在ARMS告警管理中接入Nagios。

步骤一:创建Nagios集成

  1. 登录ARMS控制台,在左侧导航栏选择告警管理 > 集成
  2. 告警集成页签单击Nagios

  3. 新建Nagios集成配置向导页面输入Nagios集成的名称、描述和告警事件自动恢复时间,然后单击保存

    说明 告警事件自动恢复时间:当告警事件在设置的时间内都没有再触发,告警事件将会自动恢复。
  4. 告警集成页签,通过搜索框查询已创建的Nagios集成,并复制集成地址。

    集成Nagios

步骤二:配置Nagios告警通知

  1. 新建告警通知脚本。

    1. 登录到Nagios所在的服务器,进入以下路径。

      cd /usr/local/nagios/libexec/
    2. 新建一个名称为nagios-alert.py的脚本文件,文件内容如下。

      说明

      脚本文件下的integration_url需替换为步骤一中的集成地址。

      #!/usr/bin/python
      # -*- coding: utf-8 -*-
      
      import requests
      import json
      import sys
      import os
      
      headers = {'Content-Type': 'application/json;charset=utf-8'}
      api_url = "integration_url"      #integration_url为步骤一中的集成地址。
      
      def parse(sys):
          object_type = str(sys.argv[1])
          notification_type = str(sys.argv[2])
          host_name = str(sys.argv[3])
          host_ip = str(sys.argv[4])
          state = str(sys.argv[5])
          time = str(sys.argv[6])
          info = str(sys.argv[7])
      
          if object_type == 'host':
              description = "[{}] {} alert: {} is {}".format(notification_type, object_type, host_name, state)
              service = ""
          else:
              service = str(sys.argv[8])
              description = "[{}] {} alert: {}/{} is {}".format(notification_type, object_type, host_name, service, state)
          content_dict = {'service':""}
          content_dict['object_type'] = object_type
          content_dict['notification_type'] = notification_type
          content_dict['host_name'] = host_name
          content_dict['host_ip'] = host_ip
          content_dict['state'] = state
          content_dict['time'] = time
          content_dict['info'] = info
          content_dict['service'] = service
          content_dict['description'] = description
          print(content_dict)
          return content_dict
      
      
      def msg(text):
          result = requests.post(url=api_url, data=json.dumps(text), headers=headers)
          print(result)
      
      
      if __name__ == '__main__':
          text = parse(sys)
          msg(text)
    3. 执行以下命令安装Requests库。

      pip install requests
  2. 配置Commands文件。

    1. 执行以下命令编辑commands.cf配置文件。

      vim /usr/local/nagios/etc/objects/commands.cf
    2. commands.cf配置文件中添加以下内容。

      define command{
          command_name notify-host-by-alert
          command_line python /usr/local/nagios/libexec/nagios-alert.py "host" "$NOTIFICATIONTYPE$" "$HOSTALIAS$" "$HOSTADDRESS$" "$HOSTSTATE$" "$LONGDATETIME$" "$HOSTOUTPUT$"
          }
      
      define command{
          command_name notify-service-by-alert
          command_line python /usr/local/nagios/libexec/nagios-alert.py "service" "$NOTIFICATIONTYPE$" "$HOSTALIAS$" "$HOSTADDRESS$" "$SERVICESTATE$" "$LONGDATETIME$" "$SERVICEOUTPUT$" "$SERVICEDESC$"
          }
    3. 输入:wq命令保存commands.cf文件的修改。

  3. 配置联系方式。

    1. 执行以下命令编辑联系人配置文件contacts.cfg

      vim/usr/local/nagios/etc/objects/contacts.cfg
    2. contacts.cfg配置文件中增加以下内容。

      service_notification_commands   notify-service-by-alert
      host_notification_commands      notify-host-by-alert
      修改contacts.cfg文件
    3. 输入:wq命令保存contacts.cfg文件的修改。

  4. 执行以下命令重新启动Nagios。

    systemctl restart nagios

(可选)步骤三:编辑集成

ARMS告警管理预设了Nagios告警源与ARMS告警管理之间字段的映射,您也可以根据需要在编辑集成页面新增或修改字段的映射关系。

示例告警源:

{
    "info":"SWAP CRITICAL - 0% free (0 MB out of 0 MB) - Swap is either disabled, not present, or of zero size.",
    "description":"[PROBLEM] service alert: localhost/Swap Usage is CRITICAL",
    "service":"Swap Usage",
    "host_ip":"127.0.0.1",
    "state":"CRITICAL",
    "object_type":"service",
    "time":"Tue Sep 14 10:46:49 CST 2021",
    "notification_type":"PROBLEM",
    "host_name":"localhost"
}
  1. 告警集成页签单击目标集成右侧操作列的编辑
  2. 事件映射区域左侧单击发送测试数据
  3. 发送测试数据对话框,输入第三方告警源的JSON格式的告警内容,然后单击发送
    说明
    • 如果显示上传成功,但未生成事件,请根据原始数据配置事件映射规则!,表示告警源与ARMS告警事件的字段没有映射,实际发送数据会被保存在左侧记录框中,以便配置映射时可以直接选取对应告警源字段。
    • 如果显示上传成功!,则表明对应的告警内容已上报至告警事件历史页面。更多信息,请参见查看告警事件历史
  4. 发送测试数据对话框单击关闭
  5. 事件映射区域左侧单击并展开需要建立映射的告警数据。
  6. 事件映射区域右侧配置告警源字段与ARMS告警的映射。

    1. 可选:选择根节点区域选择是否使用批处理。
      当告警数据存在数组节点时,可以指定目标数组节点作为根节点,将对应根节点下的数据进行批处理。

      选择使用批处理后,选择需要批处理的数组节点作为根节点。

      说明 当告警数据存在多个数组节点时,ARMS告警管理仅支持选择其中一个数组节点进行批处理。
    2. 将源字段映射到目标字段区域将告警源字段映射到ARMS告警字段上。
      单击映射图标,可以修改字段映射方式。
      • 直接:告警源指定字段直接映射为ARMS中对应的告警字段。
      • 串联:将多个告警源字段通过指定分隔符串联为一个字段,然后将这一个字段映射为ARMS中对应的告警字段。分隔符仅支持特殊字符。
      • 条件:当告警字段值满足指定条件后,设置的字段才会映射到ARMS目标字段上。
      • 映射表:设置告警源的告警等级与ARMS中的告警等级的映射,仅告警等级(severity)字段需要设置映射表。

      ARMS告警字段说明:

      ARMS告警字段说明
      告警名称(alertname)自定义告警的名称。
      告警等级(severity)设置告警等级的映射字段。该字段需要设置告警等级映射表,且映射方式必须设置为直接映射。
      告警描述(message)告警事件的详细信息,用于告警通知。最多支持15000字符。
      告警样本值(value)监控指标的样本值。
      告警图片(imageUrl)指标折线图URL,用于映射Grafana指标折线图。
      检查项(check)告警检查项。例如:CPU、JVM、Application Crash、Deployment。
      来源(source)告警事件的来源。
      分类(class)告警事件的对象类型,例如:主机。
      服务(service)与业务相关的来源服务,例如:Login Service。
      开始时间(startat)事件开始时间的时间戳。
      结束时间(endat)事件结束时间的时间戳。
      事件地址(generatorUrl)事件详细信息地址。
  7. 设置事件去重。
    为了减少重复数据,系统使用相关字段作为去重依据。ARMS告警管理支持预览事件映射区域中的历史事件数据的去重分组结果,您可根据需要调整去重字段。
    说明 事件去重仅针对未恢复状态下的事件。
    1. 编辑集成页面的事件去重区域选择需要去重的字段。
      当选择的字段的值相同时,对应的多个事件将会合并为一个告警通知。
    2. 单击去重测试,可以预览去重后的告警分组。
      说明 去重测试针对的是事件映射左侧区域中上传的最近10条测试数据。
  8. 配置完成后,单击保存

查看告警事件

  1. 在控制台左侧导航栏选择告警管理 > 告警事件历史
  2. 告警事件历史页面单击目标事件,可以查看告警事件的详细信息。更多信息,请参见查看告警事件历史

管理集成

告警管理 > 集成页面的告警集成页签,对于已经创建的集成,您可以进行以下操作:

  • 查看集成:如果您需要查看集成的详细信息,单击目标集成所在行,在集成详情页面查看集成的详细信息。
  • 更新密钥:如果您需要修改集成的密钥,在目标集成右侧操作列选择更多 > 更新密钥,在弹出的对话框中单击确认

    重要

    更新密钥后,请参考步骤二:配置Nagios告警通知修改脚本文件里的集成地址。

  • 编辑:如果您需要修改集成信息,在目标集成右侧操作列单击编辑,在集成详情页面修改集成信息,然后单击保存
  • 启用或禁用:如果您需要启用或禁用目标集成,在目标集成右侧操作列单击禁用启用
  • 删除:如果您需要删除集成,在目标集成右侧操作列单击删除,在弹出的对话框中单击确认
  • 添加事件流:如果您需要为指定集成添加对应的事件处理流,在目标集成右侧操作列单击添加事件流。具体操作,请参见事件处理流
  • 新建通知策略:如果您需要为指定集成添加对应的通知策略,在目标集成右侧操作列单击新建通知策略。具体操作,请参见通知策略

后续步骤

您可以通过设置通知策略将上报的告警事件生成告警并发送告警通知,具体操作,请参见通知策略。经过通知策略分派后生成的告警可以在告警发送历史页面查看告警的详细信息,更多信息,请参见查看告警发送历史