ZabbixAPIを使ってアイテムをまとめて登録する方法

Zabbix

はじめに

今回ZabbixAPIを使用してアイテムを一括登録するための方法を記載しています。なお、実施しているのはログ監視をするためのアイテムを登録です。

他の記事でも同様ですが、認証については以下が組み込まれていることが前提です。

APIに関して何も知らなかったので、以下のサイトを参考にカスタマイズしました。

Zabbix APIでラクにミスなく大量のホストを登録しよう! | そるでぶろぐ
Zabbix APIを使いこなせば、手作業によるミスを減らしてラクに大量の監視設定を行うことができます。でも初心者には分かりにくいし、とっつきにくい…。そこで本記事では、Zabbi...

使い方

今回アイテムを一括登録するために必要になる物は以下です。

  • 1. 登録したいアイテムの情報を記載したファイル
  • 2. テンプレートIDを取得するスクリプト
  • 3. アイテムを一括登録するスクリプト

登録したいアイテムの情報を記載したファイル

以下は登録したいアイテムの情報を記載したファイルです。「;」で区切られています。

各区切りが何に対応しているかは、ファイル内に記載しています。

[root@localhost ~]# cat item_create_list
testItem_01;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt01.log;30s
testItem_02;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt02.log;30s
testItem_03;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt03.log;30s
testItem_04;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt04.log;30s
testItem_05;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt05.log;30s
testItem_06;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt06.log;30s
testItem_07;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt07.log;30s
testItem_08;7;A_TEST_Template_Log_Setting;2;/var/log/network/rt08.log;30s
###############################各列の名称###############################
#【1.ItemName】
#アイテム名を指定する。
########################################################################
#【2.ItemType】
#アイテムタイプを指定する。
#[0]Zabbix agent;[1]SNMPv1 agent;[2]Zabbix trapper;[3]simple check;
#[4]-SNMPv2 agent;[5]-Zabbix internal;[6]-SNMPv3 agent;[7]Zabbix agent (active)
#[8]-Zabbix aggregate;[9]-web item;[10]-external check;[11]-database monitor
#[12]-IPMI agent;[13]-SSH agent;[14]-TELNET agent;[15]calculated;[16]JMX agent;
#[17]-SNMP trap;[18]-Dependent item;[19]-HTTP agent;
########################################################################
#【3.TemplateName】
#アイテムを登録するテンプレート名を指定します。(テンプレートIDに変換されます。)
########################################################################
#【4.ItemValueType】
#value_typeを指定します。
#[0]-numeric float;[1]-character;[2]-log;[3]-numeric unsigned;[4]-text.
########################################################################
#【5.LogFolderPath】
#ログフォルダの絶対パスを指定します。
########################################################################
#【6.MonitoringInterval】
#delay(監視間隔)を指定します。
########################################################################

テンプレートIDを取得するスクリプト

テンプレートIDを取得するスクリプトは以下です。引数にテンプレート名を指定すると、テンプレートIDが戻ってきます。

[root@localhost ~]# bash tempID_get.sh "Template Net Cisco IOS SNMPv2"
10218

[root@localhost ~]# cat tempID_get.sh

ZabbixWeb=http://192.168.68.250/zabbix/


PRE_IFS=$IFS
IFS=$'\n'

auth=bash zabbix_token_get.sh

tempNAME=$1

curl -s -d '
{
    "jsonrpc": "2.0",
    "method": "template.get",
    "params": {
        "output": "extend",
        "filter": {
            "host":"'${tempNAME}'"
                  }
              },
    "auth": "'${auth}'",
    "id": 1
}
' -H "Content-Type: application/json-rpc" ${ZabbixWeb}api_jsonrpc.php | gawk -F'"' '{print $130}'

IFS=$PRE_IFS

アイテムを一括登録するスクリプト

登録したいアイテム情報が記載されているファイルを引数として実行します。

[root@localhost ~]# cat item_create_fromList.sh

ZabbixWeb=http://192.168.68.250/zabbix/

PRE_IFS=$IFS
IFS=$'\n'

auth=bash zabbix_token_get.sh

for line in cat "$1" | grep -v ^#

do

 ItemName=echo ${line} | cut -d ';' -f 1
 ItemType=echo ${line} | cut -d ';' -f 2
 TemplateName=echo ${line} | cut -d ';' -f 3
 ItemValueType=echo ${line} | cut -d ';' -f 4
 LogFolderPath=echo ${line} | cut -d ';' -f 5
 MonitoringInterval=echo ${line} | cut -d ';' -f 6

TemplateNumber=bash tempID_get.sh "$TemplateName"

curl -s -d '
{
    "jsonrpc": "2.0",
    "method": "item.create",
    "params": {
        "name": "'$ItemName'",
        "type": "'$ItemType'",
        "hostid": "'$TemplateNumber'",
        "value_type": "'$ItemValueType'",
        "key_": "log['${LogFolderPath}',,,,skip]",
        "delay": "'$MonitoringInterval'"
    },
     "auth": "'${auth}'",
     "id": 1
}
' -H "Content-Type: application/json-rpc" ${ZabbixWeb}api_jsonrpc.php

 echo ""

done

IFS=$PRE_IFS

実行結果

[root@localhost zabbix_api]# bash item_create_fromList.sh item_create_list
{"jsonrpc":"2.0","result":{"itemids":["29996"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["29997"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["29998"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["29999"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30000"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30001"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30002"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30003"]},"id":1}

おまけ:アイテムを一括削除するスクリプト

作成の過程で作ってみたので、おまけで掲載。

アイテム一括削除スクリプト

[root@localhost ~]# cat item_delete_list
testItem_01
testItem_02
testItem_03
testItem_04
testItem_05
testItem_06
testItem_07
testItem_08

[root@localhost zabbix_api]# vi item_delete_fromList.sh

#!/bin/bash

ZabbixWeb=http://192.168.68.250/zabbix/

auth=bash zabbix_token_get.sh

PRE_IFS=$IFS
IFS=$'\n'


for line in cat "$1" | grep -v ^#

do

ItemName=echo ${line}

ItemID=bash item_get_ID.sh "$ItemName"

curl -s -d '
{
    "jsonrpc": "2.0",
    "method": "item.delete",
    "params": [
       "'$ItemID'"
    ],
    "auth": "'${auth}'",
    "id": 1
}
' -H "Content-Type: application/json-rpc" ${ZabbixWeb}api_jsonrpc.php

 echo ""

done

IFS=$PRE_IFS

実行結果

一括作成をした後、一括削除してみました。

[root@localhost ~]# bash item_create_fromList.sh item_create_list
{"jsonrpc":"2.0","result":{"itemids":["30004"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30005"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30006"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30007"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30008"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30009"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30010"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30011"]},"id":1}
[root@localhost ~]# bash item_delete_fromList.sh item_delete_list
{"jsonrpc":"2.0","result":{"itemids":["30004"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30005"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30006"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30007"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30008"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30009"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30010"]},"id":1}
{"jsonrpc":"2.0","result":{"itemids":["30011"]},"id":1}