Sobre a capacidade de observação de microsserviços no Kubernetes

Um guia completo para implantação, registro, rastreamento distribuído, desempenho e métricas de monitoramento, incluindo a integridade do cluster.

Olá, Habr. Como parte do curso "Arquitetura de Microsserviços" preparamos uma tradução do material para você.



Também o convidamos para um webinar aberto sobre o tópico
"Filas de mensagens distribuídas usando o exemplo de kafka."






Procurando microsserviços observáveis, mas ainda não sabe como implementá-los com o Kubernetes? Bem ... talvez este seja o artigo que você estava procurando.





Primeiro, vamos entender o que é observabilidade. Este termo se originou na engenharia de sistemas de controle e foi definido como "uma medida de quão bem os estados internos de um sistema podem ser determinados com base nas informações sobre suas saídas externas." Em termos simples, a observabilidade implica compreensão adequada do sistema para facilitar a ação corretiva.





 A observabilidade baseia-se em três pilares:





  • () : , . (events) , .





  • (): /, . / .





  • : , . .





— Kubernetes?





— Kubernetes-

, .





, .





  • Weather-front: , . .





  • Weather-services: , API .





  • Weather-db: Maria, , .





(Deployment object) Kubernetes, — kubectl get deploy



.





, .





Weather-front:





- image: brainupgrade/weather:microservices-front
  imagePullPolicy: Always
  name: weather-front
      
      



Weather-services:





- image: brainupgrade/weather-services:2.0.0
  imagePullPolicy: Always
  name: weather-services
      
      



Weather-db:





- image: mariadb:10.3
  name: mariadb
  ports:
  - containerPort: 3306
    name: mariadb
      
      



— —

, EFK: Elasticsearch, Fluentd Kibana. .





Elasticsearch Kibana:





helm repo add elastic https://helm.elastic.co
helm repo update
helm install --name elasticsearch elastic/elasticsearch --set replicas=1 --namespace elasticsearch
helm install --name kibana elastic/kibana
      
      



Fluentd:





containers:
- name: fluentd
  imagePullPolicy: "Always"
  image: fluent/fluentd-kubernetes-daemonset:v1.12.0-debian-elasticsearch7-1.0
  env:
    - name:  FLUENT_ELASTICSEARCH_HOST
      value: "elasticsearch-master.elasticsearch.svc.cluster.local"
    - name:  FLUENT_ELASTICSEARCH_PORT
      value: "9200"
      
      



Kibana, :





Fluentd (Fluentd Daemonset - 4):





Elasticsearch. Kibana:





«» , — .





— — ()

(distributed tracing) — Java-, Zipkin, Jaeger, Elasticsesarch APM . .





EFK, APM, Elasticsearch. -, APM Kubernetes Deployment.





Elastic APM:





containers:
- name: apm-server
  image: docker.elastic.co/apm/apm-server:7.5.0
  ports:
  - containerPort: 8200
    name: apm-port
      
      



APM , APM . , weather-front. weather-services.





APM weather-front:





initContainers:
- name: elastic-java-agent
  image: docker.elastic.co/observability/apm-agent-java:1.12.0
  volumeMounts:
  - mountPath: /elastic/apm/agent
    name: elastic-apm-agent
  command: ['cp', '-v', '/usr/agent/elastic-apm-agent.jar', '/elastic/apm/agent']   
containers:
  - image: brainupgrade/weather:microservices-front
    imagePullPolicy: Always
    name: weather-front
    volumeMounts:
    - mountPath: /elastic/apm/agent
      name: elastic-apm-agent         
    env:
      - name: ELASTIC_APM_SERVER_URL
        value: "http://apm-server.elasticsearch.svc.cluster.local:8200"
      - name: ELASTIC_APM_SERVICE_NAME
        value: "weather-front"
      - name: ELASTIC_APM_APPLICATION_PACKAGES
        value: "in.brainupgrade"
      - name: ELASTIC_APM_ENVIRONMENT
        value: prod
      - name: ELASTIC_APM_LOG_LEVEL
        value: DEBUG
      - name: JAVA_TOOL_OPTIONS
        value: -javaagent:/elastic/apm/agent/elastic-apm-agent.jar
      
      



, Observability -> APM console Kibana, , ( 6).





, weather-front, :





, , , , (trace Sample) . .





, weather-front weather-services. Trace Sample, (transaction details).





Actions .





, «» .





— —

«», , APM, (Latency), (Throughput) (Error rate).





, Spring Boot Prometheus Actuator . Prometheus Grafana, :





Prometheus Grafana:





helm repo add prometheus-community  https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install --name prometheus prometheus-community/prometheus
helm install --name grafana grafana/grafana
      
      



Prometheus Grafana , :





template:
   metadata:
     labels:
       app: weather-services
     annotations:
       prometheus.io/scrape: "true"
       prometheus.io/port: "8888"
       prometheus.io/path: /actuator/prometheus
     containers:
       - image: brainupgrade/weather-services:2.0.0
         imagePullPolicy: Always
         name: weather-services
         volumeMounts:
         - mountPath: /elastic/apm/agent
           name: elastic-apm-agent         
         env:
           - name: management.endpoints.web.exposure.include
             value: "*"
           - name: spring.application.name
             value: weather-services
           - name: management.server.port
             value: "8888"
           - name: management.metrics.web.server.request.autotime.enabled
             value: "true"
           - name: management.metrics.tags.application
             value: weather-services
      
      



Grafana, id 12685 , . weather-front:





, Grafana id 6417, - :






"Microservice Architecture".





« ».








All Articles