mirror of
https://git.lapiole.org/dani/ansible-roles.git
synced 2025-07-27 00:05:44 +02:00
Update to 2021-12-01 19:13
This commit is contained in:
4
roles/zabbix_lld_all_graph/README.md
Normal file
4
roles/zabbix_lld_all_graph/README.md
Normal file
@@ -0,0 +1,4 @@
|
||||
Simple role which deploy a script to update specific hosts' graphs with multiple items from lld discovery rules
|
||||
This script is quite specific to FWS and will probably not be useful as is to anyone else.
|
||||
It's there to workaround the lack of support for this natively in Zabbix
|
||||
See https://support.zabbix.com/browse/ZBXNEXT-927
|
5
roles/zabbix_lld_all_graph/defaults/main.yml
Normal file
5
roles/zabbix_lld_all_graph/defaults/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
|
||||
#zabbix_lld_all_graph_api_user: zabbixapi
|
||||
#zabbix_lld_all_graph_api_pass: secret
|
||||
#zabbix_lld_all_graph_api_url: https://zbxapi.example.org/json_rpc.php
|
561
roles/zabbix_lld_all_graph/files/zabbix_lld_all_graph
Executable file
561
roles/zabbix_lld_all_graph/files/zabbix_lld_all_graph
Executable file
@@ -0,0 +1,561 @@
|
||||
#!/usr/bin/perl
|
||||
use JSON;
|
||||
use utf8;
|
||||
use Getopt::Long;
|
||||
use open ':encoding(utf8)';
|
||||
binmode(STDOUT, ":utf8");
|
||||
use Time::HiRes qw(usleep);
|
||||
|
||||
# version 2020.12.13
|
||||
# read param from ENV or Getopt
|
||||
|
||||
#version 2012.06.26
|
||||
#added item prototype exclusion by item key
|
||||
#now 42 colors available
|
||||
|
||||
#version 2012.06.14
|
||||
#added drawtype parameter
|
||||
#added calcfunction parameter
|
||||
#showtriggers now defaults to true
|
||||
|
||||
#version 2012.06.13.1
|
||||
#added showtriggers parameter
|
||||
|
||||
my $user = $ENV{ZBX_API_USER};
|
||||
my $pass = $ENV{ZBX_API_PASS};
|
||||
my $url = $ENV{ZBX_API_URL};
|
||||
|
||||
GetOptions(
|
||||
'user=s' => \$user,
|
||||
'password=s' => \$pass,
|
||||
'url=s' => \$url
|
||||
);
|
||||
|
||||
if (not defined $user){
|
||||
die "Zabbix API user not provided\n";
|
||||
}
|
||||
if (not defined $pass){
|
||||
die "Zabbix API passwordnot provided\n";
|
||||
}
|
||||
if (not defined $url){
|
||||
die "Zabbix API URL not provided\n";
|
||||
}
|
||||
|
||||
# internal
|
||||
$header = "Content-Type:application/json";
|
||||
|
||||
our @conf = ();
|
||||
%{$conf[0]} = ();
|
||||
|
||||
# Disk space, % used
|
||||
# only add graphs to hosts linked to this template
|
||||
$conf[0]{"template"} = qr{^Template_OS_((Linux_(Server|minimal)|iPasserelle)|Windows_(Minimal|Serveu?r)|PfSense(2)?|OPNSense)$};
|
||||
# create a graph with this name in each host
|
||||
$conf[0]{"graph"} = 'System: Filesystem usage';
|
||||
$conf[0]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[0]{"mintype"} = 1; ### 0=calculated, 1=fixed
|
||||
$conf[0]{"maxtype"} = 1; ### 0=calculated, 1=fixed
|
||||
$conf[0]{"minvalue"} = 0;
|
||||
$conf[0]{"maxvalue"} = 100;
|
||||
$conf[0]{"showtriggers"} = 1;
|
||||
$conf[0]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[0]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[0]{"regexes"}[0] = '^Used space on\s.*\(%\)';
|
||||
|
||||
# Temp sensors
|
||||
$conf[1]{"template"} = qr{^Template_OS_(Linux_(Server|minimal)|iPasserelle)$};
|
||||
$conf[1]{"graph"} = 'Hardware: Temperatures';
|
||||
$conf[1]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[1]{"mintype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[1]{"maxtype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[1]{"minvalue"} = 0;
|
||||
$conf[1]{"maxvalue"} = 100;
|
||||
$conf[1]{"showtriggers"} = 1;
|
||||
$conf[1]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[1]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[1]{"regexes"}[0] = '^Temperature\s.*';
|
||||
|
||||
# Disk I/O, bps
|
||||
$conf[2]{"template"} = qr{^Template_OS_((Linux_(Server|minimal)|iPasserelle)|Windows_(Minimal|Serveu?r))$};
|
||||
$conf[2]{"graph"} = 'System: Disks: I/O';
|
||||
$conf[2]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[2]{"mintype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[2]{"maxtype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[2]{"minvalue"} = 0;
|
||||
$conf[2]{"maxvalue"} = 100;
|
||||
$conf[2]{"showtriggers"} = 1;
|
||||
$conf[2]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[2]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[2]{"regexes"}[0] = '^Writes\son\s(?!(\/dev|sd[e-z]))';
|
||||
$conf[2]{"regexes"}[1] = '^Reads\son\s(?!(\/dev|sd[e-z]))';
|
||||
|
||||
# Disk I/O, iops
|
||||
$conf[3]{"template"} = qr{^Template_OS_((Linux_(Server|minimal)|iPasserelle)|Windows_(Minimal|Serveu?r))$};
|
||||
$conf[3]{"graph"} = 'System: Disks: I/O (iops)';
|
||||
$conf[3]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[3]{"mintype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[3]{"maxtype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[3]{"minvalue"} = 0;
|
||||
$conf[3]{"maxvalue"} = 100;
|
||||
$conf[3]{"showtriggers"} = 1;
|
||||
$conf[3]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[3]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[3]{"regexes"}[0] = '^Write\soperations\son\s(?!(\/dev|sd[e-z]))';
|
||||
$conf[3]{"regexes"}[1] = '^Read\soperations\son\s(?!(\/dev|sd[e-z]))';
|
||||
|
||||
# Fan and power sensors
|
||||
$conf[4]{"template"} = qr{^Template_OS_(Linux_(Server|minimal)|iPasserelle)$};
|
||||
$conf[4]{"graph"} = 'Hardware: Fan';
|
||||
$conf[4]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[4]{"mintype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[4]{"maxtype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[4]{"minvalue"} = 0;
|
||||
$conf[4]{"maxvalue"} = 100;
|
||||
$conf[4]{"showtriggers"} = 1;
|
||||
$conf[4]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[4]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[4]{"regexes"}[0] = '^Rotation speed for\s.*';
|
||||
|
||||
$conf[5]{"template"} = qr{^Template_OS_(Linux_(Server|minimal)|iPasserelle)$};
|
||||
$conf[5]{"graph"} = 'Hardware: Power';
|
||||
$conf[5]{"graphtype"} = 1; ### 0=normal, 1=stacked
|
||||
$conf[5]{"mintype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[5]{"maxtype"} = 0; ### 0=calculated, 1=fixed
|
||||
$conf[5]{"minvalue"} = 0;
|
||||
$conf[5]{"maxvalue"} = 100;
|
||||
$conf[5]{"showtriggers"} = 1;
|
||||
$conf[5]{"drawtype"} = 2; ### 0=line, 1=filled, 2=boldline, 3=dot, 4=dashed, 5=gradient
|
||||
$conf[5]{"calcfunction"} = 2; ### 1=min, 4=max, 2=avg, 7=all
|
||||
$conf[5]{"regexes"}[0] = '^Power consumption\s.*';
|
||||
|
||||
# load a json string from a file
|
||||
sub loadjson {
|
||||
$result = "";
|
||||
|
||||
# open file
|
||||
open(FILE, "<", $_[0]);
|
||||
# read whole file
|
||||
while (<FILE>) {
|
||||
$result = $result . $_;
|
||||
}
|
||||
close(FILE);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
# send json and get result (jsonstr):jsonstr
|
||||
sub sendjson {
|
||||
$jsonstr = $_[0];
|
||||
|
||||
# send json to zabbix and get result
|
||||
$res = `curl -s -i -X POST -H $header -d '$data' $url`;
|
||||
# find start of json
|
||||
$i = index($res, "{");
|
||||
# get json only
|
||||
$res_out = substr($res, $i);
|
||||
|
||||
return $res_out;
|
||||
}
|
||||
|
||||
|
||||
# authenticate with zabbix, returns the auth token
|
||||
sub authenticate {
|
||||
# load auth json
|
||||
$data = '{"jsonrpc":"2.0","method":"user.login","params":{"user":"'.$user.'","password":"'.$pass.'"},"id": 1,"auth":null}';
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
|
||||
# decode json
|
||||
$dec = decode_json($res);
|
||||
# get auth key
|
||||
$auth_out = $dec->{"result"};
|
||||
|
||||
return $auth_out;
|
||||
}
|
||||
|
||||
# get hostgroups from zabbix (auth)
|
||||
sub gethostgroups {
|
||||
$auth_in = $_[0];
|
||||
|
||||
# load hostgroups json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "hostgroup.get", "params": { "output": "extend", "sortfield": "name" }, "id": 1, "auth": "" }';
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
return $dec_out
|
||||
}
|
||||
|
||||
# get hosts from zabbix (auth, groupid)
|
||||
sub gethosts {
|
||||
$auth_in = $_[0];
|
||||
$groupid_in = $_[1];
|
||||
|
||||
# load items json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "host.get", "params": { "output": "extend", "sortfield": "name", "selectParentTemplates": "extend", "groupids": [ "" ] }, "id": 2, "auth": "" }';
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# set groupid filter (outside filter)
|
||||
$dec->{"params"}->{"groupids"}[0] = $groupid_in;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
return $dec_out;
|
||||
}
|
||||
|
||||
# get items from zabbix (auth, hostid)
|
||||
sub getitems {
|
||||
$auth_in = $_[0];
|
||||
$hostid_in = $_[1];
|
||||
|
||||
# load items json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "item.get", "params": { "output": "extend", "sortfield": "name", "filter": { "hostid": "" } }, "id": 1, "auth": "" }';
|
||||
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# set hostid filter
|
||||
$dec->{"params"}->{"filter"}->{"hostid"} = $hostid_in;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
return $dec_out
|
||||
}
|
||||
|
||||
# get graphs from zabbix (auth, hostid, graphname)
|
||||
sub getgraphs {
|
||||
$auth_in = $_[0];
|
||||
$hostid_in = $_[1];
|
||||
$graph_in = $_[2];
|
||||
|
||||
# load graphs json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "graph.get", "params": { "output": "extend", "sortfield": "name", "hostids": [ "" ], "filter": { "name": "" } }, "id": 3, "auth": "" }';
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# set name filter
|
||||
$dec->{"params"}->{"filter"}->{"name"} = $graph_in;
|
||||
# set hostid filter (outside filter)
|
||||
$dec->{"params"}->{"hostids"}[0] = $hostid_in;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
return $dec_out;
|
||||
}
|
||||
|
||||
# delete graph from zabbix (auth, graphid)
|
||||
sub deletegraph {
|
||||
$auth_in = $_[0];
|
||||
$graphid_in = $_[1];
|
||||
|
||||
# load graphs json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "graph.delete", "params": [ "" ], "id": 4, "auth": "" }';
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# set graphid
|
||||
$hash[0] = $graphid_in;
|
||||
$dec->{"params"} = \@hash;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
print " "." "." "."Graph deleted."."\n";
|
||||
|
||||
return $dec_out;
|
||||
}
|
||||
|
||||
# search and delete existing graphs from zabbix (auth, hostid, graphname)
|
||||
sub deletegraphs {
|
||||
$auth_in = $_[0];
|
||||
$hostid_in = $_[1];
|
||||
$graph_in = $_[2];
|
||||
|
||||
# get graph with name
|
||||
$graphs = getgraphs($auth_in, $hostid_in, $graph_in);
|
||||
|
||||
# each graph in list
|
||||
# filter graphs that do not belong to our hostid
|
||||
foreach $graphi(@{$graphs->{result}}) {
|
||||
# get graph id
|
||||
$graphid = $graphi->{graphid};
|
||||
# get graph name
|
||||
$graph_name = $graphi->{name};
|
||||
|
||||
print " "." "." "."Graph found: ".$graph_name." (".$graphid.")"."\n";
|
||||
|
||||
# delete the graph
|
||||
deletegraph($auth_in, $graphid);
|
||||
}
|
||||
}
|
||||
|
||||
# create graph in zabbix (auth, graphname, graphtype, mintype, maxtype, minvalue, maxvalue, showtriggers, graphitems, hostid)
|
||||
sub creategraph {
|
||||
#ymin_type = 0 -> calculated
|
||||
#ymin_type = 1 -> fixed
|
||||
#graphtype = 0 -> normal
|
||||
#graphtype = 1 -> stack
|
||||
|
||||
#auth
|
||||
$auth_in = $_[0];
|
||||
#graph name
|
||||
$graph_in = $_[1];
|
||||
#graphtype, mintype, maxtype, minvalue, maxvalue
|
||||
$graphtype_in = $_[2];
|
||||
$mintype_in = $_[3];
|
||||
$maxtype_in = $_[4];
|
||||
$minvalue_in = $_[5];
|
||||
$maxvalue_in = $_[6];
|
||||
$showtriggers_in = $_[7];
|
||||
#graphitems
|
||||
$graphitems_in = $_[8];
|
||||
#hostid
|
||||
$hostid_in = $_[9];
|
||||
|
||||
# load graphs json
|
||||
$data = '{ "jsonrpc": "2.0", "method": "graph.create", "params": { "gitems": [ "" ], "name": "", "width": "900", "height": "300", "yaxismin": "0", "yaxismax": "100",
|
||||
"show_work_period": "1", "show_triggers": "1", "graphtype": "0", "show_legend": "1", "show_3d": "0", "percent_left": "0", "percent_right": "0", "ymin_type": "0",
|
||||
"ymax_type": "0", "ymin_itemid": "0", "ymax_itemid": "0" }, "id": 4, "auth": "" }';
|
||||
|
||||
# decode json
|
||||
$dec = decode_json($data);
|
||||
# set auth
|
||||
$dec->{"auth"} = $auth_in;
|
||||
# set graph name
|
||||
$dec->{"params"}->{"name"} = $graph_in;
|
||||
# set graphtype, mintype, maxtype, minvalue, maxvalue
|
||||
$dec->{"params"}->{graphtype} = $graphtype_in;
|
||||
$dec->{"params"}->{ymin_type} = $mintype_in;
|
||||
$dec->{"params"}->{ymax_type} = $maxtype_in;
|
||||
$dec->{"params"}->{yaxismin} = $minvalue_in;
|
||||
$dec->{"params"}->{yaxismax} = $maxvalue_in;
|
||||
$dec->{"params"}->{show_triggers} = $showtriggers_in;
|
||||
# set graph gitems
|
||||
$dec->{"params"}->{gitems} = $graphitems_in;
|
||||
# encode back to data
|
||||
$data = encode_json($dec);
|
||||
|
||||
# send json
|
||||
$res = sendjson($data);
|
||||
# decode json
|
||||
$dec_out = decode_json($res);
|
||||
|
||||
print " "." "." "."Graph created: ".$graph_in."\n";
|
||||
|
||||
return $dec_out;
|
||||
}
|
||||
|
||||
|
||||
##########
|
||||
# 42 total items
|
||||
##########
|
||||
# dark colors
|
||||
$colors[0][0] = "5299AD"; # blue1
|
||||
$colors[0][1] = "5D549A"; # violet
|
||||
$colors[0][2] = "87B457"; # green
|
||||
$colors[0][3] = "CF545E"; # red
|
||||
$colors[0][4] = "CDDA13"; # lemon
|
||||
$colors[0][5] = "5DAE99"; # turquise
|
||||
$colors[0][6] = "DD844C"; # orange
|
||||
$colors[0][7] = "AE5C8A"; # mauve
|
||||
$colors[0][8] = "BD9F83"; # ltbrown
|
||||
$colors[0][9] = "6B9BD4"; # blue2
|
||||
$colors[0][10] = "B75F73"; #red-brown
|
||||
$colors[0][11] = "646560"; # kaky
|
||||
$colors[0][12] = "335098"; # deepblue
|
||||
$colors[0][13] = "5FBFDB"; # bleu
|
||||
$colors[0][14] = "D1CE85"; # yellow
|
||||
$colors[0][15] = "909090"; # grey
|
||||
$colors[0][16] = "A16254"; # brown
|
||||
$colors[0][17] = "E8678D"; # pink
|
||||
$colors[0][18] = "62B55A"; # deepgreen
|
||||
$colors[0][19] = "A599AD"; # greypurple
|
||||
$colors[0][20] = "6A5DD9"; # violet2
|
||||
# light colors
|
||||
$colors[1][0] = "98D6E7"; # blue1
|
||||
$colors[1][1] = "9E7EDF"; # violet
|
||||
$colors[1][2] = "BDDA83"; # green
|
||||
$colors[1][3] = "EF747E"; # red
|
||||
$colors[1][4] = "EDFA33"; # lemon
|
||||
$colors[1][5] = "7EC392"; # tuquise
|
||||
$colors[1][6] = "EDA46C"; # orange
|
||||
$colors[1][7] = "DF93D7"; # mauve
|
||||
$colors[1][8] = "E2BB91"; # ltbrown
|
||||
$colors[1][9] = "A0CBEA"; # blue2
|
||||
$colors[1][10] = "CB868B"; # red-brown
|
||||
$colors[1][11] = "77897D"; # kaky
|
||||
$colors[1][12] = "5370B8"; #deepblue
|
||||
$colors[1][13] = "76DAF7"; # bleu
|
||||
$colors[1][14] = "EAD770"; # yellow
|
||||
$colors[1][15] = "AEAEAE"; # grey
|
||||
$colors[1][16] = "B97A6F"; # brown
|
||||
$colors[1][17] = "E8849D"; # pink
|
||||
$colors[1][18] = "95D36E"; # deepgreen
|
||||
$colors[1][19] = "B7AACF"; # greypurple
|
||||
$colors[1][20] = "8A7DF9"; # violet2
|
||||
|
||||
print "\n";
|
||||
|
||||
# authenticate with zabbix
|
||||
$auth = authenticate();
|
||||
|
||||
# get hostgroup list
|
||||
$hostgroups = gethostgroups($auth);
|
||||
|
||||
# each hostgroup in list
|
||||
foreach $hostgroup(@{$hostgroups->{result}}) {
|
||||
# get groupid and name
|
||||
$groupid = $hostgroup->{groupid};
|
||||
$name = $hostgroup->{name};
|
||||
|
||||
# not templates or discovered hosts
|
||||
next if ((lc($name) eq "templates") || (lc($name) eq "discovered hosts") || (lc($name) eq "modèles"));
|
||||
|
||||
# get hosts list
|
||||
$hosts = gethosts($auth, $groupid);
|
||||
|
||||
print "HOSTGROUP: ".$name." (".$groupid.")"."\n";
|
||||
|
||||
# each host in list
|
||||
foreach $host(@{$hosts->{result}}) {
|
||||
sleep(1);
|
||||
|
||||
# get parent templates
|
||||
$templates = $host->{parentTemplates};
|
||||
for (my $i = 0; $i < @conf; ++$i){
|
||||
my $template = $conf[$i]{"template"};
|
||||
my $graph = $conf[$i]{"graph"};
|
||||
my $graphtype = $conf[$i]{"graphetype"};
|
||||
my $mintype = $conf[$i]{"mintype"};
|
||||
my $maxtype = $conf[$i]{"maxtype"};
|
||||
my $minvalue = $conf[$i]{"minvalue"};
|
||||
my $maxvalue = $conf[$i]{"maxvalue"};
|
||||
my $showtriggers = $conf[$i]{"showtriggers"};
|
||||
my $drawtype = $conf[$i]{"drawtype"};
|
||||
my $calcfunction = $conf[$i]{"calcfunction"};
|
||||
my @regexes = ();
|
||||
$regexes[0] = $conf[$i]{"regexes"}[0];
|
||||
$regexes[1] = $conf[$i]{"regexes"}[1] if (defined $conf[$i]{"regexes"}[1]);
|
||||
|
||||
# match results
|
||||
$templatematch = 0;
|
||||
|
||||
# each template in list
|
||||
# filter hosts that do not belong to our template
|
||||
foreach $templatei(@{$templates}) {
|
||||
# template name match
|
||||
$templatematch = 1 if ($templatei->{name} =~ m/$template/i);
|
||||
}
|
||||
|
||||
# template match
|
||||
next unless ($templatematch);
|
||||
# get host id and name
|
||||
$name = $host->{name};
|
||||
print "host $name matches $template\n";
|
||||
$hostid = $host->{hostid};
|
||||
# reset graph item array
|
||||
@graph_item = ();
|
||||
|
||||
print " "."HOST: ".$name." (".$hostid.")"."\n";
|
||||
|
||||
#########
|
||||
# search for existing graphs and delete if found
|
||||
#########
|
||||
deletegraphs($auth, $hostid, $graph);
|
||||
|
||||
# get item list
|
||||
$items = getitems($auth, $hostid);
|
||||
$count = 0;
|
||||
# reset colorbase;
|
||||
$colorbase = 0;
|
||||
# reset colorindexes;
|
||||
@colorindex = 0;
|
||||
|
||||
# each item in list
|
||||
foreach $item(@{$items->{result}}) {
|
||||
# get item name
|
||||
$item_name = $item->{name};
|
||||
#get item id
|
||||
$item_id = $item->{itemid};
|
||||
#get item key
|
||||
$item_key = $item->{key_};
|
||||
# reset regex index
|
||||
$regexindex = 0;
|
||||
# reset host item array
|
||||
@host_item = ();
|
||||
|
||||
# each regex in list
|
||||
foreach $regex(@regexes) {
|
||||
# item name match regex and item key is not prototype
|
||||
next unless (($item_name =~ m/$regex/) && ($item_key !~ m/.*{#.*}/) && (@graph_item < 19));
|
||||
print " "." "."ITEM: ".$item_name." (".$item_id.")"."\n";
|
||||
|
||||
# we may have exceeded color count, if so, use other base (light, ultralight)
|
||||
if ($colorindex[$regexindex] > @{$colors[0]}) {
|
||||
# move to next color base
|
||||
$colorbase++;
|
||||
# reset color index;
|
||||
$colorindex[$regexindex] = 0;
|
||||
|
||||
print " "." "."WARNING: Not enough colors, switched to another color base"."\n";
|
||||
}
|
||||
|
||||
$graph_item[$count]->{itemid} = $item_id;
|
||||
$graph_item[$count]->{drawtype} = $drawtype;
|
||||
$graph_item[$count]->{sortorder} = $count;
|
||||
$graph_item[$count]->{color} = $colors[$colorbase + $regexindex][$colorindex[$regexindex]];
|
||||
$graph_item[$count]->{yaxisside} = "0"; ### 0=left, 1=right;
|
||||
$graph_item[$count]->{type} = "0";
|
||||
$graph_item[$count]->{calc_fnc} = $calcfunction;
|
||||
|
||||
# inc count;
|
||||
$count++;
|
||||
# inc colorindex;
|
||||
$colorindex[$regexindex]++;
|
||||
|
||||
# inc regexindex
|
||||
$regexindex++;
|
||||
}
|
||||
}
|
||||
#########
|
||||
# create a new graph
|
||||
#########
|
||||
creategraph($auth, $graph, $graphtype, $mintype, $maxtype, $minvalue, $maxvalue, $showtriggers, \@graph_item, $hostid);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
4
roles/zabbix_lld_all_graph/meta/main.yml
Normal file
4
roles/zabbix_lld_all_graph/meta/main.yml
Normal file
@@ -0,0 +1,4 @@
|
||||
---
|
||||
|
||||
dependencies:
|
||||
- role: mkdir
|
5
roles/zabbix_lld_all_graph/tasks/conf.yml
Normal file
5
roles/zabbix_lld_all_graph/tasks/conf.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
|
||||
- name: Deploy lld graphs config
|
||||
template: src=zabbix-lld-all-graph.j2 dest=/etc/sysconfig/zabbix-lld-all-graph mode=600 owner=zabbix
|
||||
tags: zabbix
|
26
roles/zabbix_lld_all_graph/tasks/install.yml
Normal file
26
roles/zabbix_lld_all_graph/tasks/install.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
|
||||
- name: Install packages
|
||||
package:
|
||||
name:
|
||||
- curl
|
||||
- perl-Getopt-Long
|
||||
- perl-Time-HiRes
|
||||
tags: zabbix
|
||||
|
||||
- name: Install zabbix_lld_all_graph script
|
||||
copy: src=zabbix_lld_all_graph dest=/usr/local/bin/zabbix_lld_all_graph mode=755
|
||||
tags: zabbix
|
||||
|
||||
- name: Install lld_all_graph systemd units
|
||||
template: src={{ item }}.j2 dest=/etc/systemd/system/{{ item }}
|
||||
loop:
|
||||
- zabbix-lld-all-graph.service
|
||||
- zabbix-lld-all-graph.timer
|
||||
register: zabbix_lld_all_graph_units
|
||||
tags: zabbix
|
||||
|
||||
- name: Reload systemd
|
||||
systemd: daemon_reload=True
|
||||
when: zabbix_lld_all_graph_units.results | selectattr('changed','equalto',True) | list | length > 0
|
||||
tags: zabbix
|
5
roles/zabbix_lld_all_graph/tasks/main.yml
Normal file
5
roles/zabbix_lld_all_graph/tasks/main.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
|
||||
- include: install.yml
|
||||
- include: conf.yml
|
||||
- include: services.yml
|
8
roles/zabbix_lld_all_graph/tasks/services.yml
Normal file
8
roles/zabbix_lld_all_graph/tasks/services.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
|
||||
- name: Handle zabbix-lld-all-graph timer
|
||||
systemd:
|
||||
name: zabbix-lld-all-graph.timer
|
||||
state: "{{ (zabbix_lld_all_graph_api_user is defined and zabbix_lld_all_graph_api_pass is defined and zabbix_lld_all_graph_api_url is defined) | ternary('started','stopped') }}"
|
||||
enabled: "{{ (zabbix_lld_all_graph_api_user is defined and zabbix_lld_all_graph_api_pass is defined and zabbix_lld_all_graph_api_url is defined) | ternary(True,False) }}"
|
||||
tags: zabbix
|
@@ -0,0 +1,9 @@
|
||||
{% if zabbix_lld_all_graph_api_user is defined %}
|
||||
ZBX_API_USER={{ zabbix_lld_all_graph_api_user | quote }}
|
||||
{% endif %}
|
||||
{% if zabbix_lld_all_graph_api_pass is defined %}
|
||||
ZBX_API_PASS={{ zabbix_lld_all_graph_api_pass | quote }}
|
||||
{% endif %}
|
||||
{% if zabbix_lld_all_graph_api_url is defined %}
|
||||
ZBX_API_URL={{ zabbix_lld_all_graph_api_url | quote }}
|
||||
{% endif %}
|
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=Update graphs with multiple lld items
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
EnvironmentFile=/etc/sysconfig/zabbix-lld-all-graph
|
||||
ExecStart=/usr/local/bin/zabbix_lld_all_graph
|
||||
User=zabbix
|
||||
Group=zabbix
|
@@ -0,0 +1,8 @@
|
||||
[Unit]
|
||||
Description=Update graphs with multiple lld items
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
Reference in New Issue
Block a user