Utility scripts to work with JSONNET and monitoring resource mixins.
- Grafana dashboards
- Prometheus alert and recording rules
At the moment just a few utilities to work with Grafana dashboard and Prometheus alarm definition mixins.
Convert YAML rules to JSONNET format.
Usage: jsonnet-utils-prometheus-convert [OPTIONS]
Options:
| --source-path TEXT | |
| Path to search for the source YAML rules. | |
| --build-path TEXT | |
| Path to save converted JSONNET dashboards, none to print to console. | |
Example usage:
jsonnet-utils-prometheus-convert --source-path=../data/alarms --build-path=./build Searching path `../data/alarms` for YAML rule definitions to convert ... Converted rules file `../data/alarms/alarms.yml` to `./build/alarms.jsonnet`.
Example result JSONNET definition:
{
prometheusAlerts+:: {
groups+: [
{
name: 'kubernetes-apps',
rules: [
{
alert: 'KubePodCrashLooping',
annotations: {
message: 'Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container }}) is restarting {{ printf "%.2f" $value }} times / 5 minutes.',
},
expr: 'rate(kube_pod_container_status_restarts_total{kubernetes_name="kube-state-metrics"}[15m]) * 60 * 5 > 0\n',
'for': '1h',
labels: {
severity: 'critical',
},
},
{
alert: 'KubePodNotReady',
annotations: {
message: 'Pod {{ $labels.namespace }}/{{ $labels.pod }} has been in a non-ready state for longer than an hour.',
},
expr: 'sum by (namespace, pod) (kube_pod_status_phase{kubernetes_name="kube-state-metrics", phase=~"Pending|Unknown"}) > 0\n',
'for': '1h',
labels: {
severity: 'critical',
},
},
],
},
]
}
}
Convert JSON dashboards to JSONNET format.
Usage: jsonnet-utils-grafana-convert [OPTIONS]
Options:
| --source-path TEXT | |
| Path to search for the source JSON dashboards. | |
| --build-path TEXT | |
| Path to save converted JSONNET dashboards, none to print to console. | |
| --format TEXT | Format of the dashboard: grafonnet or grafana-builder. |
| --layout TEXT | Format of the dashboard: normal (scheme 14) , grid (scheme 16). |
Example usage:
jsonnet-utils-grafana-convert --source-path=./tests/data --build-path ./build Searching path `./tests/data` for JSON dashboards to convert ... Converted dashboard `./tests/data/server-single_rev3.json` to `./build/server-single_rev3.jsonnet` Converted dashboard `./tests/data/prometheus-redis_rev1.json` to `./build/prometheus-redis_rev1.jsonnet`
Example result JSONNET definition:
local grafana = import 'grafonnet/grafana.libsonnet';
local dashboard = grafana.dashboard;
local row = grafana.row;
local prometheus = grafana.prometheus;
local template = grafana.template;
local graphPanel = grafana.graphPanel;
{
grafanaDashboards+:: {
'prometheus-redis_rev1.json':
dashboard.new(
'Prometheus Redis', tags=[]
)
.addTemplate('addr', 'label_values(redis_connected_clients, addr)', 'instance')
.addRow(
row.new()
.addPanel(
singlestat.new(
'Uptime',
datasource='$datasource',
span=1,
format='s',
valueName='current',
)
)
.addTarget(
prometheus.target(
|||
redis_uptime_in_seconds{addr="$addr"}
||| % $._config,
legendFormat='',
)
)
.addPanel(
singlestat.new(
'Clients',
datasource='$datasource',
span=1,
format='none',
valueName='current',
)
)
.addTarget(
prometheus.target(
|||
redis_connected_clients{addr="$addr"}
||| % $._config,
legendFormat='',
)
)
)
}
}
Get info from Grafana JSON dashboards.
Usage: jsonnet-utils-grafana-info [OPTIONS]
Options:
| --path TEXT | Path to search for the source JSON dashboards. |
Example usage:
jsonnet-utils-grafana-info --path=./tests/data
Searching path `./tests/data` for JSON dashboards for detailed info ...
server-single_rev3.json:
title: Linux host
schema-version: 14
variables:
count: 1
items:
- host (query)
panels:
count: 7
items:
- DISK partitions (graph)
- Processes (graph)
- swap (graph)
- CPU usage (graph)
- RAM (graph)
- IP traffic (graph)
- system: load (5m) (graph)
prometheus-redis_rev1.json:
title: Prometheus Redis
schema-version: 12
variables:
count: 1
items:
- addr (query)
panels:
count: 11
items:
- Uptime (singlestat)
- Clients (singlestat)
- Memory Usage (singlestat)
- Commands Executed / sec (graph)
- Hits / Misses per Sec (graph)
- Total Memory Usage (graph)
- Network I/O (graph)
- Total Items per DB (graph)
- Expiring vs Not-Expiring Keys (graph)
- Expired / Evicted (graph)
- Command Calls / sec (graph)
Test JSONNET formatted dashboards.
Usage: jsonnet-utils-grafana-test [OPTIONS]
Options:
| --path TEXT | Path to search for the source JSON dashboards. |
| --scheme TEXT | Scheme version of the dashboard: 16 is the current. |
| --layout TEXT | Format of the dashboard: normal (scheme 14) , grid (scheme 16). |
Example usage:
jsonnet-utils-grafana-test --path=./tests/data 2018-11-28 00:50:02,298 [INFO ] Searching path `./tests/data` for JSON dashboards to test ... 2018-11-28 00:50:02,298 [INFO ] Testing dashboard `server-single_rev3.json` ... OK 2018-11-28 00:50:02,299 [INFO ] Testing dashboard `prometheus-redis_rev1.json` ... OK
Get Prometheus metric names from Grafana JSON dashboard targets.
Usage: jsonnet-utils-grafana-metrics [OPTIONS]
Options:
| --path TEXT | Path to search for the source JSON dashboards. |
Example usage:
jsonnet-utils-grafana-metrics --path=./tests/source Searching path `./tests/source` for JSON dashboards for targets ... prometheus-redis_rev1.json: - redis_command_call_duration_seconds_count - redis_commands_processed_total - redis_config_maxmemory - redis_connected_clients - redis_db_keys - redis_db_keys_expiring - redis_evicted_keys_total - redis_expired_keys_total - redis_keyspace_hits_total - redis_keyspace_misses_total - redis_memory_used_bytes - redis_net_input_bytes_total - redis_net_output_bytes_total - redis_uptime_in_seconds
- Convert row based layout to grid layout
- Support for Prometheus, InfluxDB and ElasticSearch datasources
- Testing of JSONNET sources and built resources