RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

【Zabbix超・入門】明日の監視生活が【楽】になるZabbix API

f:id:tech-rakus:20211110125052p:plain

はじめに

初めましてこんにちは。 ngerukatakataです。
営業上がりの未経験エンジニアとしてそこそこの期間を働いております。
担当する環境も当時の物からかなり様変わりしてしまい、
同じような仕事の仕方はできないものだなぁと感じている今日この頃です。

さて、今回は大きく変わったものの中でこの業界にかかせない『監視』について、
お話しさせていただければと思います。
まず先にお伝えしますと、今回お話しする監視ツールは Zabbix についてとなります。

この Zabbix をコマンドラインから操作することのできる Zabbix API の『入門』について
お話させていただければと思います。

目次

背景

私が中途社員として入社してサービスに携わってから今にいたるまでで、
私の担当するサービスのインフラ環境は大きく拡大しました。
管理するサーバの台数は数台…せいぜいが十数台といったところから、
今では数百台といったところまで大きくなり、それにともなって運用のコストは肥大化を続けています。

当時は新たにサーバを用意するとなると構築を手作業で実施し監視を追加するには
Zabbix をGUIでポチポチと手作業で操作しており、
当然ではありますが一日で構築することのできるサーバ台数は制限されておりました。
しかし、嬉しい悲鳴ではございますがサービスも順調に拡大していき、
最近は一度に作成しなくてはならないサーバ台数も膨れ上がっていき…
手作業なんてのは考えられないものとなりました。

そこで少しずつ運用上の処理の ジョブ化 やインフラ構成の 仮想化 、
そしてさまざまな処理の 自動化 なんてもの( Zabbix ではホストの自動登録)を導入しておりましたが、
監視内容の一部はどうしてもホストの自動登録機能だけでは痒い所に手が届かず、
仕方なく泣きながら手作業を行う… そんな運用になっていました。

1回ごとの作業はわずかな作業とはいえ、台数を重ねると運用的にも心情的にもやっていけるものではなく、
何とかもっと【楽】にやれないものか…とたどり着いたのが Zabbix API となります。

明日の監視生活を【楽】にしよう!

それでは前置きが長くなりましたが早速 Zabbix API について説明をさせていただきます。

Zabbix API とは?

詳細な仕組みついては賢く偉い人がたくさん説明してくれているので…
ごくごく簡単に言うと

わざわざGUIで管理画面にアクセスしなくても Zabbix のデータを取得したり、
Zabbix の設定ができるもの!

と考えてもらえるとよろしいかと思います!
運用に携わるものの積年の悩みである無限の画面ポチーから解放されるものですね。

Zabbix API 超・入門

それでは実際に私が実施している Zabbix 監視の追加方法について、
実例をもとに説明させていただきます。

今回の実例は、以下に示すように

  1. Zabbix トークンの取得!
  2. Zabbix からグループIDとテンプレートIDの取得!
  3. Zabbix へ指定したグループとテンプレートに所属するホストを作成!
  4. Zabbix トークンの破棄!

の流れになっていますので、ごらんの皆様もイメージしやすいかと思います!

Zabbix トークンの取得!

まず Zabbix API を使うには、以下の3つの情報が必要です。

  • 管理画面のアクセスURL
  • 管理ユーザID
  • 管理ユーザパスワード

こちらの3つの情報を使って、 Zabbix API とやり取りするためのトークンを取得することで、
実際に Zabbix のデータを取得したり、 Zabbix へデータを登録できるようになります!

では早速トークンを取得してみましょう。

curl -k -s -d '{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "[管理ユーザID]",
        "password": "[管理ユーザパスワード]"
    },
    "id": 1,
    "auth": null
}' -H "Content-Type: application/json-rpc" https://[管理画面のアクセスURL]/zabbix/api_jsonrpc.php  | gawk -F'"' '{print $8}'

このコマンドを実行すると以下のような不思議な文字列が取得できると思います。
これがトークンといわれるものです。

9c22b1eade384b1c222e52d0fb4fa303

