@@ -5,6 +5,7 @@ rule_files:
55evaluation_interval : 1m
66
77tests :
8+ # PersistentVolume disk space
89- interval : 1m
910 input_series :
1011 - series : ' kubelet_volume_stats_available_bytes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
@@ -199,6 +200,201 @@ tests:
199200 - eval_time : 61m
200201 alertname : KubePersistentVolumeFillingUp
201202
203+ # PersistentVolume inodes
204+ - interval : 1m
205+ input_series :
206+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
207+ values : ' 1024 512 64 16'
208+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
209+ values : ' 1024 1024 1024 1024'
210+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
211+ values : ' 16 64 512 1024'
212+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadWriteOnce", service="kube-state-metrics"}'
213+ values : ' 1 1 1 1'
214+ alert_rule_test :
215+ - eval_time : 1m
216+ alertname : KubePersistentVolumeInodesFillingUp
217+ - eval_time : 2m
218+ alertname : KubePersistentVolumeInodesFillingUp
219+ - eval_time : 3m
220+ alertname : KubePersistentVolumeInodesFillingUp
221+ - eval_time : 4m
222+ alertname : KubePersistentVolumeInodesFillingUp
223+ exp_alerts :
224+ - exp_labels :
225+ job : kubelet
226+ namespace : monitoring
227+ persistentvolumeclaim : somepvc
228+ severity : critical
229+ exp_annotations :
230+ summary : " PersistentVolumeInodes are filling up."
231+ description : ' The PersistentVolume claimed by somepvc in Namespace monitoring only has 1.562% free inodes.'
232+ runbook_url : https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeinodesfillingup
233+
234+ # Don't alert when PVC access_mode is ReadOnlyMany
235+ - interval : 1m
236+ input_series :
237+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
238+ values : ' 1024 512 64 16'
239+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
240+ values : ' 1024 1024 1024 1024'
241+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
242+ values : ' 16 64 512 1024'
243+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadOnlyMany", service="kube-state-metrics"}'
244+ values : ' 1 1 1 1'
245+ alert_rule_test :
246+ - eval_time : 1m
247+ alertname : KubePersistentVolumeInodesFillingUp
248+ - eval_time : 2m
249+ alertname : KubePersistentVolumeInodesFillingUp
250+ - eval_time : 3m
251+ alertname : KubePersistentVolumeInodesFillingUp
252+ - eval_time : 4m
253+ alertname : KubePersistentVolumeInodesFillingUp
254+
255+ # Block volume mounts can report 0 for the kubelet_volume_stats_inodes_used metric but it shouldn't trigger the KubePersistentVolumeInodesFillingUp alert.
256+ # See https://github.com/kubernetes/kubernetes/commit/b997e0e4d6ccbead435a47d6ac75b0db3d17252f for details.
257+ - interval : 1m
258+ input_series :
259+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
260+ values : ' 1024 512 64 16'
261+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
262+ values : ' 1024 1024 1024 1024'
263+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
264+ values : ' 0 0 0 0'
265+ alert_rule_test :
266+ - eval_time : 1m
267+ alertname : KubePersistentVolumeInodesFillingUp
268+ - eval_time : 2m
269+ alertname : KubePersistentVolumeInodesFillingUp
270+ - eval_time : 3m
271+ alertname : KubePersistentVolumeInodesFillingUp
272+ - eval_time : 4m
273+ alertname : KubePersistentVolumeInodesFillingUp
274+
275+ # Don't alert when PVC has been labelled as fully utilised
276+ - interval : 1m
277+ input_series :
278+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
279+ values : ' 1024 512 64 16'
280+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
281+ values : ' 1024 1024 1024 1024'
282+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
283+ values : ' 16 64 512 1024'
284+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadWriteOnce", service="kube-state-metrics"}'
285+ values : ' 1 1 1 1'
286+ - series : ' kube_persistentvolumeclaim_labels{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc",label_excluded_from_alerts="true"}'
287+ values : ' 1 1 1 1'
288+ alert_rule_test :
289+ - eval_time : 1m
290+ alertname : KubePersistentVolumeInodesFillingUp
291+ - eval_time : 2m
292+ alertname : KubePersistentVolumeInodesFillingUp
293+ - eval_time : 3m
294+ alertname : KubePersistentVolumeInodesFillingUp
295+ - eval_time : 4m
296+ alertname : KubePersistentVolumeInodesFillingUp
297+
298+ - interval : 1m
299+ input_series :
300+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
301+ values : ' 1024-10x61'
302+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
303+ values : ' 32768+0x61'
304+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
305+ values : ' 1024+10x61'
306+ alert_rule_test :
307+ - eval_time : 1h
308+ alertname : KubePersistentVolumeInodesFillingUp
309+ exp_alerts :
310+ - exp_labels :
311+ job : kubelet
312+ namespace : monitoring
313+ persistentvolumeclaim : somepvc
314+ severity : critical
315+ exp_annotations :
316+ summary : " PersistentVolumeInodes are filling up."
317+ description : ' The PersistentVolume claimed by somepvc in Namespace monitoring only has 1.294% free inodes.'
318+ runbook_url : https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeinodesfillingup
319+
320+ - interval : 1m
321+ input_series :
322+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
323+ values : ' 1024-10x61'
324+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
325+ values : ' 32768+0x61'
326+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
327+ values : ' 1024+10x61'
328+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadWriteOnce", service="kube-state-metrics"}'
329+ values : ' 1x61'
330+ alert_rule_test :
331+ - eval_time : 61m
332+ alertname : KubePersistentVolumeInodesFillingUp
333+ exp_alerts :
334+ - exp_labels :
335+ job : kubelet
336+ namespace : monitoring
337+ persistentvolumeclaim : somepvc
338+ severity : warning
339+ exp_annotations :
340+ summary : " PersistentVolumeInodes are filling up."
341+ description : ' Based on recent sampling, the PersistentVolume claimed by somepvc in Namespace monitoring is expected to run out of inodes within four days. Currently 1.263% of its inodes are free.'
342+ runbook_url : https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeinodesfillingup
343+ - exp_labels :
344+ job : kubelet
345+ namespace : monitoring
346+ persistentvolumeclaim : somepvc
347+ severity : critical
348+ exp_annotations :
349+ summary : " PersistentVolumeInodes are filling up."
350+ description : ' The PersistentVolume claimed by somepvc in Namespace monitoring only has 1.263% free inodes.'
351+ runbook_url : https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepersistentvolumeinodesfillingup
352+
353+ # Block volume mounts can report 0 for the kubelet_volume_stats_inodes_used metric but it shouldn't trigger the KubePersistentVolumeInodesFillingUp alert.
354+ # See https://github.com/kubernetes/kubernetes/commit/b997e0e4d6ccbead435a47d6ac75b0db3d17252f for details.
355+ - interval : 1m
356+ input_series :
357+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
358+ values : ' 1024-10x61'
359+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
360+ values : ' 32768+0x61'
361+ - series : ' kubelet_volume_stats_inodes_used{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
362+ values : ' 0x61'
363+ alert_rule_test :
364+ - eval_time : 61m
365+ alertname : KubePersistentVolumeInodesFillingUp
366+
367+ # Don't alert when PVC access_mode is ReadOnlyMany
368+ - interval : 1m
369+ input_series :
370+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
371+ values : ' 1024-10x61'
372+ - series : ' kubelet_volume_stats_inodes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
373+ values : ' 32768+0x61'
374+ - series : ' kubelet_volume_stats_used_bytes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
375+ values : ' 1x61'
376+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadOnlyMany", service="kube-state-metrics"}'
377+ values : ' 1x61'
378+ alert_rule_test :
379+ - eval_time : 61m
380+ alertname : KubePersistentVolumeInodesFillingUp
381+
382+ - interval : 1m
383+ input_series :
384+ - series : ' kubelet_volume_stats_inodes_free{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
385+ values : ' 1024-10x61'
386+ - series : ' kubelet_volume_stats_capacity_bytes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
387+ values : ' 32768+0x61'
388+ - series : ' kubelet_volume_stats_used_bytes{job="kubelet",namespace="monitoring",persistentvolumeclaim="somepvc"}'
389+ values : ' 1024+10x61'
390+ - series : ' kube_persistentvolumeclaim_access_mode{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc", access_mode="ReadWriteOnce", service="kube-state-metrics"}'
391+ values : ' 1x61'
392+ - series : ' kube_persistentvolumeclaim_labels{job="ksm",namespace="monitoring",persistentvolumeclaim="somepvc",label_excluded_from_alerts="true"}'
393+ values : ' 1x61'
394+ alert_rule_test :
395+ - eval_time : 61m
396+ alertname : KubePersistentVolumeInodesFillingUp
397+
202398- interval : 1m
203399 input_series :
204400 - series : ' kube_node_status_capacity{resource="pods",instance="172.17.0.5:8443",node="minikube",job="kube-state-metrics", namespace="kube-system"}'
0 commit comments