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の実装

推薦する

Vue3 プロジェクトで WeChat 認証ログインをエレガントに実装する方法

目次序文準備する実装のアイデアコードについて要約する序文WeChat 認証ログインは、WeChat ...

クリエイティブな会社概要ウェブページデザイン

ユニークな「About」ページ自分を他の人たちと差別化する素晴らしい方法は、本当にユニークな自己紹介...

Vue エクスポート Excel 機能の全プロセス記録

目次1. フロントエンドのリーディングプロセス: 2. プラグインの使用と初期化2.1 vue-ad...

88 秒で 1,000 万件のレコードを MySQL データベース テーブルに挿入する方法

私が使用しているデータベースはMySQLデータベースバージョン5.7ですまずデータベーステーブルを自...

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

CentOS での MySQL ワークベンチのインストールと設定のチュートリアル

この記事では、MySQL Workbenchのインストールと設定のチュートリアルを参考までに紹介しま...

CSS3 を使用してピカチュウのアニメーション壁紙を作成する例

文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...

Vueのメソッドとプロパティの詳細な説明

Vueのメソッドとプロパティ1. 方法使用法 1メソッド: {メソッド名: function(){}...

Linux dirnameコマンドの具体的な使い方

01. コマンドの概要dirname - ファイル名からディレクトリ以外のサフィックスを削除しますd...

JavaScript カラービューア

この記事では、カラービューアを実装するためのJavaScriptの具体的なコードを参考までに紹介しま...

Docker を使用して Django プロジェクトをデプロイする方法の例

また、Dockerを使用してDjangoプロジェクトをデプロイするのも非常に簡単です。とても良いです...

CSS 境界線の長さ制御機能の実装

以前は、境界線の長さをコンテナーよりも小さくする必要があったときに、div ネストを使用していました...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

Linux サーバーに SSH パスワードなしでログインする方法

テスト サーバーにログインするたびに、必ず ssh ログインのパスワードを入力する必要があります。ロ...

Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します

iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...