check all alarms have an update frequency; check that alarms do have an update frequency less than the chart they are linked; charts expose their update frequency as variables; added apache health check
Costa Tsaousis committed
Aug 20, 2016 at 22:30 UTC
db0bdeaa3da46fdb90883a946190328e6620cb1a
4 files changed
+22
-4
conf.d/health.d/apache.conf
new
+10
@@ -0,0 +1,10 @@
1
+
2
+# make sure apache is running
3
+
4
+template: apache_last_collected_secs
5
+ on: apache.requests
6
+ calc: $now - $last_collected_t
7
+ every: 10s
8
+ warn: $this > ( 5 * $update_every)
9
+ crit: $this > (10 * $update_every)
10
+
src/health.c
+10
-4
@@ -113,29 +113,30 @@ calculated_number rrdvar2number(RRDVAR *rv) {
113
calculated_number *n = (calculated_number *)rv->value;
114
return *n;
115
}
116
- break;
116
117
case RRDVAR_TYPE_TIME_T: {
118
time_t *n = (time_t *)rv->value;
119
return *n;
120
}
122
- break;
121
122
case RRDVAR_TYPE_COLLECTED: {
123
collected_number *n = (collected_number *)rv->value;
124
return *n;
125
}
128
- break;
126
127
case RRDVAR_TYPE_TOTAL: {
128
total_number *n = (total_number *)rv->value;
129
return *n;
130
}
131
132
+ case RRDVAR_TYPE_INT: {
133
+ int *n = (int *)rv->value;
134
+ return *n;
135
+ }
136
+
137
default:
138
error("I don't know how to convert RRDVAR type %d to calculated_number", rv->type);
139
return NAN;
138
- break;
140
}
141
}
142
@@ -419,6 +420,11 @@ static void rrdsetcalc_link(RRDSET *st, RRDCALC *rc) {
420
421
rc->rrdset = st;
422
423
+ if(rc->update_every < rc->rrdset->update_every) {
424
+ error("Health alarm '%s.%s' has update every %d, less than chart update every %d. Setting alarm update frequency to %d.", rc->rrdset->id, rc->name, rc->update_every, rc->rrdset->update_every, rc->rrdset->update_every);
425
+ rc->update_every = rc->rrdset->update_every;
426
+ }
427
+
428
if(rc->green && !st->green)
429
st->green = rc->green;
430
src/health.h
+1
@@ -9,6 +9,7 @@ extern int rrdvar_compare(void *a, void *b);
9
#define RRDVAR_TYPE_TIME_T 2
10
#define RRDVAR_TYPE_COLLECTED 3
11
#define RRDVAR_TYPE_TOTAL 4
12
+#define RRDVAR_TYPE_INT 5
13
14
// the variables as stored in the variables indexes
15
// there are 3 indexes:
src/rrd.c
+1
@@ -558,6 +558,7 @@ RRDSET *rrdset_create(const char *type, const char *id, const char *name, const
558
rrdsetvar_create(st, "collected_total_raw", RRDVAR_TYPE_TOTAL, &st->last_collected_total, 0);
559
rrdsetvar_create(st, "green", RRDVAR_TYPE_CALCULATED, &st->green, 0);
560
rrdsetvar_create(st, "red", RRDVAR_TYPE_CALCULATED, &st->red, 0);
561
+ rrdsetvar_create(st, "update_every", RRDVAR_TYPE_INT, &st->update_every, 0);
562
}
563
564
rrdset_index_add(&localhost, st);