◆ 目的
zabbixで大量のアイテムとグラフを登録する場合、
webから一つ一つクリックして作っていては時間がかかる。
数個だけ追加してテンプレートをxmlファイルとしてエクスポートし、
それを参考にコマンドでxmlを作りインポートした方が早いだろう。
◆ 前提
テンプレート名: service
アプリケーション名: web
追加するアイテム: keyword1, keyword2, keyword3
◆ ツール
エクスポートしたテンプレートを元に
キーワードを読み込ませてアイテム部分とグラフ部分を
ループさせるだけである。
zabbixのバージョンは2.0系を利用。
キーワードを並べたファイルを用意しておく。
keyword1
keyword2
keyword3
上のファイルを読み込んでxmlを作成する。 template変数と、application変数だけを各環境に合わせて変えればよい。
#!/usr/bin/ruby
$template = "service"
$application = "web"
$vars = []
def vars()
open('vars.txt', 'r') do |fp|
fp.each do |line|
$vars << line
end
end
end
def header()
puts <<-"EOS"
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2013-08-27T16:56:56Z</date>
<groups>
<group>
<name>#{$template}</name>
</group>
</groups>
<templates>
<template>
<template>#{$template}</template>
<name>#{$template}</name>
<groups>
<group>
<name>#{$template}</name>
</group>
</groups>
<applications>
<application>
<name>#{$application}</name>
</application>
</applications>
EOS
end
def footer()
puts <<-EOS
</zabbix_export>
EOS
end
def items()
puts " <items>"
$vars.each do |var|
var.chomp!
puts <<-EOF
<item>
<name>#{var}</name>
<type>2</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>#{var}</key>
<delay>0</delay>
<history>90</history>
<trends>365</trends>
<status>0</status>
<value_type>0</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authpassphrase/>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>#{$application}</name>
</application>
</applications>
<valuemap/>
</item>
EOF
end
puts " </items>"
puts " <discovery_rules/>"
puts " <macros/>"
puts " <templates/>"
puts " <screens/>"
puts " </template>"
puts " </templates>"
end
def graphs()
puts " <graphs>"
$vars.each do |var|
var.chomp!
puts <<-EOF
<graph>
<name>#{var}</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>C80000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>#{$template}</host>
<key>#{var}</key>
</item>
</graph_item>
</graph_items>
</graph>
EOF
end
puts " </graphs>"
end
vars()
header()
items()
graphs()
footer()