Por Lilian Sousa
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
-
Monitoramento e alertas -
Agente de leitura de logs -
Análise e Monitoramento -
Agregação de Registros -
Tracing Distribuído -
Busca e análise de dados -
Pipeline de dados -
Visualização de dados
https://github.com/prometheus/prometheus/releases
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
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' ]
<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:
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
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
https://github.com/grafana/grafana/releases
grafana:
image: grafana/grafana:7.5.5-ubuntu
container_name: grafana
ports:
- 3000:3000
depends_on:
- prometheus
https://github.com/grafana/loki/releases
loki:
image: grafana/loki:2.2.1
container_name: loki
ports:
- 3100:3100
command: -config.file=/etc/loki/local-config.yaml
https://github.com/jaegertracing/jaeger/releases
- 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
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
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
<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>
https://github.com/elastic/elasticsearch/releases
https://github.com/elastic/logstash/releases
https://github.com/elastic/kibana/releases
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
input {
gelf {
port => 12201
}
}
output {
stdout {}
elasticsearch {
hosts => ["http://elasticsearch:9200"]
}
}
Para uso do Loki, adicione o plugin abaixo:
Criar o arquivo .jar do projeto:
Startar os serviços:
Visualizar se todos serviços foram startados corretamente:
Você visualizará algo similar:
Para visualizar log de container específico digite:
Se desejar parar os serviços e remover os containers digite:
-
Você poderá acessar o Swagger da aplicação através do endereço local:
-
É 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
- Selecione no menu superior a opção Status -> Targets para visualizar o status do serviço
- Acesse o endereço abaixo e utilize senha e usuário padrão:
- Você visualizará uma interface similar a esta:
- Clique em DATA SOURCES
- Obs.: adiante veremos também sobre os DASHBOARDS
- Vamos adicionar o data source do Loki, para isto realize a pesquisa por nome ou identifique-o na lista de ferramentas disponíveis:
- 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.
- Volte ao Add data source
- Os passos são similares as configurações do Loki
- Clique em Save & Test e valide a conexão
Data source connected and labels found.
- No menu lateral clique na opção Explore
- 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
- 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
- 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
- Será possível identificar o Tracing da requisição executada
- Navegue na aba Service & Operation
- 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
- A conexão é similar ao que vimos anteriormente
- 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
- Em Metrics no painel Query estão disponíveis os endpoints fornecidos pelo Prometheus
- Neste momento vamos trabalhar com as seguintes queries:
- Note que também é possível formatar a legenda para visualização no campo Legend
- É 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
- 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
- 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)
-
Acesse o endereço abaixo:
-
Selecione a opção Discover no menu lateral esquerdo ou em Visualize and Explore Data
































