Zabbix は DingTalk のアラーム機能を画像付きで設定します

Zabbix は DingTalk のアラーム機能を画像付きで設定します

実装のアイデア:

まず、アラーム情報にはitemidが必要です。これは前提条件です。情報に渡されるパラメータに応じて、itemidに通常のマッチングを使用してセッションを構築するか、Cookieを使用してログインします。itemidに応じて写真をリクエストし、取得した写真をローカルに保存します。マークダウン画像リンクにアクセスできる必要があるため、私のzabbixはイントラネット内にあるため、画像はイメージベッドまたはパブリックネットワークIPを持つWebサーバーにアップロードする必要があります。ここでは個人用サーバーにアップロードしました。アラーム情報をマークダウン構文形式に変換してリクエストを構築します。DingTalkのWebhookを使用してメッセージを送信し、DingTalkロボットを設定します

DingTalk ロボットはセキュリティのために設定する必要があります。ここでは、キーワード「通知」を定義します。これは、送信されるメッセージにこのキーワードが含まれている必要があることを意味します。

スクリプトの実装: ローカルからリモートにイメージをコピーする必要があるため、事前にパスワードフリーの設定を行う必要があります。スクリプトは zabbix ユーザーによって実行されます。Web サーバー ディレクトリのセキュリティ ポリシーを設定するのが最適です。

#!/usr/bin/python
# -*- コーディング: utf-8 -*-
インポート要求、時間
json、sys、re、os をインポートします

zabbixserver_url = 'http://192.168.99.200/index.php'
#リモート Web サーバーのアドレスを定義し、画像をリモート Web ディレクトリにコピーします。pname_path='http://47.103.15.51/dingding_pic/'
#取得した画像アドレスを定義します testUrl = "http://192.168.99.200/chart.php"
ホスト='192.168.99.200'
get_itemid() を定義します:
  itemid=re.search(r'アイテムID:(\d+)',sys.argv[2]).group(1)
  アイテムIDを返す
def get_picture(itemid,pname):
  #セッションを構築するか、一度構築してからクッキーを使用してログインすることもできます。myRequests = requests.Session()
  試す:
    ログインヘッダー = {
      「ホスト」:ホスト、      
      「承認」:"text/html、application/xhtml+xml、application/xml;q=0.9、image/webp、image/apng、*/*;q=0.8" 
    }
    # ログインに必要な情報を構築する playLoad = {
      "名前": "管理者",
      「パスワード」: 'zabbix',
      "自動ログイン": "1",
      "enter": "サインイン",
    }
    myRequests.post(url=zabbixserver_url、ヘッダー=loginHeaders、データ=playLoad)
    テストURL再生ロード = {
      "から": "現在から10分",
      「〜へ」:「今」、
      "アイテムid": アイテムid、
      "幅": "700",
    }
    testGraph = myRequests.get(url=testUrl,params=testUrlplayLoad)
    イメージパス = os.path.join('/usr/lib/zabbix/alertscripts/dingding_pic/', pname)
    #取得した画像データを open(IMAGEPATH,'wb') としてファイルに書き込みます (f:
      f.write(テストグラフのコンテンツ)
    os.system("sudo scp %s [email protected]:/usr/share/nginx/html/dingding_pic" %IMAGEPATH) 
    pname_url = pname_path+pname
    pname_urlを返す
  except 例外を e として:
    印刷する
    Falseを返す

#メッセージを送信するリクエストを構築します def send_msg(pname_url,info3):
  ヘッダー = {'Content-Type': 'application/json; charset=utf-8'}
  印刷(情報3)
  データ = {
    "メッセージタイプ": "マークダウン",
    「マークダウン」: {
      「タイトル」: 情報1,
      "text": "## 通知:\n"+info3+"![スクリーンショット](%s)\n"%(pname_url)

    },
    "で":{
      「atMobiles」:リマインダー、
      "isAtAll": False、
    },
    }
  r = リクエスト.post(url=webhook_url,json=data,headers=ヘッダー)
  印刷(r.text)
#アラーム情報をフォーマットする def info_text():
  新しいテキスト = ""
  x = info2.split('\n')
  i が x 内にある場合:
    re.search('ITEM ID',str(i))の場合:
      合格
    それ以外:
      新しいテキスト+="- "+str(i)+('\n')
  印刷(タイプ(新しいテキスト)) 
  新しいテキストを返す

__name__ == '__main__' の場合:
  # アラーム情報をログに書き込みます os.system("echo hello >> /tmp/syslog.md")  
  pname = str(int(time.time()))+'.png'
  info1 = str(sys.argv[1])
  info2 = str(sys.argv[2])
  情報3 = 情報テキスト()

  open('/tmp/syslog.md','a') を f として実行します:
    f.write(情報1)
    f.write(情報2)
    f.close()
  リマインダー = []
  webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=771ded387e6be652c51a2b6c83cade4e048e3da4fdfe128f1db6b124b87df18a'
  アイテムid = get_itemid()   
  pname_url=get_picture(itemid,pname)
  印刷(pname_url)
  送信メッセージ(pname_url,info3)

