Hoe u waarschuwingen en meldingen instelt met behulp van Alertmanager in een DOKS-cluster

Introductie

Waarschuwingen en meldingen zijn een essentieel onderdeel van uw implementatieworkflow. Bij het werken met een Kubernetes-cluster moet u vaak onmiddellijk op de hoogte worden gebracht van eventuele kritieke problemen in uw cluster.

Alertmanager maakt deel uit van de kube-prom-stack geïnstalleerd in uw cluster in Prometheus Stack. Hiermee kunt u waarschuwingen ontvangen van verschillende bronnen zoals Prometheus. Regels worden aan de Prometheus-kant gemaakt, die op hun beurt waarschuwingen kunnen activeren. Het is de verantwoordelijkheid van Alertmanager om die waarschuwingen te onderscheppen, ze te groeperen (aggregatie), andere transformaties toe te passen en ze uiteindelijk naar de geconfigureerde ontvangers te routeren. Meldingsberichten kunnen verder worden opgemaakt om indien gewenst aanvullende details op te nemen. U kunt Slack, Gmail, enz. gebruiken om realtime meldingen te verzenden.

In dit gedeelte leert u hoe u de bestaande waarschuwingen kunt inspecteren, nieuwe kunt maken en vervolgens Alertmanager kunt configureren om meldingen via Slack te verzenden met behulp van hetzelfde manifestbestand dat wordt gebruikt voor het configureren van Prometheus.

Inhoudsopgave

Vereisten

Om deze tutorial te voltooien, heb je nodig:

  • Een Prometheus monitoringstack geïnstalleerd in je cluster zoals uitgelegd in Prometheus Stack.
  • Een Loki stack geïnstalleerd in je cluster zoals uitgelegd in Loki Stack.
  • Emojivoto Voorbeeld App geïmplementeerd in de cluster. Volg alsjeblieft de stappen van het hoofdrepository. Je zult waarschuwingen voor deze applicatie aanmaken.
  • Beheersrechten over een Slack-werkruimte. Later zul je een applicatie maken met een inkomende webhook die zal worden gebruikt om meldingen van Alertmanager te verzenden.

Stap 1 – Controleer Inbegrepen Meldingen

kube-prom-stack heeft al meer dan honderd regels geactiveerd. Om toegang te krijgen tot de Prometheus-console, moet je eerst een doorstuurpoort naar je lokale machine doen.

kubectl --namespace monitoring port-forward svc/kube-prom-stack-kube-prome-prometheus 9091:9090

Open een webbrowser op localhost:9091 en ga naar het menu Meldingen. Je zou enkele vooraf gedefinieerde meldingen moeten zien en het zou er als volgt uit moeten zien:

Klik op een van de meldingen om deze uit te vouwen. Je kunt informatie zien over de expressie waarnaar het zoekt, de labels die zijn ingesteld en annotaties die erg belangrijk zijn vanuit een templateperspectief. Prometheus ondersteunt templating in de annotaties en labels van meldingen. Voor meer informatie bekijk de officiële documentatie.

Stap 2 – Een nieuwe waarschuwing maken

Om een nieuwe waarschuwing te maken, moet je een nieuwe definitie toevoegen in de additionalPrometheusRule-sectie van het kube-prom-stack Helm-waardenbestand.
Je gaat een voorbeeldwaarschuwing maken die wordt geactiveerd als de emojivoto-namespace niet het verwachte aantal instanties heeft. Het verwachte aantal pods voor de emojivoto-applicatie is 4.

Open eerst het bestand 04-setup-observability/assets/manifests/prom-stack-values.yaml dat wordt verstrekt in het Starter Kit repository, met een teksteditor naar keuze (bij voorkeur met YAML-lintondersteuning). Verwijder vervolgens het commentaar uit het additionalPrometheusRules-blok.

additionalPrometheusRulesMap:
  rule-name:
    groups:
    - name: emojivoto-instance-down
      rules:
        - alert: EmojivotoInstanceDown
          expr: sum(kube_pod_owner{namespace="emojivoto"}) by (namespace) < 4
          for: 1m
          labels:
            severity: 'critical'
          annotations:
            description: ' The Number of pods from the namespace {{ $labels.namespace }} is lower than the expected 4. '
            summary: 'Pod {{ $labels.pod }} down'

Tenslotte, pas de instellingen toe met behulp van helm:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Om te controleren of de waarschuwing succesvol is aangemaakt, navigeer je naar de Prometheus Console, klik je op het menu-item Waarschuwingen, en identificeer je de EmojivotioInstanceDown-waarschuwing. Deze zou onderaan de lijst zichtbaar moeten zijn.

Stap 3 – Configureer Alertmanager om meldingen naar Slack te sturen

