Monitoring & Alerting in Rancher

In deze blog wordt beschreven hoe monitoring en alarmering binnen een cluster ingeschakeld kan worden met behulp van de nieuwe monitoringtoepassing van Rancher, die werd geïntroduceerd in Rancher v2.5.

Voordat van de nieuwe monitoring-functies gebruik gemaakt kan worden, moeten alle! monitoring / alarmering / notifiers in Cluster Manager uitgeschakeld worden (van de ‘oude’ versie van Rancher dus) voordat de nieuwe monitoring-functies gebruikt kunnen gaan worden via Cluster Explorer.

Monitoring

De rancher-monitoring operator wordt aangestuurd door Prometheus, Grafana, Alertmanager, de Prometheus Operator en de Prometheus-adapter.

Met Prometheus kunnen metrics van de verschillende Rancher- en Kubernetes-objecten bekeken worden. Met behulp van zogenaamde ‘timestamps’ kan met Prometheus deze statistieken worden opgevraagd en bekeken in eenvoudig te lezen grafieken en visuals. Het opvragen van de statistieken in Prometheus geschiedt middels PromQueries.

Met behulp van Grafana kunnen de statistieken opgevraagd en gevisualiseerd worden. Tevens kunnen er waarschuwingen (alerts) gegenereerd en verstuurd worden via notifiers.

Installatie

  1. Ga in de gebruikersinterface van Rancher naar het cluster waar monitoring ge-installeerd dient te worden en klik op Cluster Explorer.
  2. Klik op Apps & Marketplace.
  3. Klik op de Monitoring app.
  4. Optioneel: Klik op Chart options en configureer Prometheus, Grafana en AlertManager. Raadpleeg de configuratiereferentie voor hulp .
  5. Scrol naar de onderkant van de README en klik op Install.

Standaard implementeert Rancher Monitoring exporters (zoals node-exporter en kube-state-metrics ), evenals standaard Prometheus-alerts en Grafana-dashboards (samengesteld door het kube-prometheus- project) op het cluster. Om de monitoring en alerts functies te gebruiken, ga naar Monitoring vanuit het menu van de Rancher Explorer.

Alertmanager

Er worden een aantal standaard alerts aangemaakt tijdens de installatie en deze kunnen via de Prometheus Alertmanager bekeken worden. Hier kunnen filters toegepast worden om bepaalde alerts te zoeken.

Grafana

Hiermee kunnen dashboards bekeken en gemaakt worden om de ‘metrics’ inzichtelijk te maken.

Prometheus Graph

Met behulp van Prometheus Query Language (promQL) kunnen de metrics opgehaald en in real-time weergegeven worden in o.a. graphs en ‘tabular data’ in deze expression browser.

Prometheus Rules

De ‘rules’ worden gebruikt om de cluster statistieken te bewaken en om alerts uit te sturen indien bepaaalde waardes overschreden worden.

Prometheus Targets

Via de ‘targets’ worden de metrics ingesteld die door Prometheus gebruikt worden.


Instellen alerting

Via het menu van Cluster Explorer en de optie ‘Monitoring‘ verschijnt het volgende menu:

Service Monitors‘ definieert de groep services en de endpoints die Prometheus zal gebruiken voor de metrics. Dit is de meest gebruikelijke optie om het verzamelen van metrics te definiëren. ‘Pod Monitors‘ wordt alleen gebruikt in specifieke gevallen waar een ‘Service Monitor’ niet het gewenste resultaat biedt.

Receiver’ is wat voorheen als ‘Notifier’ aangeduid werd, Standaard is dat ‘null’ maar de volgende receivers kunnen toegevoegd worden:

  • Slack
  • Email
  • Webhook
  • Custom

Bijvoorbeeld een Slack receiver form:

Via ‘Route’ wordt aangegeven welke ‘Receiver’ gebruikt wordt voor een alert. Hierin worden ook de ‘Grouping’ parameters gedfinieerd (voorheen ‘Alert Groups’) en de ‘Mathing’ opties zoals bv. een key/value.

Bijvoorbeeld route-1 voor Cronjob Failures meldingen naar Slack:

Prometheus Rules

Via het menu ‘Monitoring‘ -> ‘Advanced‘ -> ‘Prometheus Rules‘ kunnen de recording en alert rules gedefinieerd worden. Bijvoorbeeld een alert-rule voor failed cronjobs:

De overeenkomende yaml-file voor deze alert rule:

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
   name: cronjob-failures
   namespace: cattle-monitoring-system
spec:
   groups:
   - name: cronjobs 
     rules: 
     - alert: cronjob-failure
       expr: kube_job_failed{condition="true",job_name=~"cronjob2-.+",namespace="nico-jobtest"} > 0
       for: 1m
       labels:
         severity: warning
       annotations:
         summary: Cronjob 2 Failure 

Uiteindelijk zal er dan een melding in Slack verschijnen als de Cronjob gefaald is: