Über die Beobachtbarkeit von Mikrodiensten in Kubernetes

Eine vollständige Anleitung zu Bereitstellungs-, Protokollierungs-, verteilten Ablaufverfolgungs-, Leistungs- und Überwachungsmetriken, einschließlich Clusterzustand.

Hallo Habr. Im Rahmen des Kurses "Microservice Architecture" haben wir eine Übersetzung des Materials für Sie vorbereitet.



Wir laden Sie auch zu einem offenen Webinar zum Thema
"Verteilte Nachrichtenwarteschlangen am Beispiel von kafka" ein.






Suchen Sie nach beobachtbaren Microservices, wissen aber noch nicht, wie Sie diese mit Kubernetes implementieren können? Nun ... vielleicht ist dies der Artikel, nach dem Sie gesucht haben.





Lassen Sie uns zunächst verstehen, was Beobachtbarkeit ist. Dieser Begriff stammt ursprünglich aus der Steuerungstechnik und wurde definiert als "ein Maß dafür, wie gut die internen Zustände eines Systems anhand von Informationen über seine externen Ausgänge bestimmt werden können". In einfachen Worten bedeutet Beobachtbarkeit ein angemessenes Verständnis des Systems, um Korrekturmaßnahmen zu erleichtern.





 Die Beobachtbarkeit beruht auf drei Säulen:





  • () : , . (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