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

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
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