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 のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

HTML はモバイル上で固定フローティング半透明検索ボックスを実装します

質問。モバイルショッピングモールシステムでは、ページの上部に検索ボックスがよく見られます。ブロガーは...

JS変数ストレージのディープコピーとシャローコピーの詳しい説明

目次可変タイプとストレージスペーススタックメモリとヒープメモリ基本的なデータ型参照タイプグラフィック...

CSS の :focus-within の楽しさについて簡単に説明します

Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...

Mysql-connector-java ドライバのバージョン問題の概要

Mysql-connector-java ドライバのバージョンの問題私のデータベースのバージョンは ...

CSS と JavaScript を使用して管理ダッシュボードのレイアウトを構築するためのサンプル コード

あなたが作成するものこの新しいチュートリアルでは、CSS と JavaScript を使用して、レス...

Navicat for MySQL チュートリアル

まず、Navicat for MySQL をダウンロードしてインストールする必要があります。正規版の...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

MySQL アクティブ-アクティブ同期レプリケーションの 4 つのソリューションの詳細な説明

目次MySQLネイティブレプリケーションに基づくマスター-マスター同期ソリューションGaleraレプ...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

1. ドキュメントフローとフローティング1. ドキュメントフローとは何ですか? HTML では、ドキ...

dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明

問題の起源docker を使用する場合、残念ながら docker コンテナ内のホストのポート 80 ...

IIS 7.5では、HTMLはSHTMLのようなinclude関数(モジュールマッピングの追加)をサポートします。

最初はたくさんのエラーを見つけましたが、実際には非常に簡単です。shtm の元の設定を参照するだけで...

JavaScript ES6 分割演算子の理解と応用

目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...

Linux で毎日データベースの自動バックアップを設定する方法

この記事では、Centos7.6 システムと Oracle11g を例に挙げます。 1. まずデータ...

Linux でコマンドまたはプロセスの実行時間を調べる方法

Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...