Skip to content

liliannss/observabilidade

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ferramentas de Observabilidade

Conteúdo com objetivo de demonstrar configurações mínimas e uso prático de ferramentas de Observabilidade com base em estudos de diversas fontes

alt text

Ferramentas utilizadas

  • Prometheus

      Monitoramento e alertas
    
  • Promtail

      Agente de leitura de logs
    
  • Grafana

      Análise e Monitoramento
    
  • Loki

      Agregação de Registros
    
  • Jaeger

      Tracing Distribuído
    
  • Elasticsearch

      Busca e análise de dados
    
  • Logstash

      Pipeline de dados
    
  • Kibana

      Visualização de dados
    

Repositórios indicados

Conteúdos indicados

Prometheus

Promtail + Loki

Jaeger

ELK (Elasticsearch, Logstash, Kibana)

Prometheus

alt text

Releases

https://github.com/prometheus/prometheus/releases

docker-compose

  prometheus:
    image: prom/prometheus:v2.26.0
    container_name: prometheus
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    command: --config.file=/etc/prometheus/prometheus.yml
    depends_on:
      - api

prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    scrape_interval: 5s
    static_configs:
      - targets: [ 'prometheus:9090' ]
  - job_name: 'api'
    scrape_interval: 5s
    metrics_path: 'actuator/prometheus'
    static_configs:
      - targets: [ 'api:8080' ]

pom.xml

  <dependency>
      <groupId>io.micrometer</groupId>
      <artifactId>micrometer-registry-prometheus</artifactId>
      <version>${micrometer.version}</version>
  </dependency>
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>

Promtail

docker-compose

  promtail:
    image: grafana/promtail:2.0.0
    container_name: promtail
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers
      - ./promtail:/etc/promtail-config/
    command:
      -config.file=/etc/promtail-config/promtail.yml
    depends_on:
      - api