Om dit gedeelte te voltooien, moet je beheerdersrechten hebben over een Slack-werkruimte. Dit stelt je in staat om de inkomende webhook te maken die je nodig hebt in de volgende stappen. Je moet ook een kanaal maken waar je meldingen van Alertmanager wilt ontvangen.
Je zult Alertmanager configureren om over alle ontvangen meldingen te gaan en hun respectieve samenvattingen en beschrijvingen op nieuwe regels af te drukken.

  1. Open een webbrowser en ga naar https://api.slack.com/apps. Klik op de Nieuwe app maken knop.
  2. In het Een app maken venster, selecteer de Vanaf het begin optie. Geef vervolgens je applicatie een naam en selecteer de juiste werkruimte.
  3. Op de Basisinformatie pagina, klik op de Inkomende webhooks optie, zet het aan, en klik op de Nieuwe webhook toevoegen aan werkruimte knop onderaan.
  4. Op de volgende pagina, gebruik de Zoek naar een kanaal… drop-down lijst om het gewenste kanaal te selecteren waar je meldingen wilt ontvangen. Klik vervolgens op de Toestaan knop wanneer je klaar bent.
  5. Kopieer de Webhook-URL die wordt weergegeven op de pagina. Je hebt deze nodig in het volgende gedeelte.

Vervolgens zul je Alertmanager vertellen hoe Slack-meldingen te verzenden. Open het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml dat wordt geleverd in de Starter Kit repository met een teksteditor naar keuze. Verwijder het hele alertmanager.config-blok. Zorg ervoor dat je de slack_api_url– en channel-waarden bijwerkt door de <>-placeholders dienovereenkomstig te vervangen.

alertmanager:
  enabled: true
  config:
    global:
      resolve_timeout: 5m
      slack_api_url: "<YOUR_SLACK_APP_INCOMING_WEBHOOK_URL_HERE>"
    route:
      receiver: "slack-notifications"
      repeat_interval: 12h
      routes:
        - receiver: "slack-notifications"
          # matchers:
          #   - alertname="EmojivotoInstanceDown"
          # continue: false
    receivers:
      - name: "slack-notifications"
        slack_configs:
          - channel: "#<YOUR_SLACK_CHANNEL_NAME_HERE>"
            send_resolved: true
            title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
            text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"

In de bovenstaande configuratie,

  • slack_api_url: inkomende Slack-webhook-URL aangemaakt in stap 4
  • receivers.[].slack_configs: definieert het Slack-kanaal dat wordt gebruikt om meldingen te verzenden, de meldingstitel en het daadwerkelijke bericht. Het is ook mogelijk om het meldingsbericht (of de inhoud) te formatteren op basis van uw vereisten.
  • title en text: doorloopt de actieve meldingen en geeft een samenvatting en beschrijving weer met behulp van het Prometheus-templatesysteem.
  • send_resolved: boolean die aangeeft of Alertmanager een melding moet sturen wanneer een waarschuwing niet meer actief is.

De parameters matcher en continue zijn nog steeds uitgeschakeld omdat u deze later in de handleiding zult inschakelen. Voor nu moet het uitgeschakeld blijven.

Tenslotte, upgrade de kube-prometheus-stack, met behulp van helm:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Op dit punt zou u Slack-meldingen moeten ontvangen voor alle actieve meldingen.

Hierna gaat u testen of de eerder toegevoegde EmojivotoInstanceDown-waarschuwing werkt en een melding naar Slack stuurt door het aantal replica’s voor de /emoji-implementatie van de emojivoto-namespace te verlagen.

Voer vanaf uw terminal het volgende commando uit om het aantal replica’s voor de /emoji-implementatie naar 0 te brengen:

kubectl scale --replicas=0 deployment/emoji -n emojivoto

Open een webbrowser op localhost:9091 en ga naar het menu-item Alerts. Zoek naar de eerder aangemaakte EmojivotoInstanceDown-melding. De status van de melding zou na ongeveer één minuut van het verkleinen van de implementatie Firing moeten zeggen.

A message notification will be sent to Slack to the channel you configured earlier if everything goes well. You should see the “The Number of pods from the namespace emojivoto is lower than the expected 4.” alert in the Slack message as configured in the annotations.description config of the additionalPrometheusRulesMap block.

Op dit moment worden alle meldingen naar het Slack-kanaal gestuurd. Dit kan leiden tot notificatievermoeidheid. Om te specificeren welke notificatie wordt verzonden, kunt u Alertmanager beperken om alleen meldingen te versturen voor meldingen die overeenkomen met een bepaald patroon. Dit wordt gedaan met behulp van de matcher-parameter.

Open het bestand 04-setup-observability/assets/manifests/prom-stack-values-v35.5.1.yaml dat wordt geleverd in de Starter Kit repository met een teksteditor naar keuze. Verwijder het hele alertmanager.config-blok. Zorg ervoor dat u de matcher– en de continue-parameters uitcommentarieert:

