> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashcat.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Nagios 告警事件

> 通过 webhook 的方式同步 Nagios 告警事件到 Flashduty，实现告警事件自动化降噪处理

<div className="hide">
  ## 在 Flashduty On-call

  ***

  您可通过以下2种方式，获取一个集成推送地址，任选其一即可。

  ### 使用专属集成

  当您不需要将告警事件路由到不同的协作空间，优先选择此方式，更简单。

  <AccordionGroup>
    <Accordion title="展开">
      1. 进入 Flashduty 控制台，选择 **协作空间**，进入某个空间的详情页面
      2. 选择 **集成数据** tab，点击 **添加一个集成**，进入添加集成页面
      3. 选择 **Nagios** 集成，点击 **保存**，生成卡片。
      4. 点击生成的卡片，可以查看到 **推送地址**，复制备用，完成。
    </Accordion>
  </AccordionGroup>

  ### 使用共享集成

  当您需要根据告警事件的 Payload 信息，将告警路由到不同的协作空间，优先选择此方式。

  <AccordionGroup>
    <Accordion title="展开">
      1. 进入 Flashduty 控制台，选择 **集成中心=>告警事件**，进入集成选择页面。
      2. 选择 **Nagios** 集成：
         * **集成名称**：为当前集成定义一个名称。
      3. 配置默认路由，并选择对应的协作空间（集成创建后可以前往 `路由` 进行更多路由规则的配置）。
      4. 点击 **保存** 后，复制当前页面的新生成的 **推送地址** 备用。
      5. 完成。
    </Accordion>
  </AccordionGroup>
</div>

## 在 Nagios

***

