Zabbix API を操作するためのメモ・リンク集

# Zabbix API をコマンドライン・スクリプトから使う

Zabbix API (REST) を使って、Zabbix サーバの設定を取得する・設定を一括変更するために調べたリンク, snipet をメモしておく。というわけで、随時、変更・修正する私的・動的メモ。

# 本家ドキュメント
* [ZABBIX Documentation 6.0 日本語](https://www.zabbix.com/documentation/6.0/jp/manual/api)
* [ZABBIX Documentation 6.2 cureent](https://www.zabbix.com/documentation/current/en/manual/api)
* [ZABBIX Documentation 4.0](https://www.zabbix.com/documentation/4.0/en/manual/api)
    * [user.login](https://www.zabbix.com/documentation/4.0/en/manual/api/reference/user/login)
    * [host.get](https://www.zabbix.com/documentation/4.0/en/manual/api/reference/host/get)
    * [host.update](https://www.zabbix.com/documentation/4.0/en/manual/api/reference/host/update)
    * [host.massupdate](https://www.zabbix.com/documentation/4.0/en/manual/api/reference/host/massupdate)

# スプリクト言語から叩く

bash/curl, powershell, python, ruby から、API を叩く例を


## bash / curl

* [Zabbix API scripting via curl and jq (2020-11-18)](https://blog.zabbix.com/zabbix-api-scripting-via-curl-and-jq/12434/)
ステップ・バイ・ステップに curl で Zabbix API を叩く方法をていねいに解説
* [Zabbix API Introduction and Examples](https://sbcode.net/zabbix/zabbix-api-examples/) YouTube での解説付き
* [Zabbix APIでラクにミスなく大量のホストを登録しよう！
](https://devlog.arksystems.co.jp/2019/08/06/8884/) ここの解説がとてもていねいなのでここの事例だけでほぼ十分かな。しかし、CSVとかセミコロン区切りとか読み込むデータファイルが 'なんたら区切りファイル' なのはどうにかならんのかねえ。エンジニアなら、構造化データの記述には基本 YAML であって欲しい。

## powershell / Invoke-WebRequest

* [How to use Zabbix API through Windows PowerShell](https://catonrug.blogspot.com/2018/08/zabbix-api-windows-powershell.html)
上のリンクのコードがシンプルでわかりよいかな。
* [事例: tag を指定して host を削除](https://www.zabbix.com/forum/in-russian/399780-zabbix-api-powershell) 大学でロシア語やっとけば...
* [[Solved] Zabbix API with Powershell. How to get events with hostname](https://solveforum.com/forums/threads/solved-zabbix-api-with-powershell-how-to-get-events-with-hostname.381114/#post-381146)
ここのソースの表示は綺麗で読みやすい。
* PowerShell による Zabbix モジュールなど [Available solutions](https://www.zabbix.com/integrations/powershell)

<details><summary>スクラッチからだと、こんな感じ（机上検討のみ、未検証）</summary><div>

```powershell
# Zabbix 認証情報を取得
if(!$credential){
    $credential = Get-Credential
}

# 認証トークン(sessionid）リクエスト(user.login)用パラメータ 
$baseurl = 'hoge.com/zabbix'
$params = @{
    body =  @{
        "jsonrpc" = "2.0"
        "method" = "user.login"
        "params" = @{
            "user" = $credential.UserName
            "password" = $credential.GetNetworkCredential().Password
        }
        "id" = 1
        "auth" = $null
    } | ConvertTo-Json
    uri = "$baseurl/api_jsonrpc.php"
    headers = @{"Content-Type" = "application/json"}
    method = "Post"
}

# user.login を実行
$result = Invoke-WebRequest @params
$auth_token = ($result.Content | ConvertFrom-Json).result

# 情報取得事例: ホストグループ取得(hostgroup.get）用パラメータ 
$params.body = @{
    "jsonrpc" = "2.0"
    "method" = "hostgroup.get"
    "params" = @{
        output = "extend"
        "filter" = @{ "name" = "Zabbix servers"}
    }
    auth = $auth_token
    id = 2
} | ConvertTo-Json

# ホストグループ取得
$result = Invoke-WebRequest @params
$result = $result.Content 

# 取得情報を表示
$result
```
</div></details>

## Python

* [Zabbix API あれこれ](https://zenn.dev/april418/articles/50297386ce518f08a391)
外部モジュールを使わずに、Python 2.7 上で urllib2, json を import するだけで作ったサンプルコードがある。パラメータ用サンプル json 多数。
* Python による Zabbix モジュールなど [Available solutions](https://www.zabbix.com/integrations/python)
* [Zabbix API Python Example](https://sbcode.net/zabbix/zabbix-api-python-example/) YouTube での解説付き

## Ruby

* [【誰得】RubyでZabbix APIを引っ叩く](https://blog.serverworks.co.jp/tech/2015/08/19/call-zabbix-api-from-ruby/)
* [Zabbix API を操作するRubyライブラリ zbxapi を拡張する](https://dev.classmethod.jp/articles/zabbix-api-ruby-zbxapi-extend/)
* Ruby による Zabbix モジュールなど [Community solutions](https://www.zabbix.com/integration_search?search=Ruby)