Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Will poll metrics from a Pihole server via lex-pihole and send it to an influxdb server.

Requirements - both the influxdb and pihole lex need to be installed on at least a single Legion node

Grab the functions

SELECT functions.id, extensions.name, runners.name, functions.name 
FROM `extensions`
INNER JOIN runners on extensions.id = runners.extension_id
INNER JOIN functions on runners.id = functions.runner_id
WHERE extensions.name in ('pihole', 'influxdb')
  and runners.name IN ('writer', 'api')
  AND functions.name in ('summary', 'write_points')
  
# pihole functions.id = 213 in this example
# influxdb functions.id = 9 in this example
INSERT INTO chains (name, active) VALUES ('pihole stats to influxdb', 1);
# replace chain_id 1 with the actual result
INSERT INTO relationships (name, active, chain_id, trigger_id, action_id, transformation)
VALUES ('pihole stats to influxdb', 1, 1, 213, 9, 'transformation from below');

# insert new schedule to make this thing run 
INSERT INTO schedules (function_id, active, interval, name, payload)
VALUES (213, 1, 10, 'pihole query every 10 seconds', '{"host":"127.0.0.1", "port":80}');

Transformation to insert as json string

{
	"host": "localhost",
	"port": 8086,
	"database": "pihole",
	"metrics": "{ 
  \"tags\": {
    \"host\": \"127.0.0.1\"
  },
  \"values\":{
    \"domains_being_blocked\": <%= results[:domains_being_blocked].delete(',').to_i %>,
    \"dns_queries_today\": <%= results[:dns_queries_today].delete(',').to_i %>,
    \"ads_blocked_today\": <%= results[:ads_blocked_today].delete(',').to_i %>,
    \"ads_percentage_today\": <%= results[:ads_percentage_today].delete(',').to_f %>,
    \"unique_domains\": <%= results[:unique_domains].delete(',').to_i %>,
    \"queries_forwarded\": <%= results[:queries_forwarded].delete(',').to_i %>,
    \"queries_cached\": <%= results[:queries_cached].delete(',').to_i %>,
    \"clients_ever_seen\": <%= results[:clients_ever_seen].delete(',').to_i %>,
    \"unique_clients\": <%= results[:unique_clients].delete(',').to_i %>,
    \"dns_queries_all_types\": <%= results[:dns_queries_all_types].delete(',').to_i %>,
    \"reply_NODATA\": <%= results[:reply_NODATA].delete(',').to_i %>,
    \"reply_NXDOMAIN\": <%= results[:reply_NXDOMAIN].delete(',').to_i %>,
    \"reply_CNAME\": <%= results[:reply_CNAME].delete(',').to_i %>,
    \"reply_IP\": <%= results[:reply_IP].delete(',').to_i %>,
    \"privacy_level\": <%= results[:privacy_level].to_i %>,
    \"status\": \"<%= results[:status] %>\",
  }
}"
}
  • No labels