#!/usr/bin/env ruby require 'rubygems' require 'getopt/std' require 'yaml' require 'zabbixapi' opt = Getopt::Std.getopts("d:g:E:") group_name = opt["g"] disk_name = opt["d"] zabbix_env = opt["E"] template_name = "TMPL_Disk_" + disk_name.gsub(/\//, "_") # read config config = YAML::load(open('./config.yml')) api_url = config[zabbix_env]["api_url"] api_login = config[zabbix_env]["api_login"] api_password = config[zabbix_env]["api_password"] # Esablish new connection zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password) zbx.debug = true # Create new template p " * Creating template #{template_name}." g_id = zbx.get_group_id(group_name) options = { 'groups' => [ g_id.to_i ], 'host' => template_name } t_id = zbx.add_template(options) # Create application #{app_name} app_name = "Disk_" + disk_name.gsub(/\//, "_") p " ** Create application #{app_name}." application = { 'hostid' => t_id.to_i, 'name' => app_name } a_id = zbx.add_application(application) # 'IOPS Read on #{disk_name} avg5' options = { 'description' => "IOPS Read on #{disk_name} avg5", 'key_' => "vfs.dev.read[#{disk_name}, ops, avg5]", 'hostid' => t_id.to_i, 'applications' => [ a_id.to_i ], 'units' => 'ops', 'history' => 7, 'trends' => 30, 'delay' => 300, 'value_type' => 0, } p " ** Add 'IOPS Read on #{disk_name} avg5' to #{template_name}." i_id = zbx.add_item(options) # 'IOPS Write on #{disk_name} avg5' options = { 'description' => "IOPS Write on #{disk_name} avg5", 'key_' => "vfs.dev.write[#{disk_name}, ops, avg5]", 'hostid' => t_id.to_i, 'applications' => [ a_id.to_i ], 'units' => 'ops', 'history' => 7, 'trends' => 30, 'delay' => 300, 'value_type' => 0, } p " ** Add 'IOPS Write on #{disk_name} avg5' to #{template_name}." i_id = zbx.add_item(options) # 'BPS Read on #{disk_name} avg5' options = { 'description' => "BPS Read on #{disk_name} avg5", 'key_' => "vfs.dev.read[#{disk_name}, sps, avg5]", 'hostid' => t_id.to_i, 'applications' => [ a_id.to_i ], # convert sectors to bytes 'multiplier' => 1, 'formula' => 512, 'value_type' => 0, 'units' => 'Bps', 'history' => 7, 'trends' => 30, 'delay' => 300, } p " ** Add 'BPS Read on #{disk_name} avg5' to #{template_name}." bps_r_avg5_id = zbx.add_item(options) # 'BPS Write on #{disk_name}' options = { 'description' => "BPS Write on #{disk_name} avg5", 'key_' => "vfs.dev.write[#{disk_name}, sps, avg5]", 'hostid' => t_id.to_i, 'applications' => [ a_id.to_i ], # convert sectors to bytes 'multiplier' => 1, 'formula' => 512, 'value_type' => 0, 'units' => 'Bps', 'history' => 7, 'trends' => 30, 'delay' => 300 } p " ** Add 'BPS Write on #{disk_name} avg5' to #{template_name}." bps_w_avg5_id = zbx.add_item(options) # Create graph 'Disk usage #{disk_name}' options = { 'gitems' => [ { "itemid" => bps_w_avg5_id, "drawtype" => "0", "sortorder" => "0", "color" => "AA0000", "yaxisside" => "0", "calc_fnc" => "2", "type" => "0", "periods_cnt" => "5" }, { "itemid" => bps_r_avg5_id, "drawtype" => "0", "sortorder" => "0", "color" => "009900", "yaxisside" => "0", "calc_fnc" => "2", "type" => "0", "periods_cnt" => "5" } ], "show_triggers" => "1", "name" => "Disk usage #{disk_name}", "width" => "900", "height" => "200", "templateid" => "0" } p " ** Add 'Disk usage #{disk_name} graph'" g_id = zbx.add_graph(options)