無事にトークンが取得できましたね!
それでは実際にこちらのトークンを使って Zabbx のデータの取得や Zabbix へのデータの登録を行いましょう!

Zabbix からグループIDとテンプレートIDの取得!

実際にホストを登録するにあたって、
事前にホストを所属させたいグループIDとテンプレートIDを調べておきましょう!

それでは!先ほど取得したトークンを使って実際にグループIDとテンプレートIDを取得してみましょう!
まずはグループIDから取得してみましょう。

curl -k -s -d '
{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "[グループの名前]"
                  ]
        }
    },
    "auth": "[トークン]",
    "id": 1
}
' -H "Content-Type: application/json-rpc" https://[管理画面のアクセスURL]/zabbix/api_jsonrpc.php | gawk -F'"' '{print $10}'

このコマンドを実行すると以下のようなIDが取得できると思います。
これがグループIDです。

25

続いて、テンプレートIDを取得してみましょう。

curl -k -s -d '
{
    "jsonrpc": "2.0",
    "method": "template.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "[テンプレートの名前]"
                  ]
        }
    },
    "auth": "[トークン]",
    "id": 1
}
' -H "Content-Type: application/json-rpc" https://[管理画面のアクセスURL]/zabbix/api_jsonrpc.php | python -mjson.tool  | grep templateid | gawk -F'"' '{print $4}'

このコマンドを実行すると以下のようなIDが取得できると思います。
これがテンプレートIDです。

10484

無事にグループIDとテンプレートIDが取得できましたね!
それでは次はこちらを使って Zabbix へのデータの登録を行いましょう!

Zabbix へ指定したグループとテンプレートに所属するホストを作成!

ついに必要な情報が揃いました!
それではおまちかね、Zabbix に監視対象ホストの登録を行いましょう!

揃えた情報を利用して、以下のようにコマンドを実施すると……

curl -k -s -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "[登録したいホスト名]",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "[監視したいIPアドレス]",
                "dns": "[登録したいホスト名]",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "[グループID]"
            }
        ],
        "templates": [
            {
                "templateid": "[テンプレートID]"
            }
        ],
        "inventory_mode": 1
    },
    "auth": "[トークン]",
    "id": 1
}
' -H "Content-Type: application/json-rpc" https://[管理画面のアクセスURL]/zabbix/api_jsonrpc.php | python -mjson.tool

無事登録できましたね!
これでまとめて一気にホストを登録できますね!
スクリプトなどに組み込んで一気に登録してあげましょう!

Zabbix トークンの破棄!

利用の終わったトークンはちゃんと破棄しておきましょう。
お片付けは大事です。

curl -k -s -d '{
  "jsonrpc": "2.0",
  "method": "user.logout",
  "params": [],
  "id": 4,
  "auth": "[トークン]"
}' -H "Content-Type: application/json-rpc" https://[管理画面のアクセスURL]/zabbix/api_jsonrpc.php

まとめ

さて、実際の流れを通して Zabbix API の使い方の一例としてホストの登録方法についてご案内させていただきました。
単なるホストの登録…だけで言うと自動登録機能を使ったほうがもっと簡単にできますが、
それだけでは痒いところに手が届かないという人や、
Zabbix API を使ってみたいけどどうしたら!?って人が少しでも【楽】になれば幸いです。

また過去記事ですが Zabbbix の LLD (ローレベルディスカバリ) についての記事も書いておりますので
良かったらこちらも見ていただけますと幸いです。

ちょっとうれしいZabbixLLDテクニックメモ - RAKUS Developers Blog | ラクス エンジニアブログ

参考

https://www.zabbix.com/documentation/current/manual/api


  • エンジニア中途採用サイト
    ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
    ご興味ありましたら是非ご確認をお願いします。
    20210916153018
    https://career-recruit.rakus.co.jp/career_engineer/

  • カジュアル面談お申込みフォーム
    どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
    以下フォームよりお申込みください。
    forms.gle

  • イベント情報
    会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
    rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.