Saudação, Khabrovites! Antecipando o início de um novo conjunto para o curso de práticas e ferramentas do DevOps, preparamos para você uma tradução de material interessante.
Este artigo é uma breve introdução ao Loki. O projeto Loki é suportado pela Grafana e visa coletar centralmente logs (de servidores ou contêineres).A principal fonte de inspiração para Loki foi Prometheus, com a idéia de aplicar suas abordagens de gerenciamento de logs:- uso de etiquetas (etiquetas) para armazenamento de dados
- baixo consumo de recursos
Voltaremos aos princípios de Prometeu e daremos alguns exemplos de seu uso no contexto do Kubernetes.Algumas palavras sobre Prometeu
Para entender completamente como Loki funciona, é importante dar um passo atrás e relembrar um pouco de Prometheus.Uma das características distintivas do Prometheus é a extração de métricas dos pontos de coleta (por meio de exportadores) e armazená-las no TSDB (Time Series Data Base, banco de dados de séries temporais) com a adição de metadados na forma de rótulos.Por que isso é necessário?
Recentemente, o Prometheus se tornou o padrão de fato no mundo dos contêineres e do Kubernetes: sua instalação é muito simples, e o cluster Kubernetes inicialmente possui um ponto de extremidade para o Prometheus. O Prometheus também pode recuperar métricas de aplicativos implantados em um contêiner, mantendo algumas tags. Portanto, é muito fácil implementar aplicativos de monitoramento.Infelizmente, ainda não existe uma solução pronta para gerenciar logs e você deve encontrar uma solução para si mesmo:- serviço de nuvem gerenciada para centralizar logs (AWS, Azure ou Google)
- monitoramento como um serviço de monitoramento de serviço (por exemplo, Datadog)
- criando seu próprio serviço de coleta de logs.
Para a terceira opção, tradicionalmente usei o Elasticsearch, apesar de nem sempre estar feliz com ele (especialmente sua gravidade e complexidade das configurações).O Loki foi projetado para simplificar a implementação de acordo com os seguintes princípios:- seja fácil começar
- consumir poucos recursos
- trabalhe independentemente, sem qualquer manutenção especial
- complementar Prometeu para ajudar a investigar bugs
No entanto, essa simplicidade é alcançada através de alguns compromissos. Uma delas é não indexar o conteúdo. Portanto, a pesquisa de texto não é muito eficaz ou rica e não permite estatísticas sobre o conteúdo do texto. Mas como Loki quer ser o equivalente a grep e complementar o Prometeu, isso não é uma falha.Investigação de incidentes
Para entender melhor por que o Loki não precisa de indexação, voltemos ao método de investigação de incidentes usado pelos desenvolvedores do Loki:
1 Alerta → 2 Painel → 3 Consulta Adhoc → 4 Agregação de Log → 5 Rastreamento Distribuído → 6 Correções!
(1 Aviso → 2 Painéis → 3 Consulta Adhoc → 4 Agregação de log → 5 Rastreamento distribuído → 6 Corrigindo!)A idéia é que recebamos algum alerta (Notificação de folga, SMS etc.) e depois:- Grafana
- (, Prometheus)
- (, Elasticsearch)
- , (Jaeger, Zipkin .)
- , , .
Aqui, no caso da pilha Grafana + Prometheus + Elasticsearch + Zipkin, você precisará usar quatro ferramentas diferentes. Para reduzir o tempo, seria bom poder executar todas essas etapas com uma ferramenta: Grafana. Vale ressaltar que essa abordagem de pesquisa foi implementada no Grafana desde a versão 6. Dessa forma, é possível acessar os dados do Prometheus diretamente do Grafana.
Tela do Explorer dividida entre Prometheus e LokiNesta tela, é possível visualizar os logs do Loki relacionados às métricas do Prometheus usando o conceito de tela dividida. A partir da versão 6.5, o Grafana permite processar o ID de rastreamento nas entradas de log do Loki para seguir os links para suas ferramentas de rastreamento distribuído favoritas (Jaeger).Loki Local Test
A maneira mais fácil de testar o Loki localmente é usar o docker-compose. O arquivo docker-compose está no repositório Loki. Você pode obter o repositório usando o seguinte comando git
:$ git clone https:
Então você precisa ir para o diretório de produção:$ cd production
Depois disso, você pode obter a versão mais recente das imagens do Docker:$ docker-compose pull
Por fim, a pilha Loki é iniciada com o seguinte comando:$ docker-compose up
Arquitetura Loki
Aqui está um pequeno diagrama com a arquitetura Loki:
Princípios da arquitetura Loki Oweb client lança aplicativos no servidor, o Promtail coleta logs e os envia para o Loki, o web client também envia metadados para o Loki. Loki agrega tudo e o transfere para o Grafana.Loki está pronto e funcionando. Para visualizar os componentes disponíveis, execute o seguinte comando:$ docker ps
No caso de um Docker instalado recentemente, o comando deve retornar 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 componentes:- Promtail: agente para centralizar logs
- Grafana: Uma famosa ferramenta de painel
- Loki: um daemon de centralização de dados
Na estrutura de uma infraestrutura clássica (por exemplo, com base em máquinas virtuais), um agente Promtail deve ser implantado em cada máquina. Grafana e Loki podem ser instalados na mesma máquina.Implantação do Kubernetes
A instalação dos componentes Loki no Kubernetes será a seguinte:- daemonSet para implementar o agente Promtail em cada máquina em um cluster de servidores
- Implantação Loki
- e, finalmente, a implantação do Grafana.
Felizmente, o Loki está disponível como um pacote Helm, facilitando a implantação.Instalação via Helm
O leme já deve estar instalado. Pode ser baixado do repositório GitHub do projeto. Ele é instalado descompactando o arquivo que corresponde à sua arquitetura e adicionando o leme ao $PATH
.Nota: A versão 3.0.0 do Helm foi lançada recentemente. Como houve muitas mudanças, recomenda-se que o leitor espere um pouco antes de usá-lo primeiro .
Adicionando uma fonte para o Helm
O primeiro passo é adicionar o repositório "loki" com o seguinte comando:$ helm add loki https:
Depois disso, você pode procurar por pacotes denominados "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...
Esses pacotes têm os seguintes recursos:- O pacote loki / loki corresponde apenas ao servidor Loki
- o pacote loki / fluent-bit permite implantar o DaemonSet usando o fluent-bin para coletar logs em vez do Promtail
- O pacote loki / promtail contém arquivos de log do agente de coleção
- O pacote loki / loki-stack permite implantar imediatamente o Loki junto com o Promtail.
Instalação Loki
Para implantar o Loki no Kubernetes, execute o seguinte comando no espaço de nome "monitoramento":$ helm upgrade --install loki loki/loki-stack --namespace monitoring
Para salvar em disco, adicione a opção --set loki.persistence.enabled = true:
$ helm upgrade --install loki loki/loki-stack \
--namespace monitoring \
--set loki.persistence.enabled=true
Nota: se você deseja implantar o Grafana ao mesmo tempo, adicione o parâmetro--set grafana.enabled = true
Ao executar este comando, você deve 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:
Observando o status das lareiras no espaço de nome "monitoramento", veremos que tudo está expandido:$ 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
Todos os pods estão em execução. Agora é hora de fazer alguns testes!Conectar ao Grafana
Para se conectar ao Grafana no Kubernetes, é necessário abrir um túnel na parte inferior. A seguir, está o comando para abrir a porta 3000 para a lareira da Grafana:$ kubectl -n port-forward monitoring svc/loki-grafana 3000:80
Outro ponto importante é a necessidade de recuperar a senha de administrador do Grafana. A senha é mantida loki-grafana
em segredo em um campo .data.admin-user
no formato base64.Para restaurá-lo, você deve executar o seguinte comando:$ kubectl -n monitoring get secret loki-grafana \
--template '{{index .data "admin-password" | base64decode}}'; echo
Use esta senha com a conta de administrador padrão (admin).Definindo uma fonte de dados Loki no Grafana
Antes de tudo, verifique se a fonte de dados Loki (Configuração / Fonte de Dados) foi criada.Aqui está um exemplo:
Exemplo de configuração de uma fonte de dados para o LokiAo clicar em "Teste", você pode verificar a conexão com o Loki.Fazendo pedidos para Loki
Agora vá para a seção "Explorar" da Grafana. Ao receber logs de contêineres, o Loki adiciona metadados do Kubernetes. Assim, torna-se possível visualizar os logs de um contêiner específico.: Por exemplo, a seguinte consulta de consulta pode ser usada para selecionar os logs do contêiner {container_name = "promtail"}
.Além disso, certifique-se de selecionar sua fonte de dados Loki aqui.Essa solicitação retornará a atividade dos contêineres da seguinte maneira:
O resultado da solicitação na GrafanaAdicionando ao painel
A partir do Grafana 6.4, você pode colocar informações sobre os logs diretamente no painel. Depois disso, o usuário poderá alternar rapidamente entre o número de solicitações em seu site para os rastreamentos do aplicativo.A seguir, é apresentado um exemplo de painel que implementa essa interação: Um
exemplo de painel com métricas do Prometheus e logs do LokiFuture loki
Comecei a usar o Loki em maio / junho com a versão 0.1. Hoje a versão 1 já foi lançada, e até 1.1 e 1.2.É certo que a versão 0.1 não era estável o suficiente. Mas 0,3 já mostrava sinais reais de maturidade, e as próximas versões (0,4 e 1,0) apenas reforçavam essa impressão.Depois da 1.0.0, ninguém pode ter desculpas para não usar esta ferramenta maravilhosa.Outras melhorias não devem preocupar Loki, mas sua integração com o excelente Grafana. De fato, o Grafana 6.4 já possui boa integração com os painéis.O Grafana 6.5, lançado recentemente, aprimora ainda mais essa integração, reconhecendo automaticamente o conteúdo dos logs no formato JSON.O vídeo a seguir mostra um pequeno exemplo desse mecanismo:
Usando seqüências de caracteres Loki exibidas no GrafanaTorna-se possível usar um dos campos JSON, por exemplo, para:- links de ferramentas externas
- filtrando o conteúdo do log
Por exemplo, você pode clicar em traceId para acessar Zipkin ou Jaeger.Tradicionalmente, aguardamos seus comentários e convidamos você para um webinar aberto , onde falaremos sobre como o setor de DevOps se desenvolveu durante 2019 e discutiremos possíveis caminhos de desenvolvimento para 2020.