全部產品
Search
文件中心

Application Real-Time Monitoring Service:整合Nagios

更新時間:Jul 06, 2024

本文介紹如何在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警示通知修改指令檔裡的整合地址。

  • 編輯:如果您需要修改整合資訊,在目的地組成右側操作列單擊編輯,在整合詳情頁面修改整合資訊,然後單擊儲存
  • 啟用或禁用:如果您需要啟用或禁用目的地組成,在目的地組成右側操作列單擊禁用啟用
  • 刪除:如果您需要刪除整合,在目的地組成右側操作列單擊刪除,在彈出的對話方塊中單擊確認
  • 添加事件流:如果您需要為指定整合添加對應的事件處理流,在目的地組成右側操作列單擊添加事件流。具體操作,請參見事件處理流
  • 建立通知策略:如果您需要為指定整合添加對應的通知策略,在目的地組成右側操作列單擊建立通知策略。具體操作,請參見通知策略

後續步驟

您可以通過設定通知策略將上報的警示事件產生警示並發送警示通知,具體操作,請參見通知策略。經過通知策略指派後產生的警示可以在警示發送歷史頁面查看警示的詳細資料,更多資訊,請參見查看警示發送歷史