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 gazdeiNotă: 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 9m23sAcum 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 6dNotă: 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:16443Ca 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! 🔧