promtail.yml

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: containers
    static_configs:
      - targets:
          - localhost
        labels:
          job: containerlogs
          __path__: /var/lib/docker/containers/*/*log

Grafana

alt text

Releases

https://github.com/grafana/grafana/releases

docker-compose

  grafana:
    image: grafana/grafana:7.5.5-ubuntu
    container_name: grafana
    ports:
      - 3000:3000
    depends_on:
      - prometheus

Loki

alt text

Releases

https://github.com/grafana/loki/releases

docker-compose

  loki:
    image: grafana/loki:2.2.1
    container_name: loki
    ports:
      - 3100:3100
    command: -config.file=/etc/loki/local-config.yaml

Jaeger

alt text

Releases

https://github.com/jaegertracing/jaeger/releases

properties

Datasource
  • Observe que o Tracing foi adicionado ao driverClassName para rastreamento das instruções SQL
spring.h2.console.enabled=true
spring.datasource.url=jdbc:tracing:h2:mem:resource
spring.datasource.driverClassName=io.opentracing.contrib.jdbc.TracingDriver
spring.datasource.username=resource
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
  • Agrupa tracings por endpoint
    • opentracing.jaeger.sampler-type=const
    • opentracing.jaeger.sampler-param=1
Jaeger
opentracing.jaeger.service-name=api
opentracing.jaeger.udp-sender.host=jaeger
opentracing.jaeger.udp-sender.port=6831
opentracing.jaeger.sampler-type=const
opentracing.jaeger.sampler-param=1

docker-compose

  jaeger:
    image: jaegertracing/all-in-one:1.22
    container_name: jaeger
    ports:
      - 5775:5775/udp
      - 6831:6831/udp
      - 6832:6832/udp
      - 5778:5778
      - 16686:16686
      - 14268:14268
      - 14250:14250
    depends_on:
      - api

pom.xml

  <dependency>
      <groupId>io.opentracing.contrib</groupId>
      <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
      <version>3.2.2</version>
  </dependency>
  <dependency>
      <groupId>io.opentracing.contrib</groupId>
      <artifactId>opentracing-jdbc</artifactId>
      <version>0.2.12</version>
  </dependency>

ELK (Elasticsearch, Logstash, Kibana)

alt text

Releases

https://github.com/elastic/elasticsearch/releases
https://github.com/elastic/logstash/releases
https://github.com/elastic/kibana/releases

docker-compose

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
    ports:
      - 9200:9200

  logstash:
    image: docker.elastic.co/logstash/logstash:7.6.2
    container_name: logstash
    links:
      - elasticsearch
    volumes:
      - ./logstash:/etc/logstash
    command: logstash -f /etc/logstash/logstash.conf
    ports:
      - 12201:12201/udp
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:7.6.2
    container_name: kibana
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
      - logstash
    logging:
      driver: gelf
      options:
        gelf-address: udp://localhost:12201

logstash.conf

input {
  gelf {
    port => 12201
  }
}
output {
  stdout {}
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
  }
}

Configurando e Acessando Ferramentas

Subindo serviços e validando funcionamento

Obs.: todos os comandos deverão ser executados na raiz do projeto.

Para uso do Loki, adicione o plugin abaixo:

  • docker plugin install grafana/loki-docker-driver:2.2.1 --alias loki --grant-all-permissions

Criar o arquivo .jar do projeto:

  • mvn clean package

Startar os serviços:

  • docker-compose up

Visualizar se todos serviços foram startados corretamente:

  • docker-compose ps

Você visualizará algo similar:

alt text

Para visualizar log de container específico digite:

  • docker-compose logs name-container

Se desejar parar os serviços e remover os containers digite:

  • docker-compose down

Swagger

alt text

Prometheus

  • É possível acessar a URL do Prometheus, através do endereço abaixo:

  • Na página inicial é possível visualizar os endpoints disponibilizados pelo Actuator

alt text

  • Selecione no menu superior a opção Status -> Targets para visualizar o status do serviço

alt text

Grafana

username: admin

password: admin

Obs.: após, redefina para um usuário e senha desejado.

alt text

  • Você visualizará uma interface similar a esta:

alt text

Criando Data Sources

  • Clique em DATA SOURCES
  • Obs.: adiante veremos também sobre os DASHBOARDS

Data source Loki

  • Vamos adicionar o data source do Loki, para isto realize a pesquisa por nome ou identifique-o na lista de ferramentas disponíveis:

alt text

  • Observe que no campo URL informamos o nome correspondente ao serviço no docker-compose e porta padrão
  • Clique em Save & Test e valide a conexão
  • Será apresentada a mensagem abaixo indicando que a conexão foi criada com sucesso
Data source connected and labels found.

alt text

Data source Jaeger

  • Volte ao Add data source
  • Os passos são similares as configurações do Loki

alt text

  • Clique em Save & Test e valide a conexão
Data source connected and labels found.

alt text

Visualizando Logs (Loki)

  • No menu lateral clique na opção Explore

alt text

  • Clique em Log Browser
  • Você visualizará, através de filename, o id dos containers
  • Para identificar qual é o container correspondente a aplicação, em um terminal, digite o comando docker ps
  • O container-name da aplicação será api

alt text

  • Selecione o filename correspondente ao container e clique em Show logs
  • Você visualizará os logs da aplicação
  • Para testar, faça uma requisição via Swagger e após clique em Run query na parte superior

alt text

Traces (Jaeger)

  • Faça uma requisição em um dos endpoints do Swagger
  • Selecione o Jaeger na opção Explore
  • Clique em Traces -> api -> método correspondente a execução

alt text

  • Será possível identificar o Tracing da requisição executada
  • Navegue na aba Service & Operation

alt text

  • Também é possível acessar o Jaeger através do endereço local
  • Na opção Service selecione api
  • Clique em Find Traces
  • A partir daí será possível identificar os traces da aplicação

alt text

Data Source Prometheus

  • A conexão é similar ao que vimos anteriormente

alt text

alt text

Dashboard Prometheus

  • Na página inicial do Grafana clique em DASHBOARDS
  • Na página seguinte clique em Add an empty panel
  • Selecione Prometheus na opção Query logo abaixo ao Panel Title
  • Vamos trabalhar com a opção Gauge para visualização de métricas, então selecione a opção correspondente em Panel -> Visualization

alt text

  • Em Metrics no painel Query estão disponíveis os endpoints fornecidos pelo Prometheus
  • Neste momento vamos trabalhar com as seguintes queries:
  • http_server_requests_seconds_count{job="api", uri="/resources", method="GET"}

  • http_server_requests_seconds_count{job="api", uri="/resources", method="POST"}

  • Note que também é possível formatar a legenda para visualização no campo Legend
  • {{uri}}/{{method}}

  • É possível parametrizar o tempo de atualização das informações com a opção Refresh dashboard -> tempo localizada no canto superior direito acima de Panel Title

alt text

JVM (Micrometer)

  • Nesta seção vamos adicionar o template do Micrometer ao Grafana
  • Acesso o endereço abaixo:
  • É possível identificar, através da informação Get this dashboard que o id correspondente ao dashboard é o 4701
  • No menu lateral esquerdo do Grafana selecione a opção Create -> Import

alt text

  • No campo Load digite o id correspondente ao template do dashboard: 4701 e clique em Load
  • Após selecione o Data source correspondente ao Prometheus e cliente em Import
  • Após, será possível a visualização do dashboard JVM (Micrometer)

alt text

alt text

Kibana

  • Acesse o endereço abaixo:

  • Selecione a opção Discover no menu lateral esquerdo ou em Visualize and Explore Data

alt text

alt text

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors