<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      新手必備!Zabbix接入動環并監控教程

      本指南將手把手教您如何通過API將動環系統接入Zabbix監控平臺,實現機房環境7×24小時智能監控。即使您是Zabbix新手,也能在1小時內完成基礎監控。

      一、為什么要將動環系統接入Zabbix?

      動環系統(動力環境監控系統)負責監測機房的:

      • 溫度/濕度 ??
      • 電力供應 ?
      • 空調運行 ??
      • 安防狀態 ??
      • 漏水檢測 ??

      傳統監控痛點

      1、 獨立系統需要單獨登錄查看

      2、 告警分散在不同平臺

      3、 歷史數據難以分析

      4、 無法與其他IT設備聯動監控

      二、接入Zabbix的核心優勢

       

      • 消除監控孤島:將動環數據與其他IT設備(服務器/網絡/存儲)統一監控
      • 單點管理:一個控制臺查看所有基礎設施狀態
      • 統一權限體系:復用現有賬號權限管理系統

      三、如何進行監控?

      腳本功能概述

      Python腳本實現了從動環系統獲取設備數據并自動發送到Zabbix監控平臺的完整流程。主要功能包括:

      1. 登錄動環系統獲取認證會話

      2. 查詢指定設備ID的監控數據

      3. 將數據寫入臨時文件

      4. 使用zabbix_sender工具發送數據到Zabbix服務器

      環境準備

      1. 安裝Python 3.x

      2. 安裝必要的Python庫:

      pip install requests

      3. 確保zabbix_sender工具已安裝并可用

       

      1、下面是一個示例動環監控的整個流程圖

       

      請求登錄獲取會話的接口時,會返回一個PHPSESSID(分別對應著動環系統里不通的設備名),在根據獲取到的ID去請求數據,每個動環系統的請求方式都不一定是一樣的,可以具體根據對應產商提供的API接口說明文檔去進行適配。下面是我獲取的ID并做了映射,會根據清晰明了。

       

      2、通過動環提供的API接口獲取到的ID讀取的數據,下面是一個示例

       

      3、把獲取的到數據進行調整最終輸出為一個臨時文本文件,然后在通過zabbix_sender把數據根據對應給予的鍵值推送到平臺對應的zabbix采集器監控項中,推送的鍵值要和監控項的創建的鍵值一致,具體可以參考網上的zabbix采集器監控項運用教程。

      四、使用步驟,下面是一個參考腳本,僅供參考!

      1. 執行腳本

      python3 donghuan_to_zabbix.py <username> <password> <dev_ip> <dev_name> getnodes

      參數說明:

      • <username>: 動環系統登錄用戶名
      • <password>: 動環系統登錄密碼
      • <dev_ip>: 動環系統服務器IP地址
      • <dev_name>: Zabbix中配置的主機名稱

      2. 示例執行命令

      python3 donghuan_to_zabbix.py admin password123 192.168.1.100 Donghuan_Main getnodes

       

          import requests

          import subprocess

          import json

          import os

          import sys

       

          # 配置

          IDS = [1594, 1598, 1595, 1586, 1598, 1593, 1596, 1591, 1599, 1589]

          KEY_PREFIX = "device.data."

          TEMP_DIR = "/tmp/donghuan"

          AUTO_DISCOVERY_FILE = os.path.join(TEMP_DIR, "zabbix_auto_discovery.json")

       

          # 設備ID與名稱的映射

          DEVICE_NAMES = {

              1586: "1號精密空調",

              1589: "2號配電柜",

              1591: "2號精密空調",

              1593: "3號精密空調",

              1594: "3號配電柜",

              1595: "市電輸入",

              1596: "環境監控",

              1598: "UPS主機",

              1599: "1號配電柜"

          }

       

          def login_and_get_session(dev_ip, username, password):

              """登錄服務器并返回會話對象"""

              login_url = f"http://{dev_ip}/action/ajax/login_ajax.php"

              session = requests.Session()

              response = session.get(login_url, params={"uname": username, "pwd": password, "checked": "1"})

              if response.status_code == 200:

                  cookies = session.cookies.get_dict()

                  if "PHPSESSID" in cookies:

                      print("登錄成功,已獲取PHPSESSID。")

                      return session

              print("登錄失敗。")

              exit(1)

       

          def fetch_device_data(session, dev_ip, device_id):

              """獲取特定設備ID的數據"""

              data_url = f"http://{dev_ip}/action/devicePage/ajaxGetData.php?id={device_id}"

              response = session.get(data_url)

              if response.status_code == 200:

                  data = response.json().get('datas', {})

                  if data:

                      return {

                          "updatetime": data.get('rd_updatetime', ""),

                          "innertemp": data.get('rd_air_innertemp', ""),

                          "innerhum": data.get('rd_air_innerhum', ""),

                          "state": data.get('rd_air_state', ""),

                          "temp_alarm": data.get('rd_air_temphalarm', "0"),  # 溫度報警

                          "hum_alarm": data.get('rd_air_humhalarm', "0"),    # 濕度報警

                          "temp_setpoint": data.get('rd_air_tempsetpoint', ""),

                          "hum_setpoint": data.get('rd_air_humsetpoint', "")

                      }

              print(f"獲取ID為{device_id}的設備數據失敗")

              return None

       

          def write_device_data_to_file(device_name, device_data):

              """將設備數據寫入文件,以設備名稱命名文件"""

              if not os.path.exists(TEMP_DIR):

                  os.makedirs(TEMP_DIR)

       

              file_path = os.path.join(TEMP_DIR, f"{device_name}.txt")  # 使用設備名稱命名文件

              with open(file_path, 'w') as f:

                  json.dump(device_data, f, indent=4, ensure_ascii=False)

              return file_path

       

          def process_and_send_data(file_path, dev_name, device_id):

              """處理數據并發送到Zabbix"""

              with open(file_path, 'r') as f:

                  device_data = json.load(f)

       

              zabbix_commands = [

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}updatetime[{device_id}] -o {device_data['updatetime']}",

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}innertemp[{device_id}] -o {device_data['innertemp']}",

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}innerhum[{device_id}] -o {device_data['innerhum']}",

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}state[{device_id}] -o {device_data['state']}",

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}temp_alarm[{device_id}] -o {device_data['temp_alarm']}",  # 溫度報警

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}hum_alarm[{device_id}] -o {device_data['hum_alarm']}",    # 濕度報警

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}temp_setpoint[{device_id}] -o {device_data['temp_setpoint']}",  # 溫度設定值

                  f"zabbix_sender -z {dev_name} -s {dev_name} -k {KEY_PREFIX}hum_setpoint[{device_id}] -o {device_data['hum_setpoint']}"   # 濕度設定值

              ]

       

              for command in zabbix_commands:

                  subprocess.run(command, shell=True, check=True)

       

          def main():

              if len(sys.argv) < 5:

                  print("用法: script.py <username> <password> <dev_ip> <dev_name> <action>")

                  sys.exit(1)

       

              username = sys.argv[1]

              password = sys.argv[2]

              dev_ip = sys.argv[3]

              dev_name = sys.argv[4]

              action = sys.argv[5]

       

              session = login_and_get_session(dev_ip, username, password)

       

              if action == 'getnodes':

                  for device_id in IDS:

                      # 獲取設備名稱

                      device_name = DEVICE_NAMES.get(device_id)

                      if not device_name:

                          print(f"設備ID {device_id} 無對應名稱,跳過此設備。")

                          continue

       

                      device_data = fetch_device_data(session, dev_ip, device_id)

                      if not device_data:

                          continue

       

                      # 將設備數據寫入文件,以設備名稱命名

                      file_path = write_device_data_to_file(device_name, device_data)

                      process_and_send_data(file_path, dev_name, device_id)

       

          if __name__ == "__main__":

              main()

      更多zabbix技術資料可以關注樂維社區

      posted @ 2025-06-11 14:59  樂維_lwops  閱讀(77)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品九九人人做人人爱| 日韩精品射精管理在线观看| 99热精品毛片全部国产无缓冲| 午夜福利理论片高清在线| 精品无码国产日韩制服丝袜| 日韩欧美aⅴ综合网站发布| 国产国产午夜福利视频| 中文字幕第一页亚洲精品| 人妻中文字幕亚洲精品| 亚洲第一国产综合| 茌平县| 国产美女深夜福利在线一| 亚洲精品国产av成人网| 国产95在线 | 欧美| 亚洲AV永久中文无码精品综合| 日本韩国日韩少妇熟女少妇| 亚洲日韩AV秘 无码一区二区| 99精品人妻少妇一区| 欧美亚洲另类自拍偷在线拍| 2021国产精品视频网站| 无码av免费毛片一区二区| 亚洲精品中文综合第一页| 4399理论片午午伦夜理片| 亚洲av成人无码精品电影在线| 亚洲一区中文字幕第十页| 国产91午夜福利精品| 亚洲精品动漫免费二区| 国产亚洲av手机在线观看| 欧美成人性色一区欧美成人性色区 | 阿尔山市| 午夜爽爽爽男女污污污网站| 人妻一区二区三区三区| 久久久久无码国产精品一区| 国产仑乱无码内谢| 色吊丝二区三区中文字幕| 这里只有精品在线播放| 色综合久久久久综合体桃花网| 国产边打电话边被躁视频| 午夜精品久久久久久久2023| 国产综合久久99久久| 人人妻人人狠人人爽|