アラームメディアタイプを定義します。ZabbixモニタリングWebを開き、管理メニューでアラームメディアタイプを選択し、メディアタイプの作成、スクリプトを選択し、先ほど書いた画像付きメールスクリプトの名前、zabbix_email_pic.py、スクリプトパラメータを入力し、最後に追加します。

管理画面でユーザーを開き、メールアラートを設定するユーザーをクリックし、アラームメディアにアラームメディアを追加し、ポップアップボックスで定義したタイプを選択し、受信者をカスタマイズして、最後に追加します。

アラートアクションの定義

設定メニューのアクションをクリックしてアクションを作成し、画像に従って入力します。

アクション デフォルト タイトル Zabbix 通知: サーバー: {HOSTNAME} に: {TRIGGER.NAME} 障害が発生しました。
アイテムID:{ITEM.ID}
アラームホスト:{HOST.NAME}
アラームホスト:{HOST.IP}
アラーム時刻: {EVENT.DATE} {EVENT.TIME}
アラーム レベル:{TRIGGER.SEVERITY}
警告情報: {TRIGGER.NAME}
アラーム項目:{TRIGGER.KEY}
質問の詳細:{ITEM.NAME}:{ITEM.VALUE}
現在のステータス:{TRIGGER.STATUS}:{ITEM.VALUE}
イベント ID: {EVENT.ID}
回復操作 Zabbix が報告しました: サーバー: {HOST.NAME} が発生しました: {TRIGGER.NAME} が復元されました!
アイテムID:{ITEM.ID}
アラームホスト:{HOST.NAME}
アラームホスト:{HOST.IP}
アラーム時刻: {EVENT.DATE} {EVENT.TIME}
アラーム レベル:{TRIGGER.SEVERITY}
警告情報: {TRIGGER.NAME}
アラーム項目:{TRIGGER.KEY}
質問の詳細:{ITEM.NAME}:{ITEM.VALUE}
現在のステータス:{TRIGGER.STATUS}:{ITEM.VALUE}
イベント ID: {EVENT.ID} 



最終結果

手動でアラームを鳴らして効果をテストすることができます


この時点で、Zabbix の WeChat、電子メール、および DingTalk アラームの画像が設定されました。

要約する

以上が、画像アラーム機能を備えたZabbix設定DingTalkの編集者による紹介です。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残してください。編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • Zabbix3.0 電子メールアラーム設定
  • Python スクリプトを使用して Zabbix でアラーム メールを送信する方法
  • ZabbixがWeChatアラーム機能を実装
  • WeChatアラームZabbix実装の詳細な説明
  • Zabbix メールアラーム設定方法

<<:  MySQL でデータ テーブルを作成し、主キーと外部キーの関係を確立する方法の詳細な説明

>>:  ローカルサーバーを構築するためのwebpack-dev-serverの実装

推薦する

MySQL での IN データボリュームの使用の最適化された記録

MySQL のバージョン番号は 5.7.28 です。テーブル A には 390 万件のレコードがあり...

HTML ページ共通スタイル (推奨)

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピーbody、di...

MySQL複合クエリの詳細な説明

UNIONの使用ほとんどの SQL クエリは、1 つ以上のテーブルからデータを返す単一の SELEC...

JavaScriptはランダムコードの生成と検証を実現する

JavaScriptでのランダムコードの生成と検証は参考までに。具体的な内容は以下のとおりです。イベ...

MySQL クエリ フィールド タイプが json の場合の 2 つのクエリ メソッド

テーブル構造は次のとおりです。 id varchar(32) 情報JSONデータ: id = 1 i...

MySQL の同時実行性の問題と解決策の分析

目次1. 背景2. テーブルロックによるクエリの遅延3. オンラインでテーブル構造を変更するとどのよ...

入力ボックスのカーソルサイズの表示が一貫していない問題の解決方法

入力ボックス内のカーソルのサイズが一定ではありませんIE7とChromeの違いは非常に明白ですまず、...

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例

Mybatis ページングプラグイン pageHelper の詳細な説明と簡単な例動作フレームワーク...

JavaScriptオフセットは、ウィンドウ内でのマウス座標の取得とモジュールのドラッグを実装します。

オフセットOffset はオフセットです。関連プロパティの offset シリーズを使用すると、次の...

Linuxファイルコマンドの使用

1. コマンドの紹介ファイル コマンドは、ファイルの種類を識別するために使用されます。ファイル チェ...

純粋な CSS3 を使用して、円の動的な光る特殊効果アニメーションを実装するためのサンプル コード

この記事では、主に、円形のダイナミックな光る特殊効果アニメーションを実現するための純粋な CSS3 ...

ウェブデザインにおけるカラーマッチングの優れた例30選

本日は、色彩の応用に関する優れた事例を 30 件集めて、皆さんにご紹介したいと思います。これらの事例...

優れたWebフォームデザイン事例20選

ソフィー・ハルダッククライドキー埠頭 37 東ソープボックス Rxバランス EEハーバー対比 SVN...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...