Skip to content

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

85 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages