munin
munin copied to clipboard
Defining a virtual node breaks munin-update
The following configuration fragment:
[virtual.example.com]
update no
contacts no
foo.update no
foo.graph_title something
makes munin-update stop with:
[...]
2015-12-31 00:08:25 [debug][006619]: Work done
2015-12-31 00:08:25 [debug][006619]: munin_set_var_path: Setting var "example.com;virtual.example.com:foo.graph_title" = "something"
2015-12-31 00:08:25 [debug][006619]: munin_set_var_path: Setting var "example.com;virtual.example.com:foo.update" = "0"
2015-12-31 00:08:25 [debug][006619]: Writing sql to /var/lib/munin/datafile.sqlite.6619
DBD::SQLite::st execute failed: called with 3 bind variables when 6 are needed at /usr/share/perl5/Munin/Master/Update.pm line 282.
Can't use string ("foo.update") as an ARRAY ref while "strict refs" in use at /usr/share/perl5/Munin/Master/Update.pm line 303.
As soon as I add the "foo.graph_title", munin-update stops, leaving a sqlite datafile with defined tables, some node definitions, but no values:
# echo .dump | sqlite3 /var/lib/munin/datafile.sqlite.6619 | sed -e 's/^/ /g'
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE param (name VARCHAR PRIMARY KEY, value VARCHAR);
INSERT INTO "param" VALUES('tls_verify_depth','5');
INSERT INTO "param" VALUES('max_processes','16');
INSERT INTO "param" VALUES('dbdir','/var/lib/munin');
INSERT INTO "param" VALUES('config_file','/etc/munin/munin.conf');
INSERT INTO "param" VALUES('timeout','180');
INSERT INTO "param" VALUES('logdir','/var/log/munin');
INSERT INTO "param" VALUES('tls_verify_certificate','0');
INSERT INTO "param" VALUES('tls','disabled');
INSERT INTO "param" VALUES('graph_data_size','normal');
INSERT INTO "param" VALUES('cgitmpdir','/var/cache/munin');
INSERT INTO "param" VALUES('local_address','0');
INSERT INTO "param" VALUES('tmpldir','/etc/munin/templates');
INSERT INTO "param" VALUES('rundir','/var/run/munin');
INSERT INTO "param" VALUES('includedir','/etc/munin/munin-conf.d');
INSERT INTO "param" VALUES('version','2.999.1');
INSERT INTO "param" VALUES('tls_ca_certificate','/etc/munin/cacert.pem');
INSERT INTO "param" VALUES('fork','1');
INSERT INTO "param" VALUES('tls_private_key','/etc/munin/munin.pem');
INSERT INTO "param" VALUES('carbon_port','');
INSERT INTO "param" VALUES('staticdir','/etc/munin/static');
INSERT INTO "param" VALUES('tls_certificate','/etc/munin/munin.pem');
INSERT INTO "param" VALUES('carbon_prefix','');
INSERT INTO "param" VALUES('contact.syslog.command','dd if=/dev/stdin of=/tmp/munin-limits.log');
INSERT INTO "param" VALUES('carbon_server','');
INSERT INTO "param" VALUES('debug','1');
INSERT INTO "param" VALUES('graph_strategy','cron');
INSERT INTO "param" VALUES('screen','1');
CREATE TABLE grp (id INTEGER PRIMARY KEY, p_id INTEGER REFERENCES grp(id), name VARCHAR, path VARCHAR);
INSERT INTO "grp" VALUES(1,NULL,'fnord.no','fnord.no');
INSERT INTO "grp" VALUES(2,NULL,'example.com','example.com');
CREATE TABLE node (id INTEGER PRIMARY KEY, grp_id INTEGER REFERENCES grp(id), name VARCHAR, path VARCHAR);
INSERT INTO "node" VALUES(1,1,'dhole.fnord.no','fnord.no;dhole.fnord.no');
INSERT INTO "node" VALUES(2,2,'virtual.example.com','example.com;virtual.example.com');
CREATE TABLE node_attr (id INTEGER REFERENCES node(id), name VARCHAR, value VARCHAR);
CREATE TABLE service (id INTEGER PRIMARY KEY, node_id INTEGER REFERENCES node(id), name VARCHAR, path VARCHAR, service_title VARCHAR, graph_info VARCHAR, subgraphs INTEGER);
CREATE TABLE service_attr (id INTEGER REFERENCES service(id), name VARCHAR, value VARCHAR);
CREATE TABLE service_categories (id INTEGER REFERENCES service(id), category VARCHAR NOT NULL, PRIMARY KEY (id,category));
CREATE TABLE ds (id INTEGER PRIMARY KEY, service_id INTEGER REFERENCES service(id), name VARCHAR, path VARCHAR,
type VARCHAR DEFAULT 'GAUGE',
ordr INTEGER DEFAULT 0,
unknown INTEGER DEFAULT 0, warning INTEGER DEFAULT 0, critical INTEGER DEFAULT 0);
CREATE TABLE ds_attr (id INTEGER REFERENCES ds(id), name VARCHAR, value VARCHAR);
CREATE TABLE url (id INTEGER NOT NULL, type VARCHAR NOT NULL, path VARCHAR NOT NULL, PRIMARY KEY(id,type));
INSERT INTO "url" VALUES(1,'group','fnord.no');
INSERT INTO "url" VALUES(1,'node','fnord.no/dhole.fnord.no');
INSERT INTO "url" VALUES(2,'group','example.com');
INSERT INTO "url" VALUES(2,'node','example.com/virtual.example.com');
INSERT INTO "url" VALUES(4,'service','example.com/virtual.example.com/foo');
CREATE TABLE state (id INTEGER, type VARCHAR,
last_epoch INTEGER, last_value VARCHAR,
prev_epoch INTEGER, prev_value VARCHAR,
alarm VARCHAR
);
CREATE INDEX r_g_grp ON grp (p_id);
CREATE UNIQUE INDEX pk_node_attr ON node_attr (id, name);
CREATE INDEX r_n_grp ON node (grp_id);
CREATE UNIQUE INDEX pk_service_attr ON service_attr (id, name);
CREATE INDEX r_s_node ON service (node_id);
CREATE UNIQUE INDEX pk_ds_attr ON ds_attr (id, name);
CREATE INDEX r_d_service ON ds (service_id);
CREATE UNIQUE INDEX u_url_path ON url (path);
CREATE UNIQUE INDEX pk_state ON state (type, id);
COMMIT;
+1 that one is hitting hard, as most of my useful munin stats are based on virtual nodes :)