Saúdos, Khabrovitas! En previsión do inicio dunha nova matrícula para o curso
Este artigo é unha breve introdución a Loki. Proxecto Loki
A principal inspiración para Loki foi
- utilizando etiquetas para almacenar datos
- baixo consumo de recursos
Volveremos aos principios de Prometheus e daremos algúns exemplos do seu uso no contexto de Kubernetes.
Unhas palabras sobre Prometeo
Para comprender completamente como funciona Loki, é importante dar un paso atrás e volver a visitar Prometheus un pouco.
Unha das características distintivas de Prometheus é a extracción de métricas dos puntos de recollida (a través de exportadores) e almacenalas nunha TSDB (Time Series Data Base, base de datos de series temporais) coa adición de metadatos en forma de etiquetas.
Por que é necesario
Recentemente, Prometheus converteuse no estándar de facto no mundo dos contedores e Kubernetes: a súa instalación é moi sinxela e un clúster de Kubernetes ten inicialmente un punto final para Prometheus. Prometheus tamén pode extraer métricas de aplicacións despregadas nun contedor mantendo etiquetas específicas. Polo tanto, o seguimento da aplicación é moi sinxelo de implementar.
Desafortunadamente, aínda non hai unha solución chave en man para a xestión de rexistros e tes que atopar unha solución por ti mesmo:
- servizo de nube xestionado para centralizar rexistros (AWS, Azure ou Google)
- servizo de monitorización "monitoring as a service" (por exemplo, Datadog)
- creando o seu propio servizo de recollida de rexistros.
Para a terceira opción, usei tradicionalmente Elasticsearch, a pesar de que non sempre estaba satisfeito con el (especialmente a súa pesadez e complexidade de configuración).
Loki foi deseñado para ser doado de implementar segundo os seguintes principios:
- ser doado de comezar
- consumir poucos recursos
- traballar de forma independente sen ningún mantemento especial
- servir como complemento para Prometheus para axudar coas investigacións de erros
Non obstante, esta sinxeleza vén a costa de algúns compromisos. Un deles é non indexar o contido. Polo tanto, a busca de texto non é moi eficiente nin rica e non permite manter estatísticas sobre o contido do texto. Pero como Loki quere ser o equivalente grep e o complemento de Prometheus, isto non é unha desvantaxe.
Investigación de incidentes
Para comprender mellor por que Loki non necesita indexación, volvamos ao método de investigación de incidentes empregado polos desenvolvedores de Loki:
1 Alerta → 2 Panel de control → 3 Consulta adhoc → 4 Agregación de rexistros → 5 Rastrexo distribuído → 6 Solución!
(1 Aviso → 2 Panel → 3 Consulta adhoc → 4 Agregación de rexistros → 5 Rastrexo distribuído → 6 Solución!)
A idea é que recibamos algún tipo de alerta (Notificación de Slack, SMS, etc.) e despois:
- mira os paneis de mando de Grafana
- ver as métricas do servizo (por exemplo, en Prometheus)
- mirar as entradas de rexistro (por exemplo, en Elasticsearch)
- quizais bótalle un ollo ás trazas distribuídas (Jaeger, Zipkin, etc.)
- e finalmente solucionar o problema orixinal.
Aquí, no caso da pila Grafana + Prometheus + Elasticsearch + Zipkin, terás que usar catro ferramentas diferentes. Para aforrar tempo, estaría ben poder facer todos estes pasos cunha soa ferramenta: Grafana. Cómpre sinalar que este enfoque de investigación implementouse en Grafana desde a versión 6. Así, faise posible acceder aos datos de Prometheus directamente desde Grafana.
Pantalla Explorer dividida entre Prometheus e Loki
Desde esta pantalla, podes ver rexistros en Loki relacionados coas métricas de Prometheus usando o concepto de pantalla dividida. Desde a versión 6.5, Grafana permítelle analizar o ID de rastrexo nas entradas do rexistro de Loki para seguir as ligazóns ás súas ferramentas de rastrexo distribuídas favoritas (Jaeger).
Proba local de Loki
A forma máis sinxela de probar Loki localmente é usar docker-compose. O ficheiro docker-compose atópase no repositorio de Loki. Podes obter o repositorio co seguinte comando git
:
$ git clone https://github.com/grafana/loki.git
Despois cómpre cambiar ao directorio de produción:
$ cd production
Despois diso, podes obter as últimas imaxes de Docker:
$ docker-compose pull
Finalmente, a pila de Loki iníciase co seguinte comando:
$ docker-compose up
Arquitectura Loki
Aquí tes un pequeno diagrama coa arquitectura de Loki:
Principios de arquitectura de Loki
O cliente web executa aplicacións no servidor, Promtail recolle rexistros e envíaos a Loki, o cliente web tamén envía metadatos a Loki. Loki agrega todo e pásao a Grafana.
Loki corre. Para ver os compoñentes dispoñibles, execute o seguinte comando:
$ docker ps
No caso dun Docker recén instalado, o comando debería devolver o seguinte resultado:
IMAGE PORTS NAMES
grafana/promtail: production_promtail_1
grafana/grafana: m 0.0.0.0:3000->3000/tcp production_grafana_1
grafana/loki: late 80/tcp,0.0.0.0:3100... production_loki_1
Vemos os seguintes compoñentes:
- Promtail: axente responsable da centralización dos rexistros
- Grafana: a famosa ferramenta de panel
- Loki: daemon de centralización de datos
Como parte dunha infraestrutura clásica (por exemplo, baseada en máquinas virtuais), o axente Promtail debe implantarse en cada máquina. Grafana e Loki pódense instalar na mesma máquina.
Implementación en Kubernetes
A instalación de compoñentes de Loki en Kubernetes será a seguinte:
- daemonSet para implantar o axente Promtail en cada unha das máquinas do clúster de servidores
- Implementación de Loki
- e o último é o despregamento de Grafana.
Afortunadamente, Loki está dispoñible como paquete Helm, o que facilita a súa implantación.
Instalación vía Heml
Xa deberías ter instalado Heml. Pódese descargar desde o repositorio de GitHub do proxecto. Instálase extraendo o arquivo axeitado para a súa arquitectura e engadindo helm $PATH
.
Nota: A versión 3.0.0 de Helm publicouse recentemente. Dado que houbo moitos cambios nel, recoméndase ao lector que agarde un pouco antes de comezar a utilizalo..
Engadindo fonte para Helm
O primeiro paso é engadir o repositorio "loki" co seguinte comando:
$ helm add loki https://grafana.github.io/loki/charts
Despois diso, pode buscar paquetes chamados "loki":
$ helm search loki
Resultado:
loki/loki 0.17.2 v0.4.0 Loki: like Prometheus, but for logs.
loki/loki-stack 0.19.1 v0.4.0 Loki: like Prometheus, but for logs.
loki/fluent-bit 0.0.2 v0.0.1 Uses fluent-bit Loki go plugin for...
loki/promtail 0.13.1 v0.4.0 Responsible for gathering logs and...
Estes paquetes teñen as seguintes características:
- paquete loki/loki só coincide co servidor de Loki
- paquete loki/fluent-bit permítelle implementar DaemonSet usando fluent-bin para recoller rexistros en lugar de Promtail
- paquete loki/promtail contén un axente de recollida de rexistros
- paquete loki/loki-pila, permítelle despregar inmediatamente Loki xunto con Promtail.
Instalando Loki
Para implementar Loki en Kubernetes, execute o seguinte comando no espazo de nomes "monitoring":
$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Para gardar no disco, engade a opción --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack
--namespace monitoring
--set loki.persistence.enabled=true
Nota: se queres implementar Grafana ao mesmo tempo, engade o parámetro
--set grafana.enabled = true
Cando executas este comando, deberías obter a seguinte saída:
LAST DEPLOYED: Tue Nov 19 15:56:54 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/ClusterRole
NAME AGE
loki-promtail-clusterrole 189d
…
NOTES:
The Loki stack has been deployed to your cluster. Loki can now be added as a datasource in Grafana.
See <a href="http://docs.grafana.org/features/datasources/loki/">http://docs.grafana.org/features/datasources/loki/</a> for more details.
Mirando o estado dos pods no espazo de nomes "monitoring", podemos ver que todo está despregado:
$ kubectl -n monitoring get pods -l release=loki
Resultado:
NAME READY STATUS RESTARTS AGE
loki-0 1/1 Running 0 147m
loki-promtail-9zjvc 1/1 Running 0 3h25m
loki-promtail-f6brf 1/1 Running 0 11h
loki-promtail-hdcj7 1/1 Running 0 3h23m
loki-promtail-jbqhc 1/1 Running 0 11h
loki-promtail-mj642 1/1 Running 0 62m
loki-promtail-nm64g 1/1 Running 0 24m
Todas as vainas están funcionando. Agora toca facer unhas probas!
Conectando a Grafana
Para conectarse a Grafana en Kubernetes, cómpre abrir un túnel ao seu pod. O seguinte é o comando para abrir o porto 3000 para un pod Grafana:
$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Outro punto importante é a necesidade de recuperar o contrasinal do administrador de Grafana. O contrasinal mantense en segredo loki-grafana
en campo .data.admin-user
en formato base64.
Para restauralo, cómpre executar o seguinte comando:
$ kubectl -n monitoring get secret loki-grafana
--template '{{index .data "admin-password" | base64decode}}'; echo
Use este contrasinal xunto coa conta de administrador predeterminada (admin).
Definición da fonte de datos de Loki en Grafana
En primeiro lugar, asegúrate de crear a fonte de datos de Loki (Configuración/Fonte de datos).
Aquí tes un exemplo:
Un exemplo de configuración dunha fonte de datos para Loki
Ao facer clic en "Probar" podes probar a conexión con Loki.
Facendo peticións a Loki
Agora vai a Grafana e vai á sección "Explorar". Ao recibir rexistros de contedores, Loki engade metadatos de Kubernetes. Así, faise posible ver os rexistros dun recipiente específico.
Por exemplo, para seleccionar rexistros de contedores de promtail, pode usar a seguinte consulta: {container_name = "promtail"}
.
Non esquezas seleccionar aquí tamén a fonte de datos de Loki.
Esta consulta devolverá a actividade do contedor do seguinte xeito:
Resultado da consulta en Grafana
Engadindo ao panel de control
A partir de Grafana 6.4, é posible poñer a información do rexistro directamente no panel. Despois diso, o usuario poderá cambiar rapidamente entre o número de solicitudes do seu sitio e os rastros da aplicación.
A continuación móstrase un exemplo de panel de control que implementa esta interacción:
Exemplo de panel de control con métricas de Prometheus e rexistros de Loki
O futuro de Loki
Comecei a usar Loki en maio/xuño coa versión 0.1. Hoxe xa se publicou a versión 1, e mesmo a 1.1 e 1.2.
Hai que admitir que a versión 0.1 non era o suficientemente estable. Pero 0.3 xa mostraba sinais reais de madurez, e as seguintes versións (0.4, despois 1.0) só reforzaron esta impresión.
Despois da 1.0.0, ninguén pode ter unha escusa para non usar esta marabillosa ferramenta.
Outras melloras non deberían ser sobre Loki, senón sobre a súa integración co excelente Grafana. De feito, Grafana 6.4 xa ten unha boa integración cos paneis.
Grafana 6.5, que foi lanzado recentemente, mellora aínda máis esta integración ao recoñecer automaticamente o contido dos rexistros en formato JSON.
O seguinte vídeo mostra un pequeno exemplo deste mecanismo:
Usando cadeas de Loki representadas en Grafana
Faise posible usar un dos campos JSON, por exemplo, para:
- ligazóns a unha ferramenta externa
- filtrado de contido de rexistro
Por exemplo, pode facer clic en traceId para ir a Zipkin ou Jaeger.
Como de costume, agardamos os vosos comentarios e invitámosvos
Fonte: www.habr.com