Prometheus monitorozás Kubernetes-ben¶
Cél¶
A labor célja egy példán keresztül megismerni a Prometheus-alapú monitorozást Kubernetes környezetben.
Előkövetelmények¶
- Kubernetes
- Bármely felhő platform által biztosított klaszter
- Linux platformon: minikube
- Windows platformon: Docker Desktop
- kubectl
- A binárisa legyen elérhető PATH-on.
- helm v3
- A binárisa legyen elérhető PATH-on.
Prometheusról, röviden¶
A Prometheus egy metrikák gyűjtésére és lekérdezésére alkalmas adatbázis. Feladata egy rendszer (nem csak Kubernetes!) komponenseitől azok által publikált metrika adatok összegyűjtése. Saját grafikus felhasználói felülettel rendelkezik ugyan, de az csak nagyon alapvető funkciókra használható, ezért a Grafana dashboard rendszerrel együtt szokták használni.
A Prometheus architektúrája a hivatalos dokumentációból:
Prometheus telepítése¶
A Prometheus csak egy metrikagyűjtő szerver. Ahhoz, hogy Kubernetes alatt monitorozni tudjuk, számos további komponensre van szükség. Ezek telepítését fogja össze több projekt is (amelyek zavarbaejtően hasonló nevűek, ezért vigyázzunk, ha rákeresünk). Ezek közül a kube-prometheus-stack helm chart telepítése a legegyszerűbb számunka.
Helm segítségével regisztráljuk a chart repository-ját, majd telepítsük a chart-ot:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add stable https://charts.helm.sh/stable
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack
Hagyjunk időt a telepítésnek. A helm chart sikeres telepítése után még az operátor maga is telepíteni fog további komponenseket, ezek is kis időbe tellnek.
A helm chartot korábban stable/prometheus-operator-nak hívták. A kube-prometheus-stack ennek az "új" változata.
Prometheus webfelület és Grafana¶
A Prometheus saját webfelülete nem túl felhasználóbarát, de célratörő eszköz. A Grafana a már jól összeállított rendszerünk metrikáinak grafikus megjelenítéséért felel.
-
A Prometheus saját webfelületét a prometheus-t futtató pod 9090-es porján érjük el. Különösebb bonyolítás nélkül továbbítsuk ezt egy helyi portra egy új terminálban kiadott parancssal:
kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=prometheus" --output=name) 9090:9090
-
Nyissuk meg böngészőben a http://localhost:9090 címen. Nézzük meg a megtalált target-eket és az alert-eket is.
-
Tegyük elérhetővé a Grafana-t is az előzőhöz hasonlóan egy új terminálban kiadott paranccsal:
kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=grafana" --output=name) 3000:3000
-
A Grafana a http://localhost:3000 címen lesz elérhető. Nyissuk meg és lépjünk be az
admin / prom-operator
felhasználónévvel és jelszóval, majd nézzünk meg pár kész dashboard-ot. Ezeket mind a helm chart telepítette számunkra.
Saját komponensek monitorozása¶
A chart előre konfigurál számos monitorozott célt, ezek többnyire a Kubernetes saját működését segítik láthatóvá tenni. Ha a saját alkalmazásunkat szeretnénk monitorozni, három lehetőségünk van.
-
Több eszköz támogatja a Prometheus monitorozást, csak engedélyezni kell. Erre példa a Traefik, amelyben egy kapcsolóval engedélyezhetjük, hogy a Prometheus számára scrapelhetővé tegye a metrikáit. Ezen metrikákra gyakran találunk kész Grafana dashboard-ot is, amit csak importálnunk kell.
-
Bizonyos komponensek önmagukban nem publikálnak Prometheus számára metrikákat, azonban saját belső metrikáik vannak, így azokat "csak" transzformálni kell a Prometheus számára. Erre egy példa az Elasticsearch, amely saját magáról részletes információkat nyújt http kéréseken keresztül, de nem direktben a Prometheus által várt formában. Ilyenkor un. exporter-t telepíthetünk, amely egy kis program, maga is konténer formájában, ami az Elasticsearch-től lekérdezett adatokat transzformálja a Prometheus-nak.
-
Ha pedig magunk által írt komponenseket akarunk monitorozni, akkor a forráskódunkat kell instrumentálni. Ez az adott környezet ismeretében egyszerűbb vagy bonyolultabb feladat. Például .NET Core esetében a Prometheus-net NuGet csomagon keresztük pár sor kód segítségével kivitelezhető.