Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Monitorando aplicações Spring Boot no Kubernete...

Avatar for Jean Morais Jean Morais
December 12, 2018

Monitorando aplicações Spring Boot no Kubernetes com Prometheus Operator e Grafana

Monitorando aplicações Spring Boot no Kubernetes com Prometheus Operator e Grafana

Quando falamos em sistemas distribuídos, uma das coisas que devemos priorizar é a checagem do estado das aplicações. Muitas vezes, só nos damos conta da importância de coletar boas métricas de aplicação, quando nos deparamos com um estado indesejado e necessitamos identificar gargalos e pontos de falha em tempo real. Nessa talk abordaremos em detalhes como instrumentar uma aplicação Spring Boot, facilitando a coleta de métricas em tempo real e de forma dinâmica dentro de um cluster Kubernetes.

Talk apresentada no meetup GUJavaSC: https://www.meetup.com/pt-BR/gujavasc/

Avatar for Jean Morais

Jean Morais

December 12, 2018
Tweet

Other Decks in Programming

Transcript

  1. Agenda • Spring Boot - Actuator - Micrometer • Kubernetes

    - Overview - Manifest’s • Prometheus - Overview - Prometheus Operator • Grafana • Hands-on - Teste do ServiceMonitor 3
  2. 6

  3. 7

  4. 8

  5. Spring Actuator • O Actuator é um subprojeto do Spring

    Boot, que fornece recursos de monitoramento, auditoria, healthcheck entre outras propriedades, sem exigir esforço de implementação por parte do desenvolvedor. • Utiliza endpoints HTTP ou JMX para interação. • Uma série de endpoints default são disponibilizados para coleta de informações do estado da aplicação. 9
  6. Spring Actuator 11 • /env – retorna as variáveis do

    ambiente. • /metrics – métricas detalhadas da aplicação, t anto genéricas quanto customizadas. • /loggers – permite consultar e modificar o nível de log da aplicação. • /health – resumo do health status da aplicação • /sessions – lista as sessões HTTP Dentre vários outros endpoints default...
  7. Micrometer.io • Fornece uma camada para exibição de métricas baseada

    em bibliotecas clientes dos mais populares sistemas de monitoramento • Incorporado ao Spring Actuator como mecanismo padrão para exportação de métricas. (Spring Boot 2.x) • Suporte para Prometheus, New Relic, Atlas, Datadog, entre outros. • Sem vendor lock-in • “SLF4J but for metrics” 12
  8. Micrometer.io • Provê binding inteligente para instrumentação dos endpoints Web

    e Webflux, adicionando suas métricas para coleta. - Contagem de requisições, tempo de resposta…. • Também expõe métricas da JVM - Uso de memória, pool de threads... • Fornece uma API para implementar métricas próprias 13
  9. 14

  10. 15

  11. Micrometer.io 16 <!-- Micrometer Prometheus registry --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId>

    </dependency> • No Spring Boot 2, o Micrometer foi incorporado ao Spring Actuator como mecanismo padrão para exportação de métricas. Para exportarmos os dados no formato do Prometheus, basta incluir o registry no seu projeto:
  12. 17

  13. 18

  14. Kubernetes • Plataforma open source para orquestração de containers. •

    Suporte a múltiplos containers runtimes. Docker, Rocket… • Autoscaling com base em métricas de cluster, como o consumo de CPU. • Service Discovery, Load Balancer, ConfigMaps... • Isolamento de recursos por namespace. • Replicação de containers entre diferentes nós para garantir alta disponibilidade • Recuperação automática de container quando ele falha por qualquer motivo 21
  15. 22

  16. 23 FROM openjdk:8-jdk-alpine COPY target/*.jar app.jar EXPOSE 8080 CMD java

    -XX:+PrintFlagsFinal -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Djava.security.egd=file:/dev/./urandom -jar /app.jar Dockerfile
  17. 24 apiVersion: apps/v1 kind: Deployment metadata: name: app-player namespace: default

    labels: app: app-player spec: replicas: 1 selector: matchLabels: app: app-player template: metadata: labels: app: app-player spec: containers: - name: app-player image: jeanmorais/app-player:0.0.1 ports: - name: web containerPort: 8080 Deployment • Definindo as configurações dos Pods
  18. 25 kind: Service apiVersion: v1 metadata: name: app-player labels: app:

    app-player spec: selector: app: app-player ports: - name: web port: 8080 Service
  19. 26 Ingress apiVersion: extensions/v1beta1 kind: Ingress metadata: name: app-player-ingress spec:

    rules: - host: api.jeanmorais.tk http: paths: - backend: serviceName: app-player servicePort: 8080
  20. 27

  21. 29 • Sistema de monitoramento para serviços e aplicações. •

    Open-source (CNCF) • Escrito em Go • Coleta as métricas de seus alvos em determinados intervalos, avalia expressões de regras, exibe os resultados e também pode acionar alertas se alguma condição for observada como verdadeira. O que é?
  22. 30 • É um modelo de dados multi-dimensional (time series)

    • Possui uma linguagem própria (PromQL) para queries de dados em formato time series • Totalmente autônomo, sem dependência de armazenamento externo • A definição dos serviços a serem monitorados pode ser feita através de uma configuração estática ou através de descoberta • Possui vários modos de suporte a gráficos e painéis Aspectos principais
  23. 31

  24. 32

  25. 35

  26. 36 • Em 2016 a CoreOS introduziu o conceito de

    Operators, visando principalmente facilitar a implantação e gerenciamento de aplicações complexas no Kubernetes • Se baseia nos conceitos básicos de resources e controllers do Kubernetes • Inclui conhecimento específico de domínio ou de aplicação para automatizar tarefas comuns. Operators?
  27. 38 • Facilita o deploy e a gestão do Prometheus

    em ambientes clusterizados (Kubernetes), tornando o monitoramento de aplicações e serviços do cluster dinâmico. • Fornece monitoramento de forma facilitada para serviços e implantações do K8s, além de gerenciar as configurações do Prometheus, Alertmanager e Grafana. Prometheus Operator
  28. 39

  29. 40 $ helm repo add coreos https://s3-eu-west-1.amazonaws.com/coreos-charts/stable $ helm install

    coreos/prometheus-operator —name prometheus-operator —namespace monitoring $ helm install coreos/kube-prometheus —name kube-prometheus —set global.rbacEnable=true —namespace monitoring Instalação
  30. apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: app-player labels: prometheus: kube-prometheus

    spec: selector: matchLabels: app: app-player namespaceSelector: any: true endpoints: - port: web path: /actuator/prometheus interval: 10s 41 ServiceMonitor
  31. 42 • Ferramenta open source para coleta e visualização de

    métricas e criação de dashboards. • Pode ser utilizada para exibir dados de várias fontes diferentes como Graphite, Elasticsearch, OpenTSDB, Prometheus and InfluxDB. Grafana
  32. 43

  33. 44