Beliebte Suchanfragen

Cloud Native

DevOps

IT-Security

Agile Methoden

Java

//

Kong API-Gateway – Observability mit Prometheus, Grafana und OpsGenie

19.12.2019 | 4 Minuten Lesezeit

Im vorherigen Blogpost habe ich das bestehende Demo-Setup um decK und Konga erweitert. Nun soll es darum gehen, die vorhandenen Daten der APIs sichtbarer werden zu lassen. Hierzu möchte ich zwei Observability Patterns, nämlich Monitoring und Alerting, in Verbindung mit einem API-Gateway, im Speziellen Kong, betrachten. Doch was bedeutet eigentlich Observability?

Observability

Der Begriff Observability stammt ursprünglich aus der mathematischen Kontrolltheorie und ist eine Messgröße, die Rückschlüsse auf den inneren Zustand eines Systems zulassen soll. Geprägt wurde dieser Begriff von Robert E. Kalman. Dies kann auch auf Applikationen als Systeme übertragen werden. Im Folgenden wird das API-Gateway die Rolle eines zu beobachteten Systems einnehmen. Um nun die entsprechenden Patterns anwenden zu können, werde ich auf die darauffolgenden Tools zurückgreifen und diese jeweils kurz erläutern.

Monitoring

Beim Monitoring befassen wir uns mit der Überwachung von Metriken, was in unserem Fall die Güte einer Verbindung bei Verwendung einer bestimmten Route meint. Diese Metriken erfassen wir mittels Prometheus und eines entsprechenden Kong-Plug-ins (https://docs.konghq.com/hub/kong-inc/prometheus/ ). Das Plug-in wird am Service mithilfe von decK eingerichtet. Dazu wird unter plugins: die YAML-Datei um folgende Einträge erweitert.

1- name: prometheus
2    enabled: true
3    run_on: first
4    protocols:
5    - grpc
6    - grpcs
7    - http
8    - https

Prometheus

Um Prometheus starten zu können, muss es noch zur docker-compose-Datei hinzugefügt werden.

1prometheus:
2    image: prom/prometheus
3    container_name: prometheus
4    restart: always
5    volumes: 
6      - ./prometheus.yml:/etc/prometheus/prometheus.yml
7    command: "--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus"
8    ports: 
9      - 9090:9090

Es muss eine Konfiguration mittels prometheus.yml erstellt werden.

1global:
2  scrape_interval:      15s
3  evaluation_interval:  15s
4
5scrape_configs:
6  - job_name: 'prometheus' 
7    metrics_path: /metrics
8    honor_labels: false
9    honor_timestamps: true
10    sample_limit: 0
11    static_configs:
12      - targets: ['localhost:9090','host.docker.internal:8001']

Nach dem Aufruf von „docker-compose up“ startet Prometheus und steht unter http://localhost:9090 zur Verfügung. Da die Oberfläche sehr spartanisch ist und sich hauptsächlich für schnelle Abfragen und Debugging eignet, kommt ein weiteres Tool ins Spiel, Grafana.

Tipp: Wenn du dich mehr mit API Management beschäftigen oder das Thema deinem Team näher bringen möchtest, lohnt sich ein Blick auf unser kostenloses Event-Angebot „Brown Paper Bag Lunch“. Unsere Experten besuchen euch inhouse, bringen Lunch mit und erklären das Thema en detail. Es gibt auch verschiedene Menüs, aus denen du auswählen kannst: https://info.codecentric.de/api-management-lunch

Grafana

Wie Prometheus ist auch Grafana ein Open-Source Produkt. Grafana versetzt den User in die Lage, Dashboards für das Monitoring von Systemen zu erstellen.

Hierzu füge ich Grafana ebenfalls zur vorhandenen docker-compose-Datei hinzu.

1grafana:
2    image: grafana/grafana
3    container_name: grafana
4    restart: always
5    volumes: 
6      - ./grafana/provisioning/:/etc/grafana/provisioning
7    ports:
8      - 3000:3000

Im Unterordner grafana/provisioningbefinden sich die Konfiguration für die möglichen vorgefertigten Dashboards und Datasources. Für Kong greife ich auf das offizielle Grafana Dashboard von Kong zurück. Dieses ist auch im Unterordner hinterlegt.

Mit docker-compose upstarte ich Grafana und es steht unter http://localhost:3000 im Anschluss zur Verfügung. Nach der Anmeldung mittels admin:administ der Aufruf des Dashboards „Kong (official)“ möglich.

Alerting

Zu diesem Zeitpunkt ist eine Monitoring-Lösung für das API-Gateway integriert. Was noch fehlt, sind Hinweise und Warnungen, wenn das Gateway vorher vereinbarte Schwellenwerte erreicht. Genau damit eröffnet sich der Weg in Richtung Alerting. Für die Beispielarchitektur gilt es nun ein entsprechendes Alerting auf Basis von Grafana herzustellen. Dies könnte auch über Prometheus erfolgen, hierzu müsste ein weiterer Container zur Multi-Container-Umgebung hinzugefügt werden.

Als erstes werde ich nun einen Notification Channel angelegen, und zwar konkret für OpsGenie. Auf dem Bild sind noch viele weitere Kanäle erkennbar. Für die Integration mit OpsGenie wird ein API-Key und eine URL benötigt.

Des Weiteren lege ich noch ein neues Dashboard mit einem neuen Panel an. Als Metrik sollen alle HTTP Status Code vom Typ 401 erfasst werden. Als Alert lege ich einen Schwellenwert fest, der im Beispiel entweder dem Typ max() oder avg() zuzuordnen ist. Zum Schluss muss nur noch der entsprechende Notification Channel ausgewählt werden. Ebenso können zusätzliche Nachrichten oder Tags hinterlegt werden. Somit ist die Konfiguration seitens Grafana abgeschlossen.

OpsGenie

OpsGenie stellt das zweite Tool innerhalb des Alerting-Prozesses dar. Grafana ist zwar in der Lage entsprechende Alerts auszulösen, aber eine wirkliche Benachrichtigung mit einem Hinweis ist in Grafana nicht direkt vorgesehen. Hier kommt OpsGenie ins Spiel. OpsGenie ist eine Incident Management Platform, die auf Basis von Alerts arbeitet. Aufgrund der bidirektionalen Integrationsansatzes und der Vielzahl von Integrationen lässt sie sich theoretisch in jede Architektur integrieren.

Die Integrationen werden immer pro Team vorgenommen.

Wie auf dem Bild zu erkennen, ist eine Integration für Grafana schon eingerichtet. Hier findet man auch den API-Key und die URL. Nun sind die beiden Tools miteinander verbunden. Entsprechend der Einstellungen von OpsGenie werden die Alerts von Grafana nun als Sprachnachricht, SMS oder E-Mail an die entsprechenden Personen des Teams weitergeleitet.

Somit ist ein guter erster Schritt in Richtung Observability für das Kong API-Gateway getan.Die Erweiterungen findet ihr im Repo bei GitHub unter dem Branch observe.

Beitrag teilen

Gefällt mir

1

//

Weitere Artikel in diesem Themenbereich

Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.

//

Gemeinsam bessere Projekte umsetzen.

Wir helfen deinem Unternehmen.

Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.

Hilf uns, noch besser zu werden.

Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.