<div className="md-block">
  不同的系统和安装方式，Nagios 的安装路径可能不同，请根据实际情况调整以下配置中的路径。

  ### 一、下载通知脚本

  登录 Nagios Server 所在服务器，下载通知脚本到 Nagios 插件目录：

  * **Debian/Ubuntu 系统**（通常为 `/usr/lib/nagios/plugins/`）：

  ```bash theme={null}
  cd /usr/lib/nagios/plugins/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/send_to_flashduty.sh
  chmod +x send_to_flashduty.sh
  ```

  * **RHEL/CentOS 系统**（通常为 `/usr/lib64/nagios/plugins/`）：

  ```bash theme={null}
  cd /usr/lib64/nagios/plugins/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/send_to_flashduty.sh
  chmod +x send_to_flashduty.sh
  ```

  * **源码安装**（通常为 `/usr/local/nagios/libexec/`）：

  ```bash theme={null}
  cd /usr/local/nagios/libexec/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/send_to_flashduty.sh
  chmod +x send_to_flashduty.sh
  ```

  <Note>脚本中使用了 `curl` 命令，请确保 Nagios Server 上已安装 curl。</Note>

  ### 二、创建 Flashduty 配置文件

  下载 Flashduty 配置文件到 Nagios 配置目录：

  * **Debian/Ubuntu 系统**（通常为 `/etc/nagios3/conf.d/`）：

  ```bash theme={null}
  cd /etc/nagios3/conf.d/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/flashduty.cfg
  ```

  * **RHEL/CentOS 系统**（通常为 `/etc/nagios/objects/`）：

  ```bash theme={null}
  cd /etc/nagios/objects/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/flashduty.cfg
  ```

  * **源码安装**（通常为 `/usr/local/nagios/etc/objects/`）：

  ```bash theme={null}
  cd /usr/local/nagios/etc/objects/
  wget --header="Referer: https://console.flashcat.cloud" https://download.flashcat.cloud/flashduty/integration/nagios/flashduty.cfg
  ```

  ### 三、修改配置文件

  编辑下载的 `flashduty.cfg` 文件，修改以下内容：

  1. 将 `pager` 字段的值替换为你在 Flashduty 控制台获取的集成推送地址
  2. 根据你的 Nagios 安装路径，修改 `command_line` 中脚本的路径

  配置文件内容示例：

  ```
  define contact {
      contact_name                    Flashduty
      alias                           Flashduty Alert Receiver
      service_notification_commands   notify-service-by-Flashduty
      host_notification_commands      notify-host-by-Flashduty
      service_notification_options    w,u,c,r
      host_notification_options       d,u,r
      service_notification_period     24x7
      host_notification_period        24x7
      pager                           <YOUR_FLASHDUTY_PUSH_URL>
  }

  define command {
      command_name    notify-host-by-Flashduty
      command_line    <NAGIOS_PLUGIN_PATH>/send_to_flashduty.sh type=HOST WEBHOOK_URL="$CONTACTPAGER$" hostname="$HOSTNAME$" state="$HOSTSTATE$" output="$HOSTOUTPUT$" notification_type="$NOTIFICATIONTYPE$" time="$LONGDATETIME$" host_address="$HOSTADDRESS$" host_alias="$HOSTALIAS$" check_command="$HOSTCHECKCOMMAND$"
  }

  define command {
      command_name    notify-service-by-Flashduty
      command_line    <NAGIOS_PLUGIN_PATH>/send_to_flashduty.sh type=SERVICE WEBHOOK_URL="$CONTACTPAGER$" hostname="$HOSTNAME$" state="$SERVICESTATE$" output="$SERVICEOUTPUT$" notification_type="$NOTIFICATIONTYPE$" time="$LONGDATETIME$" host_address="$HOSTADDRESS$" service_desc="$SERVICEDESC$" host_alias="$HOSTALIAS$" max_attempts="$MAXSERVICEATTEMPTS$"
  }
  ```

  参数说明：

  * `pager`：Flashduty 推送地址，即你在 Flashduty 控制台获取的集成推送地址
  * `<NAGIOS_PLUGIN_PATH>`：需要替换为实际的脚本路径，如 `/usr/local/nagios/libexec`
  * `service_notification_options`：服务告警通知选项，w=警告，u=未知，c=严重，r=恢复
  * `host_notification_options`：主机告警通知选项，d=宕机，u=不可达，r=恢复

  <Tip>如需在告警中携带更多信息，可以在 `command_line` 末尾按照 `key=value` 格式追加参数，例如：`environment="production" region="$_HOSTREGION$"`。这些参数将作为标签（labels）推送到 Flashduty。</Tip>

  ### 四、引入配置文件

  如果你使用的是 **RHEL/CentOS 系统** 或 **源码安装**，需要在 Nagios 主配置文件中引入 Flashduty 配置文件。

  * **RHEL/CentOS 系统**：编辑 `/etc/nagios/nagios.cfg`，添加：

  ```
  cfg_file=/etc/nagios/objects/flashduty.cfg
  ```

  * **源码安装**：编辑 `/usr/local/nagios/etc/nagios.cfg`，添加：

  ```
  cfg_file=/usr/local/nagios/etc/objects/flashduty.cfg
  ```

  <Note>Debian/Ubuntu 系统通常会自动加载 `/etc/nagios3/conf.d/` 目录下的所有配置文件，无需手动引入。</Note>

  ### 五、将 Flashduty 添加到联系人组

  编辑联系人配置文件，将 Flashduty 联系人添加到 `admins` 联系人组（或你使用的其他联系人组）：

  * **Debian/Ubuntu 系统**：编辑 `/etc/nagios3/conf.d/contacts_nagios2.cfg`
  * **RHEL/CentOS 系统**：编辑 `/etc/nagios/objects/contacts.cfg`
  * **源码安装**：编辑 `/usr/local/nagios/etc/objects/contacts.cfg`

  找到联系人组定义，将 Flashduty 添加到成员列表：

  ```
  define contactgroup {
      contactgroup_name       admins
      alias                   Nagios Administrators
      members                 nagiosadmin,Flashduty
  }
  ```

  ### 六、验证配置并重启服务

  1. 验证 Nagios 配置文件：

  * **Debian/Ubuntu 系统**：

  ```bash theme={null}
  /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg
  ```

  * **RHEL/CentOS 系统**：

  ```bash theme={null}
  /usr/sbin/nagios -v /etc/nagios/nagios.cfg
  ```

  * **源码安装**：

  ```bash theme={null}
  /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
  ```

  2. 如果验证通过，重启 Nagios 服务：

  ```bash theme={null}
  # Debian/Ubuntu
  systemctl restart nagios3

  # RHEL/CentOS/源码安装
  systemctl restart nagios
  ```

  3. 完成配置后，当 Nagios 检测到告警时，将自动推送到 Flashduty。
</div>

## 状态对照

***

<div className="md-block">
  Nagios 到 Flashduty 告警等级映射关系：

  | Nagios      | Flashduty | 状态 |
  | ----------- | --------- | -- |
  | CRITICAL    | Critical  | 严重 |
  | DOWN        | Critical  | 严重 |
  | UNREACHABLE | Critical  | 严重 |
  | WARNING     | Warning   | 警告 |
  | OK          | Ok        | 恢复 |
  | UP          | Ok        | 恢复 |
  | UNKNOWN     | Info      | 提醒 |
</div>
