kWatanabe 記事一覧へ

kWatanabe の 技術帖

某企業でOSや仮想化の研究をやっているインフラ系エンジニア。オンプレとクラウドのコラボレーションなど、興味ある技術を綴る。

Zabbixで任意のWebサイトの更新を監視する

  • ZabbixのHTTPエージェントで、Webサイトの更新を監視させる
  • 更新があれば、Slack で通知を投げて貰い、日々のWebサイトの巡回を省力化する

日々のWebサイト巡礼を機械に任せたい

デジタル世界にどっぷり浸かった kWatanabe は、株価情報とか、某ワクチンの予約サイトとか、いくつかのWebサイトの更新を日々確認している。毎日更新されるものなら良いけども、立会外分売の情報のようにそうとは限らないものも多い。

意味の無いルーチンワークはできるだけ機械に任せてしまい、人間様はもっと実になることに時間を使いたい。

Zabbix にWebサイトを監視させる

Zabbix はシステム監視ツールのひとつで、サーバやサービスの負荷状況や障害、その兆候となる事象を監視し、その結果を通知できる。

www.zabbix.com

Zabbix 3.x 以前は、サーバ本体やネットワークなどの機材の監視が主な機能だったが、Zabbix 4.0 以降ではシステムのクラウド化・API化に伴い、監視も通知も Web サービスを意識したものが実装されている。

この中での「HTTPエージェント」と「Slack通知」を使って、手軽にWebサイトの監視システムを構築できる*1

検証

ここでは、最もシンプルに「何でもいいのでWebサイトが更新されていたら Slack へ通知」する場合を考える*2。対象は、現在、日本でホットなWebサイトと思われる自衛隊の某ワクチン接種に関するサイトを監視してみる。

www.mod.go.jp

検証環境

Zabbixのインストール・Slackアカウントの作成は割愛。

Slack にアクセスするための権限を設定

Slack のアカウントから、ディベロッパー用サイトにアクセスする。

api.slack.com

「Create New App」→「From Scratch」を押下し、アプリの名称と連携させるSlack Workspaceを選択する。

アプリが作成されたら、「アプリ名」→「Basic Information」→「Add features and functionality」を押下して、Bots を選択する。

「OAuth & Permissions」→「Scopes」→「Add an Oauth Scope」を押下して、chat: write を追加する。その後、「OAuth Tokens for Your Workspace」の「Bot User OAuth Token」の「Copy」を押下し、テキトーなファイルに貼り付けておく。

Slack に通知用チャンネルを作成

Slack にログインし、Zabbix からの通知を受け取るためのチャンネルを作成する。名前は必ず英数字のみにする。

その後、チャンネルを右クリック「チャンネル詳細を開く」→「インテグレーション」→「App」→「アプリを追加する」を押下して、作成したアプリを登録する。

Slack 通知の設定

Zabbix の画面で「管理」→「メディアタイプ」→「Slack」→一番下の「複製」を押下し、以下を入力する。

  • 名前:Slack以外の任意の名前(ここでは、Slack (Simple)
  • bot_token:Slackからコピーした「Bot User OAuth Token」の値
  • event_opdata:適当な文字列
    • 本来は、取得したデータを挿入するマクロが登録されているが、64KBを超えるとSlackへの投稿に失敗するため、テキトーな値に置き換えておく。

問題なければ「追加」を押下する。

登録されたメディアの右端にある「テスト」リンクを押下し、以下を入力した後に「テスト」ボタンを押下する。

  • channel:追加したSlackチャンネル名
  • event_id:1
  • event_source:1
  • zabbix_url:ZabbixのトップページのURL

ここまでの設定が問題なければ、Slack経由でテスト通知が送られてくるはず。

f:id:kWatanabe:20210810121641p:plain
ZabbixからのSlack通知

f:id:kWatanabe:20210810121752p:plain
ZabbixからのSlack投稿

テストで問題なければ、「管理」→「ユーザ」→利用しているZabbixユーザ→「メディア」で以下を入力し、「追加」を押下する。

  • タイプ:追加したメディア(ここでは、Slack (Simple)
  • 送信先:追加したSlackチャンネル名

Webサイトの監視の設定

Zabbixの画面から、「設定」→「ホスト」→「Zabbix server」→「アイテム」→「アイテムの作成」を選択。

以下のパラメータを入力する。

  • 名前:わかりやすい任意の名前(ここでは、自衛隊ワクチン更新
  • タイプ:HTTPエージェント
  • キー:わかりやすい英数字の名前(ここでは、jgsdf_vaccine
  • URL:監視対象のWebページのアドレス
  • 監視間隔:情報を点検する時間間隔(ここでは、30m)
    • 人力で行ったとしても不自然ではない程度にする。
    • 高頻度での監視は、BANされる可能性もある。また、「前回の監視結果から変化があった」ことを判断基準とするため、短く設定しすぎるとすぐ「解決」状態になってしまい、訳が分からなくなる。
  • データ型:テキスト
  • ヒストリの保存期間:14d
  • 有効:チェックする

f:id:kWatanabe:20210810113525p:plain
アイテムの登録例

設定できたら、「テスト」→「値の取得とテスト」を押下して、「結果」欄にWebサイトのソースが表示されることを確認する。問題なければ「キャンセル」した後、「監視データ取得」と「追加」を押下する。

監視と通知を紐付ける設定

Zabbixの画面から、「設定」→「ホスト」→「Zabbix server」→「トリガー」→「トリガーの作成」を選択。

以下のパラメータを入力し、「追加」を押下する。

  • 名前:わかりやすい任意の名前(ここでは、自衛隊ワクチン更新
  • 深刻度:情報
  • 条件式:「追加」ボタンを押下して、以下を入力
    • アイテム:作成したアイテム(ここでは、Zabbix server: 自衛隊ワクチン更新
    • 関数:change() - 最新値と前回値との差分
    • 結果:<>0

再び、「設定」→「ホスト」→「Zabbix server」→「アイテム」を選択し、作成したアイテムを探し、「トリガー」にトリガー1が表示されており、クリックすると作成したトリガーが表示されることを確認する。

f:id:kWatanabe:20210810124207p:plain
アイテムとトリガーの紐付け

最後に、Zabbixの画面から、「設定」→「アクション」→「トリガーアクション」→「アクションの作成」を押下して、以下を入力し、「追加」を押下する。

  • 「アクション」タブ
    • 名前:わかりやすい任意の名前(ここでは、Report problems to Slack (Simple)
    • 計算のタイプ:Or
    • 実行条件の「追加」を押下して以下を入力
      • タイプ:トリガー
      • オペレータ:等しい
      • トリガー:作成したトリガー(ここでは、Zabbix server: 自衛隊ワクチン更新
    • 有効:チェックする
  • 「実行内容」タブ
    • 実行内容の「追加」を押下して以下を入力
      • ユーザに送信:Slack通知の設定で登録したZabbixユーザ
      • 次のメディアのみ使用:追加したメディア(ここでは、Slack (Simple)

結果

上記の設定が全て完了していれば、Webページの更新されると以下のような通知が Slack にやってくる。

f:id:kWatanabe:20210810131420p:plain
更新通知

これで、人間様はWebサイトに貼りつきになって無駄な時間を浪費することなく、もっと実のあるステキな時間をすごすことができるようになる。

なお、本ブログは全体を通じて無保証です!

*1:本来のZabbixの使い方としては、おおいに間違っている気がしないでもない。

*2:設定を作り込めば、取得した情報を加工して「特定の箇所がこのように変化した場合に通知」なども実現できる。