File tree Expand file tree Collapse file tree 4 files changed +147
-0
lines changed
Expand file tree Collapse file tree 4 files changed +147
-0
lines changed Original file line number Diff line number Diff line change 1+ #PromSonnet
2+
3+ ` PromSonnet ` is intended as a very simple library for creating Prometheus
4+ alerts and rules. It is 'patching friendly', as in, it maintains the
5+ rules internally as a map, which allows users to easily patch alerts and
6+ recording rules after the fact. In contrast, lists require complex
7+ iteration logic.
8+
9+ Take this example:
10+
11+ ```
12+ local prom = import 'prom.libsonnet';
13+ local promRuleGroupSet = prom.v1.ruleGroupSet;
14+ local promRuleGroup = prom.v1.ruleGroup;
15+ {
16+ prometheus_metamon::
17+ promRuleGroup.new('prometheus_metamon')
18+ + promRuleGroup.rule.newAlert(
19+ 'PrometheusDown', {
20+ expr: 'up{job="prometheus"}==0',
21+ 'for': '5m',
22+ labels: {
23+ namespace: 'prometheus',
24+ severity: 'critical',
25+ },
26+ annotations: {
27+ },
28+ }
29+ ),
30+
31+ prometheusAlerts+:
32+ promRuleGroupSet.new()
33+ + promRuleGroupSet.addGroup($.prometheus_metamon),
34+ }
35+ ```
36+
37+ If we wanted to change the ` for ` from ` 5m ` to ` 10m ` , we could do this
38+ simply with code such as:
39+
40+ ```
41+ {
42+ prometheusAlerts+: {
43+ groups_map+:: {
44+ prometheus_metamon+:: {
45+ rules+:: {
46+ PrometheusDown+:: {
47+ for: '10m',
48+ },
49+ },
50+ },
51+ },
52+ },
53+ }
54+ ```
55+
56+ We no longer need to iterate over all alerts to do so.
57+
58+ You can execute either of these examples in the ` promsonnet ` directory
59+ via:
60+ ```
61+ $ jsonnet example.jsonnet
62+ $ # or:
63+ $ jsonnet patch.jsonnet
64+ ```
Original file line number Diff line number Diff line change 1+ local prom = import 'prom.libsonnet' ;
2+ local promRuleGroupSet = prom.v1.ruleGroupSet;
3+ local promRuleGroup = prom.v1.ruleGroup;
4+ {
5+ prometheus_metamon::
6+ promRuleGroup.new('prometheus_metamon' )
7+ + promRuleGroup.rule.newAlert(
8+ 'PrometheusDown' , {
9+ expr: 'up{job="prometheus"} == 0' ,
10+ 'for' : '5m' ,
11+ labels: {
12+ namespace: 'prometheus' ,
13+ severity: 'critical' ,
14+ },
15+ annotations: {
16+ },
17+ }
18+ ),
19+
20+ prometheusAlerts+:
21+ promRuleGroupSet.new()
22+ + promRuleGroupSet.addGroup($.prometheus_metamon),
23+ }
Original file line number Diff line number Diff line change 1+ local example = import 'example.jsonnet' ;
2+
3+ example {
4+ prometheusAlerts+: {
5+ groups_map+:: {
6+ prometheus_metamon+:: {
7+ rules_map+:: {
8+ PrometheusDown+:: {
9+ 'for' : '10m' ,
10+ },
11+ },
12+ },
13+ },
14+ },
15+ }
Original file line number Diff line number Diff line change 1+ {
2+ v1: {
3+ ruleGroupSet: {
4+ new():: {
5+ groups_map:: {},
6+ groups_order:: [],
7+ local groups_map = self .groups_map,
8+ local groups_order = self .groups_order,
9+ groups: [groups_map[group] for group in groups_order],
10+ },
11+ addGroup(group):: {
12+ groups_map+:: {
13+ [group.name]: group,
14+ },
15+ groups_order+:: [group.name],
16+ },
17+ },
18+
19+ ruleGroup: {
20+ new(name):: {
21+ name: name,
22+ rules_map:: {},
23+ rules_order:: [],
24+ local rules_map = self .rules_map,
25+ local rules_order = self .rules_order,
26+ rules: [rules_map[rule] for rule in rules_order],
27+ },
28+
29+ rule: {
30+ newAlert(name, rule):: {
31+ rules_map+:: {
32+ [name]: rule { alert: name },
33+ },
34+ rules_order+:: [name],
35+ },
36+ newRecording(name, rule):: {
37+ rules_map+:: {
38+ [name]: rule { record: name },
39+ },
40+ rules_order+:: [name],
41+ },
42+ },
43+ },
44+ },
45+ }
You can’t perform that action at this time.
0 commit comments