config:
  global:
    resolve_timeout: 5m
    slack_api_url: "<YOUR_SLACK_APP_INCOMING_WEBHOOK_URL_HERE>"
  route:
    receiver: "slack-notifications"
    repeat_interval: 12h
    routes:
      - receiver: "slack-notifications"
        matchers:
          - alertname="EmojivotoInstanceDown"
        continue: false
  receivers:
    - name: "slack-notifications"
      slack_configs:
        - channel: "#<YOUR_SLACK_CHANNEL_NAME_HERE>"
          send_resolved: true
          title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}"
          text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}"

Tenslotte, upgrade de kube-prometheus-stack, met behulp van helm:

HELM_CHART_VERSION="35.5.1"

helm upgrade kube-prom-stack prometheus-community/kube-prometheus-stack --version "${HELM_CHART_VERSION}" \
--namespace monitoring \
-f "04-setup-observability/assets/manifests/prom-stack-values-v${HELM_CHART_VERSION}.yaml"

Vanaf nu zou u alleen meldingen moeten ontvangen van de overeenkomende meldingsnaam EmojivotoInstanceDown. Aangezien continue is ingesteld op false, zal Alertmanager alleen meldingen van deze melding verzenden en stoppen met het verzenden ervan naar andere.

Als je op de meldingsnaam in Slack klikt, wordt er een webbrowser geopend naar een onbereikbare webpagina met de interne Kubernetes DNS van de Alertmanager-pod. Dit is normaal. Enkele handige links om te bekijken: Voor meer informatie kun je de DNS-podservice, Configuratieparameters voor AlertManager en enkele Voorbeelden van meldingen controleren.

Stap 4 – Problemen oplossen bij een actieve melding

Wanneer een melding wordt afgegeven en een notificatie naar Slack stuurt, is het belangrijk dat je het probleem gemakkelijk kunt oplossen en snel de oorzaak kunt vinden. Om dit te doen, kun je gebruikmaken van Grafana, dat al is geïnstalleerd in de Prometheus Stack– en Loki Stack-tutorials.

Maak een poortdoorsturing voor Grafana op poort 3000:

kubectl --namespace monitoring port-forward svc/kube-prom-stack-grafana 3000:80

Open een webbrowser op localhost:3000 en log in met de standaardreferenties admin/prom-operator.

Navigeer naar de sectie Waarschuwingen. Klik vanuit het filter Toestand op de optie Actief. Identificeer de emojivoto-instance-down waarschuwing gedefinieerd in de sectie Een Nieuwe Waarschuwing Maken en breid deze uit. Je zou het volgende moeten zien:

Klik op de knop Grafiek Bekijken. Op de volgende pagina kan je het aantal pods in de emojivoto namespace observeren weergegeven als een metriek. Let op dat Grafana standaard resultaten filtert met een tijdsbereik van Laatste 1 uur. Pas dit aan naar het tijdsinterval wanneer de waarschuwing wordt geactiveerd. Je kan het tijdsbereik aanpassen met behulp van een Van Tot optie voor een meer gedetailleerd resultaat of met Snelle Bereik zoals Laatste 30 minuten.

Selecteer vanuit het tabblad Verkennen de Loki gegevensbron. Voer in de Logbrowser de volgende query in: {namespace="emojivoto"} en klik op de knop Query Uitvoeren rechtsboven op de pagina. Je zou het volgende moeten zien:

Zorg ervoor dat je het tijdsinterval dienovereenkomstig aanpast.

Vanaf deze pagina kan je de logresultaten verder filteren. Bijvoorbeeld, om de logs te filteren voor de web-svc container van de emojivoto namespace, kan je de volgende query invoeren: {namespace="emojivoto", container="web-svc"}

Meer uitleg over het gebruik van LogQL kan worden gevonden in Stap 3 – LogQL Gebruiken.

Je kunt ook gebruik maken van de eerder geïnstalleerde Geëxporteerde Kubernetes-gebeurtenissen en filteren op gebeurtenissen die verband houden met de emojivoto-namespace.

Voer de volgende query in de logbrowser in: {app="event-exporter"} |= "emojivoto". Hiermee worden de Kubernetes-gebeurtenissen gerelateerd aan de emojivoto-namespace geretourneerd.

Conclusie

In deze tutorial heb je geleerd hoe je bestaande waarschuwingen kunt inspecteren, nieuwe kunt maken en AlertManager kunt configureren om meldingen naar Slack te sturen.

Meer leren

De volgende stap is het instellen van Backup en Herstel met behulp van Velero of TrilioVault in uw DOKS-cluster.

Source:
https://www.digitalocean.com/community/developer-center/how-to-set-up-alerts-and-notification-using-alertmanager-in-doks-cluster