はじめに
今回ZabbixAPIを使用してアイテムを一括登録するための方法を記載しています。なお、実施しているのはログ監視をするためのアイテムを登録です。
他の記事でも同様ですが、認証については以下が組み込まれていることが前提です。
APIに関して何も知らなかったので、以下のサイトを参考にカスタマイズしました。
Zabbix APIでラクにミスなく大量のホストを登録しよう! | そるでぶろぐ
Zabbix APIを使いこなせば、手作業によるミスを減らしてラクに大量の監視設定を行うことができます。でも初心者には分かりにくいし、とっつきにくい…。そこで本記事では、Zabbi...
使い方
今回アイテムを一括登録するために必要になる物は以下です。
- 1. 登録したいアイテムの情報を記載したファイル
- 2. テンプレートIDを取得するスクリプト
- 3. アイテムを一括登録するスクリプト
登録したいアイテムの情報を記載したファイル
以下は登録したいアイテムの情報を記載したファイルです。「;」で区切られています。
各区切りが何に対応しているかは、ファイル内に記載しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[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が戻ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
[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 |
アイテムを一括登録するスクリプト
登録したいアイテム情報が記載されているファイルを引数として実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
[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 |
実行結果
1 2 3 4 5 6 7 8 9 |
[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} |
おまけ:アイテムを一括削除するスクリプト
作成の過程で作ってみたので、おまけで掲載。
アイテム一括削除スクリプト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
[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 |
実行結果
一括作成をした後、一括削除してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[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} |