Panduan lengkap untuk penerapan, logging, pelacakan terdistribusi, kinerja, dan metrik pemantauan, termasuk kesehatan cluster.
Halo, Habr. Sebagai bagian dari kursus "Arsitektur Layanan Mikro", kami telah menyiapkan terjemahan materi untuk Anda.
Kami juga mengundang Anda ke webinar terbuka dengan topik "Antrean pesan yang didistribusikan menggunakan contoh kafka".
Mencari layanan mikro yang dapat diamati tetapi belum tahu cara mengimplementasikannya dengan Kubernetes? Nah ... mungkin ini artikel yang Anda cari.
Pertama, mari kita pahami apa itu observabilitas. Istilah ini berasal dari rekayasa sistem kendali dan didefinisikan sebagai "ukuran seberapa baik keadaan internal suatu sistem dapat ditentukan berdasarkan informasi tentang keluaran eksternalnya." Secara sederhana, observabilitas menyiratkan pemahaman yang memadai tentang sistem untuk memfasilitasi tindakan korektif.
Pengamatan bertumpu pada tiga pilar:
() : , . (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: