Monitorizarea logurilor containerelor pe Microk8s cu Loki, Grafana și Promtail

  • 2 minute de citit
  • 6 exemple de cod
  • 3 imagini

Disponibil și în English

Salut 👋

Acesta este un tutorial scurt care descrie cum să monitorizezi logurile containerelor din clusterul tău Kubernetes folosind stack-ul Loki. Dar de ce? Pentru că este mai ușor să vezi și să filtrezi logurile în Grafana și să le stochezi persistent în Loki, decât să le vizualizezi într-un terminal.

Hai să începem! Presupunând că ai deja Microk8s instalat, activează următoarele addon-uri:

Poți activa un add-on rulând microk8s enable. Ex: microk8s enable dns

addons:  enabled:    dns                  # CoreDNS    ha-cluster           # Configurează disponibilitatea ridicată pe nodul curent    metrics-server    # K8s Metrics Server pentru acces API la metricile serviciilor    storage               # Storage class; alocă spațiu de stocare din directorul gazdei

Notă: Microk8s vine cu kubectl și helm3 incluse. Rulează doar microk8s kubectl sau microk8s helm3. Dacă vrei să folosești kubectl-ul instalat pe gazdă, îl poți configura cu: microk8s config > ~/.kube/config.

Atenție: Fii foarte atent când rulezi comanda microk8s config > ~/.kube/config, pentru că va suprascrie vechiul fișier de configurare.

Continuă apoi instalând Loki. Loki va stoca toate logurile folosind object storage. Este eficient, dar compromisul este că nu poți face agregări și căutări complexe pe datele tale. Vom instala Loki în scop de explorare, dar dacă cauți o versiune pregătită pentru producție, uită-te la loki distributed helm chart.

Rulează următoarele comenzi helm pentru a instala Loki. Poate vrei să instalezi helm sau să folosești comanda microk8s helm3.

helm repo add grafana https://grafana.github.io/helm-chartshelm install loki grafana/loki -

Ar trebui să obții următoarele pod-uri și servicii rulând kubectl get pods și kubectl get services:

NAME                        READY   STATUS        RESTARTS   AGEloki-0                      1/1     Running       0          9m8sNAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGEkubernetes      ClusterIP   10.152.183.1     <none>        443/TCP    54mloki-headless   ClusterIP   None             <none>        3100/TCP   9m23sloki            ClusterIP   10.152.183.187   <none>        3100/TCP   9m23s

Acum putem instala în siguranță Promtail. Promtail va importa toate logurile containerelor în Loki și ar trebui să funcționeze „automat”, descoperind toate pod-urile care rulează în clusterul tău.

Ca să-i spunem lui Promtail unde se află Loki, îi putem da URL-ul serviciului: http://loki-headless.default.svc.cluster.local:3100/loki/api/v1/push.

helm install promtail grafana/promtail --set config.lokiAddress=http://loki-headless.default.svc.cluster.local:3100/loki/api/v1/push

În final, trebuie să vizualizăm logurile folosind Grafana. Instaleaz-o rulând comanda helm, apoi editează serviciul ca să schimbi tipul acestuia din ClusterIP în NodePort.

Schimbarea tipului serviciului în NodePort îți va permite să accesezi Grafana în browser fără a mai fi nevoie să adaugi un ingress.

❗❗Pentru a folosi vscode ca editor implicit, exportă următoarea variabilă de mediu: ` KUBE_EDITOR=code -w `

helm install grafana grafana/grafana kubectl edit service/grafana# Schimbă metadata.spec.type în NodePort# Ia portul serviciului folosind kubectl get services și caută 32204:# grafana                         NodePort    10.152.183.84    <none>        80:32204/TCP   6d

Notă: Dacă ești pe Windows, ca să accesezi serviciul trebuie să rulezi kubectl cluster-info și să folosești adresa IP a clusterului. Pe Linux ar trebui să poți accesa http://localhost:32204.

kubectl cluster-infoKubernetes control plane is running at https://172.20.138.170:16443

Ca să accesezi Grafana, mergi la http://172.20.138.170:32204, unde 32204 este NodePort-ul serviciului.

Ia parola de administrator Grafana urmând instrucțiunile din notele helm. Notele apar după ce Grafana a fost instalat. Dacă nu ai base64 pe sistemul tău, uită-te la CyberChef, care poate decoda text în base64.

După ce te-ai autentificat cu succes, mergi la Settings -> DataSources și adaugă sursa de date Loki.

Întoarce-te în meniul Explore și afișează logurile Loki folosind sursa de date Loki din Grafana. Poți da click pe log browser ca să vezi toate valorile disponibile pentru eticheta app.

Promtail ar trebui acum să importe loguri în Loki și să creeze etichete dinamic pentru fiecare container nou creat. Dacă ai urmat pașii, felicitări!

Mulțumesc pentru lectură și spor la programat! 🔧