Zabbix 4.0のHTTP agentを使って遊ぶ

この記事は、弊社[リンク情報システム](https://www.lis.co.jp/)が主催する「[アドベントカレンダー](https://qiita.com/advent-calendar/2018/lis)」のリレー記事です。
[アドベントカレンダー](https://qiita.com/advent-calendar/2018/lis)は engineer.hanzomon なる怪しいグループのメンバによってリレーされます。

本記事は15日目、12/15(土)分です。ちなみに本日から年賀状受付開始ですよ！

## きっかけ
アドベントカレンダーで記事書きます！とは言ったもののネタがない。
なんか適当にOSSのお話(Ansible とかZabbix とかAirflow とか)で一本書こうかなと思ったら当アドベントの5日目に

* [楽天Kobo電子書籍検索APIを触ってみた](https://qiita.com/p3ngu1n/items/75ffae9eb36793f9dd8a)

なんて記事が出て、
> 購入履歴を元に新刊の発売日を通知してもらえたら、「もう発売してる？！」みたいなことが減って良さそうですね…

なんて書いてあるじゃないですか。

じゃあちょうどいいからZabbix 4.0(ついこのあいだ出ました)で実装されたHTTP agentでそれ実現しましょということで。
なお「購入履歴を元に…」の部分は残念ながら手が回ってないです。APIで取れないし…

## Zabbix とは？
[Zabbix](https://www.zabbix.com/) は、OSSのネットワーク監視ソフトウェアです。
Zabbix Agentを導入した監視対象ホストの状態を、Zabbix Serverを導入したサーバで一元管理したりします。
が、今回Agent君は**出てきません**のでまっとうなZabbixの使い方を知りたい場合はググったりしましょう。

## 準備
筆者はZabbixは2.2までしか使ったことがないので、簡単にZabbix 4.0の環境を作ります。
インストールするの面倒なので[公式が出してるDockerイメージ](https://hub.docker.com/r/zabbix/zabbix-appliance/)使ってサクッと。
以下のコマンドでコンテナが起動して、HTTPでZabbixのWebコンソールにアクセスできるようになります。

```
docker run --name zabbix-appliance -t -p 10051:10051 -p 80:80 -d zabbix/zabbix-appliance:latest
```

HTTP://ホスト名/ でアクセス
初期ユーザは「Admin」、パスワードは「zabbix」となっているはず。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/284283/088154dd-86e3-0013-f356-02ccba8f1a46.png)

ログインできました。2.2と比べるとなんかすげーリッチになってますね(浦島感)

![2.png](https://qiita-image-store.s3.amazonaws.com/0/284283/e84c9681-5b83-aa31-8aeb-19fee614e3a0.png)

### 1. HTTP agent のItem を作る
監視用のItem を作っていきます。
本来ならちゃんとTemplateから作りたいところですが、~~面倒~~時間の都合でHost のItem に直接定義します。

メニューのConfiguration -> Hosts からZabbix server (今回の手順だとこいつしかいないハズ)のItems をクリック

![8.png](https://qiita-image-store.s3.amazonaws.com/0/284283/80768bca-6b06-f733-39aa-1b9963a3cbaa.png)

からの右上のCreate Item をクリック

![3.png](https://qiita-image-store.s3.amazonaws.com/0/284283/a55bfd38-3c51-2c59-0a56-91293fa548d5.png)

Item の新規作成画面が出ます。

![10.png](https://qiita-image-store.s3.amazonaws.com/0/284283/0067b389-3d1b-a050-089c-9e61d5549f46.png)

今回は**HTTP agent** を使って**楽天Kobo電子書籍検索API**のリクエストを発行していきます。(詳しくは5日目の記事をチェック！)
ちなみにアプリID発行要のため、事前に取っときましょう。すぐ取れます。

Name は適当でよいです。
Type にはHTTP agent を選択しましょう。
key は任意文字列です。これも好きに。
URL とQuery fields も5日目の記事を丸パクリします。アプリケーションIDだけは自分の使ってください。
細かいとこだとUpdate interval は1日くらいでいいでしょう。毎秒監視するような項目でもないし。
あ、Type of information はText を選択しておく必要があります。レスポンスがJSONなので。
まとめるとこんな感じ。

![11.png](https://qiita-image-store.s3.amazonaws.com/0/284283/367b0ef7-8b6e-635d-85fa-4e66e648779c.png)

設定出来たら一回Check Now 押してから保存しておきましょう。
このCheck Now もZabbix 4.0 の新機能で、Item の取得をInterval によらず即時でやってくれるというやつです。
この機能だけでも4.0 にする価値ありますわ。(今まではInterval を極小にして無理やり取得→また戻す、みたいなことやってました)

で、Check Now 押したので値が取れてるハズです。Monitoring -> Latest data から対象のItem が取得できてること確認します。

![12.png](https://qiita-image-store.s3.amazonaws.com/0/284283/c4816625-7596-6321-7d96-ffab6093363d.png)

レスポンス取れてますね。次はこのレスポンスから発売日の情報を抜き出します。

### 2. Dependent Item を作る
上記で取得できたのはJSON のレスポンスなわけですが、このままだとまぁ扱いにくいわけです。
というわけでレスポンスから発売日の情報だけ抜き出します。
再度Create Item から今度はType にDependent Item を設定してItem を作成します。

ここのキモはMaster item に1．で作成したItem を指定することですね。あとは適当でよいです。

![13.png](https://qiita-image-store.s3.amazonaws.com/0/284283/5d2d2072-a526-550f-f179-917716d0d0fd.png)

で、Preprocessing タブでJSON のパースをします。
今回取得するのは発売日なので、$.Items[0].Item.salesDate ですね。

![14.png](https://qiita-image-store.s3.amazonaws.com/0/284283/e9c2de5e-d4a4-b75e-30b1-2bdd6fca095c.png)

これで保存すればこのItem でゴールデンカムイの最新刊の発売日が取得できるというわけです。確認しましょ。

![15.png](https://qiita-image-store.s3.amazonaws.com/0/284283/0923cc39-033f-20d0-29f7-cf1d5da5e265.png)


最新刊の発売日であるところの「2018年12月19日」がちゃんと取れてます。

### 3. Trigger を設定して新刊情報が出たら通知する
あとはこの発売日が変わったら(=新刊の情報が出たら)変更後の発売日を通知してしまえばよいわけです。

Configuration -> Hosts からZabbix server のTroggers をクリック
![16.png](https://qiita-image-store.s3.amazonaws.com/0/284283/d1da2fd7-2fe3-eb0e-883c-c0fbeeca3c46.png)

からのCreate Trigger をクリック

![17.png](https://qiita-image-store.s3.amazonaws.com/0/284283/2e6e3190-28e4-117f-16e6-f3ddf265695c.png)

Trigger の定義を行います。
2．で作成したItem の値が前回と異なる(Change)場合にTrigger が起動するよう設定します。

![18.png](https://qiita-image-store.s3.amazonaws.com/0/284283/8cb6ed2b-e027-c2f3-02c0-e38fdeb4787f.png)

これで発売日が更新されればTrigger されるはずです。確認します。
といっても新刊が今このタイミングで出るわけないので、リクエスト弄って1巻の発売日取ります。
パラメータのsort を +releaseDate に変更。

![19.png](https://qiita-image-store.s3.amazonaws.com/0/284283/f4f6c182-ccc4-c818-5839-4cd95b7e385f.png)

Check Now で値を即時取得します。Dashboard で確認しましょ。

![23.png](https://qiita-image-store.s3.amazonaws.com/0/284283/d94bb334-31a9-e0d1-165d-703ecd4bd098.png)

当該Trigger が通知されてます。実験成功ですね。
あとはこのTrigger 起因のAction を定義してメール通知なりなんなりすればいいということです。

Configuration -> Action からCreate action
3．で作成したTrigger 起因で起動するようにCondition を設定

![24.png](https://qiita-image-store.s3.amazonaws.com/0/284283/5667f0e5-735a-8781-d2e5-87f46cde4d60.png)

Operation タブでSend to Users にAdmin ユーザを追加

![25.png](https://qiita-image-store.s3.amazonaws.com/0/284283/8ea14e2e-c696-8de7-f1ca-04c1f8f50e23.png)

で保存です。あとは再度Trigger をキックしてからDashboard 見てみます。

![26.png](https://qiita-image-store.s3.amazonaws.com/0/284283/5ea2f003-100f-ae4f-a2cd-74354a1e3b00.png)

メール飛ばそうとしてますね。(メール回りなんも設定してないので失敗してますが)
以上で新刊発売日通知の仕組みが完成しました！

## まとめ
Zabbix はいいぞ。
今回記事にしてない部分とかでも、4.0 になって色々進化してるのが見て取れて楽しかったです。ほんと浦島太郎状態。
いい加減2.2 を使うのもどーかなーと思うので、まじめに移行検討しないとですね…

あと、記事の引用を快く受け入れてくださった@p3ngu1n さんに感謝を。是非Zabbix 使ってみてください。

お読みいただきありがとうございました。
明日は@t_slash_k さんです。