ЁЯУИ рдзрдбрд╛ 26 тАФ Observability: рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ, рджреИрдирдВрджрд┐рдиреА рдЖрдгрд┐ рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: рдзрдбрд╛ 26 / 26 тАФ рд╢реЗрд╡рдЯрдЪрд╛ рдзрдбрд╛! ┬╖ рдорд╛рдЧреАрд▓: lesson-25-crds-operators
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рд╕рдВрдкреВрд░реНрдг рдХреЛрд░реНрд╕ тАФ рд╕рд░реНрд╡ 26 рдзрдбреЗ. рд╢реЗрд╡рдЯ: рдЪрд╛рд▓реВ cluster рддреБрдореНрд╣реА рдкреНрд░рддреНрдпрдХреНрд╖ рдХрд╕рд╛ рдкрд╛рд╣рддрд╛: рддреАрди signals, рдиреЗрд╣рдореАрдЪреА tools, рдЖрдгрд┐ "рдкреБрд░реЗрд╕реЗ рдЪрд╛рдВрдЧрд▓реЗ" рдХрд╕реЗ рджрд┐рд╕рддреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЬреА рд╢рд╛рд│рд╛ рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрдд рдирд╛рд╣реА рддреА рдЕрдлрд╡рд╛рдВрд╡рд░ рдЪрд╛рд▓рддреЗ. рддреАрди рдкреНрд░рдХрд╛рд░рдЪреА рдХрд╛рдЧрджрдкрддреНрд░реЗ рд╣реЗ рджреБрд░реБрд╕реНрдд рдХрд░рддрд╛рдд:
- рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ ЁЯУК (metrics) тАФ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдЖрдХрдбреЗ: рдкреНрд░рддреНрдпреЗрдХ рдореВрд▓ рдХрд┐рддреА CPU
рд╡рд╛рдкрд░рддреЗ? рджрд░ рд╕реЗрдХрдВрджрд╛рд▓рд╛ рдХрд┐рддреА requests? рдХрд┐рддреА pods Pending? рддреБрдореНрд╣реА рд▓рд╣рд╛рди
рдЖрд╡реГрддреНрддреА рдкрд╛рд╣рд┐рд▓реА рдЖрд╣реЗ: metrics-server (рддреЛ
kubectl topрдЖрдгрд┐ HPA рд▓рд╛ рдкреБрд░рд╡рддреЛ, L09). рдореЛрдареА рдЖрд╡реГрддреНрддреА рдореНрд╣рдгрдЬреЗ Prometheus: рджрд░ рдХрд╛рд╣реА рд╕реЗрдХрдВрджрд╛рдВрдиреА рддреЛ рд╢рд╛рд│реЗрдд рдлрд┐рд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рджрд╛рд░рд╛рд╡рд░рдЪреЗ рдЖрдХрдбреЗ (/metrics) рдЙрддрд░рд╡реВрди рдШреЗрддреЛ, рдЗрддрд┐рд╣рд╛рд╕рд╛рд╕рд╣ рдиреЛрдВрджрд╡рддреЛ тАФ рдореНрд╣рдгрдЬреЗ рддреБрдореНрд╣реА рд╡рд┐рдЪрд╛рд░реВ рд╢рдХрддрд╛ "рдХрд╛рд▓ рд░рд╛рддреНрд░реА 2 рд╡рд╛рдЬрддрд╛ рддреЗ рдХрд╛рдп рдХрд░рдд рд╣реЛрддреЗ?" - рджреИрдирдВрджрд┐рдиреА ЁЯУЬ (logs) тАФ рдкреНрд░рддреНрдпреЗрдХ рдореБрд▓рд╛рдиреЗ рдЬреЗ рд▓рд┐рд╣рд┐рд▓реЗ рддреЗ (
kubectl logs, L16). рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдПрдХ рдЕрдбрдЪрдг: рджреИрдирдВрджрд┐рдиреА рдмрд╛рдХрд╛рд╕реЛрдмрддрдЪ рдорд░рддрд╛рдд! рдореНрд╣рдгреВрди рдкреНрд░рддреНрдпреЗрдХ рдордЬрд▓реНрдпрд╛рд╡рд░рдЪрд╛ рдПрдХ collector (рдПрдХ DaemonSet! тАФ L21) рдкреНрд░рддреНрдпреЗрдХ рджреИрдирдВрджрд┐рдиреА рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдд (Loki, CloudWatch Logs, Elasticsearch) рдкрд╛рдард╡рддреЛ, рдЬрд┐рдереЗ рддреНрдпрд╛ pods рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЯрд┐рдХрддрд╛рдд рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рд╢рд╛рд│реЗрдд рд╢реЛрдзрддрд╛ рдпреЗрддрд╛рдд. - рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛ ЁЯФФ (alerts) тАФ рд░рд╛рддреНрд░реА 3 рд╡рд╛рдЬрддрд╛ dashboards рдХрдбреЗ рдХреЛрдгреАрдЪ рдЯрдХ рд▓рд╛рд╡реВрди рдкрд╛рд╣рдд рдирд╛рд╣реА. рдирд┐рдпрдо metrics рд╡рд░ рд▓рдХреНрд╖ рдареЗрд╡рддрд╛рдд: "5 min рд╣рд╡реЗ рддреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА ready pods тЖТ on-call рдлреЛрди рд╡рд╛рдЬрд╡рд╛." (Alertmanager, рдХрд┐рдВрд╡рд╛ CloudWatch alarms.)
рдЖрдгрд┐ рднрд╛рд░реА рдЪреМрдереЗ: traces ЁЯз╡ тАФ рдПрдХрд╛ request рдЪрд╛ рдкреНрд░рд╡рд╛рд╕ services рдордзреВрди рдЬреЛрдбрд▓реЗрд▓рд╛ (рдлрд╛рдЯрдХ тЖТ api тЖТ analytics тЖТ db), "рдХреБрдареЗ рд╣рд│реВ рдЭрд╛рд▓реЗ?" рд╕рд╛рдареА. рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдмреЛрдЯрд╛рдВрдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд services рд╣реЛрддреАрд▓ рддреЗрд╡реНрд╣рд╛ рддреНрдпрд╛рдЪреА рдУрд│рдЦ рдХрд░реВрди рдШреНрдпрд╛.
рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реБрд░реБрд╡рд╛рддреАрдЪрд╛ рд╕рдВрдЪ: kube-prometheus-stack (Prometheus + Grafana
- Alertmanager, Helm рдордзреВрди install тАФ ArgoCD рдХреЛрд░реНрд╕ L11 тАФ рдЖрдгрд┐ рд╣реЛ, рддреЛ рдкреВрд░реНрдгрдкрдгреЗ operators + CRDs рд╡рд░рдЪ рдЙрднрд╛ рдЖрд╣реЗ тАФ L25 ЁЯдп).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
subgraph school["ЁЯПл the cluster"]
pods["ЁЯкС pods expose /metrics"]
ds["ЁЯзп log collector<br/>DaemonSet, every floor (L21)"]
end
prom["ЁЯУК Prometheus<br/>scrapes numbers + history"]
loki["ЁЯУЬ log store<br/>diaries outlive desks"]
graf["ЁЯУ║ Grafana<br/>one screen: metrics + logs"]
alert["ЁЯФФ Alertmanager<br/>rules тЖТ ring the on-call phone"]
pods --> prom
ds --> loki
prom --> graf
loki --> graf
prom --> alert
тЭУ рдХрд╛рдп
- metrics-server vs Prometheus: HPA/
topрд╕рд╛рдареА рдЖрддреНрддрд╛рдЪреЗ live рдЖрдХрдбреЗ vs рдкреВрд░реНрдг рдЗрддрд┐рд╣рд╛рд╕ + query language (PromQL) + alerting. рддреБрдореНрд╣рд╛рд▓рд╛ рджреЛрдиреНрд╣реА рд╣рд╡реЗ. - рдЫреЛрдЯреНрдпрд╛ setup рдиреЗ рдЙрддреНрддрд░ рджреНрдпрд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗрдд рдЕрд╕реЗ рдЪрд╛рд░ рдкреНрд░рд╢реНрди: app рдЪрд╛рд▓реВ рдЖрд╣реЗ рдХрд╛ (probes ready)? рддреЗ errors рджреЗрдд рдЖрд╣реЗ рдХрд╛ (HTTP 5xx rate)? рддреЗ рд╣рд│реВ рдЖрд╣реЗ рдХрд╛ (latency)? cluster рдирд┐рд░реЛрдЧреА рдЖрд╣реЗ рдХрд╛ (Pending pods, node pressure тАФ L23 рдЪреЗ evictions рдЗрдереЗрдЪ рдЖрдзреА рджрд┐рд╕рддрд╛рдд!).
- рд╕реБрд░реБрд╡рд╛рддреАрдЪреЗ рд╕реЛрдиреЗрд░реА alerts: deployment рдЪреЗ ready-replicas рд╣рд╡реНрдпрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА; pod restart-loop рдордзреНрдпреЗ; node NotReady; PVC рдЬрд╡рд│рдЬрд╡рд│ рднрд░рд▓реЗрд▓рд╛; job failed (L18 рдЪреА рддреБрдордЪреА backup рдШрдВрдЯрд╛!).
- EKS рд╡рд░ рднрд╛рдбреНрдпрд╛рдиреЗ-рдШреНрдпрд╛-рд╕реНрд╡рддрдГ-рдЪрд╛рд▓рд╡реВ-рдирдХрд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ CloudWatch Container Insights тАФ рдХрдореА рдмрдЯрдгреЗ, рдПрдХрдЪ рдмрд┐рд▓; trade-offs рдкрд╛рдирд╛рдЪреЗ рддрд░реНрдХрд╢рд╛рд╕реНрддреНрд░ рдиреЗрд╣рдореАрдкреНрд░рдорд╛рдгреЗ рд▓рд╛рдЧреВ.
- рдЦрд░реНрдЪ cardinality рдЖрдгрд┐ retention рдордзреНрдпреЗ рдЕрд╕рддреЛ: 15 рджрд┐рд╡рд╕ hot рдареЗрд╡рд╛, рдмрд╛рдХреА cold рдкрд╛рдард╡рд╛, рдЖрдгрд┐ metrics рдирд╛ рдЕрдорд░реНрдпрд╛рдж values рдЪреЗ labels рд▓рд╛рд╡реВ рдирдХрд╛ (user IDs ЁЯШ▒).
ЁЯдФ рдХрд╛
рдЖрдзреАрдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдзрдбреНрдпрд╛рдиреЗ cluster рд▓рд╛ рдПрдХ рд╡рд░реНрддрди рджрд┐рд▓реЗ; observability рдиреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд│рддреЗ рдХреА рдЖрддреНрддрд╛ рдиреЗрдордХреЗ рдХреЛрдгрддреЗ рдШрдбрдд рдЖрд╣реЗ. рдзрдбрд╛ 16 рдЪрд╛ рд╕рд░рд╛рд╡ рдкреБрд░рд╛рд╡реНрдпрд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгреЗ рд╡рд┐рд░реБрджреНрдз рдШрдмрд░рд╛рдЯреАрдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгреЗ тАФ рдЖрдгрд┐ backup рдЖрдЬ рд░рд╛рддреНрд░реА рдЕрдкрдпрд╢реА рдЭрд╛рд▓рд╛ рд╣реЗ рдЖрдЬ рдХрд│рдгреЗ рд╡рд┐рд░реБрджреНрдз backup рд▓рд╛рдЧрд▓рд╛ рддреНрдпрд╛ рджрд┐рд╡рд╢реА рдХрд│рдгреЗ тАФ рдпрд╛рдВрддрд▓рд╛ рдлрд░рдХрд╣реА рд╣рд╛рдЪ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
# the junior report card you already have:
kubectl top nodes && kubectl -n school top pods # (metrics-server, L09)
# what Prometheus would scrape тАФ peek at a real /metrics page:
kubectl -n school port-forward deploy/school-api 3000:3000 &
curl -s localhost:3000/metrics | head -20 2>/dev/null \
|| echo "no /metrics endpoint тАФ apps expose one via client libraries (prom-client for Node)"
kill %1
# the full stack, one command (needs Helm; ~2 min, laptop-friendly):
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install obs prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
kubectl -n monitoring port-forward svc/obs-grafana 3001:80 &
# open http://localhost:3001 (admin / prom-operator) тЖТ dashboards for
# YOUR cluster: nodes, pods, the works. ЁЯУ║ Uninstall: helm uninstall obs -n monitoring
ЁЯФз рдпрд╛ рдзрдбреНрдпрд╛рд╕рд╛рдареА kubectl
kubectl port-forward svc/grafana ┬╖ kubectl get servicemonitors
ЁЯФЧ рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд: ЁЯкк AWS L18 (CloudWatch тАФ рддреАрдЪ рддрд┐рдХрдбреА, managed)
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ
Grafana k8s/observability/starter-dashboard.json рдордзрд▓реЗ рдЪрд╛рд░ panels рджрд╛рдЦрд╡рддреЗ тАФ up / errors / latency / cluster health тАФ рдЖрдгрд┐ рддреБрдореНрд╣реА pod рдорд╛рд░рд▓реНрдпрд╛рд╡рд░ alert рд╡рд╛рдЬрддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ
monitoring stack local рд╡рд░ helm uninstall рдХрд░рд╛ тАФ EKS рд╡рд░ рддреЗ nodes рдЖрдгрд┐ storage рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ рдмрд┐рд▓ рд▓рд╛рд╡рддрд╛рдд
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- outage рд╣реЛрдИрдкрд░реНрдпрдВрдд рдХреЛрдгреАрдЪ рди рдкрд╛рд╣рдгрд╛рд░реЗ dashboards тАФ alert рдлреЛрдирд▓рд╛ рдЬреЛрдбрд╛
- рдкреНрд░рддреНрдпреЗрдХ metric рд╡рд░ alert тАФ рдЖрдзреА рдЪрд╛рд░ рдкреНрд░рд╢реНрди, рдордЧ рд╡рд╛рдврд╡рд╛
ЁЯОУ рд╕рдВрдкреВрд░реНрдг рд╢рд╛рд│рд╛, рдкреВрд░реНрдг
рдбрдмреЗ тЖТ рдмрд╛рдХ тЖТ monitors тЖТ reception тЖТ рдЦреЛрд▓реНрдпрд╛ тЖТ рд╕реВрдЪрдирд╛-рдлрд▓рдХ тЖТ probes тЖТ рд╡рд╛рдЯреЗ тЖТ рдмрд╕реЗрд╕ тЖТ рдлрд╛рдЯрдХреЗ тЖТ рдмрджрд▓реНрдпрд╛ тЖТ рдлрд│реНрдпрд╛ тЖТ office тЖТ deploy robots тЖТ рдЕрдиреЗрдХ рдЗрдорд╛рд░рддреА тЖТ рдкрд░рд┐рдЪрд╛рд░рд┐рдХреЗрдЪрд╛ рд╕рд░рд╛рд╡ тЖТ hall passes тЖТ рдЧреГрд╣рдкрд╛рдард╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛ тЖТ рдЪрд┐рдареНрдареНрдпрд╛рдВрдЪреЗ рдирд┐рдпрдо тЖТ рдард░рд▓реЗрд▓реНрдпрд╛ рдЬрд╛рдЧрд╛ тЖТ рдЕрдЧреНрдирд┐рд╢рд╛рдордХ тЖТ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдкрд╛рдЯреНрдпрд╛ тЖТ рдЬреЗрд╡рдгрд╛рдЪреЗ рдХреНрд░рдорд╛рдВрдХ тЖТ рдиреВрддрдиреАрдХрд░рдг тЖТ рдирд╡реЗ рд╢рдмреНрдж тЖТ рдЖрдгрд┐ рдЖрддрд╛: рд╕рдЧрд│реНрдпрд╛рд╡рд░ рдирдЬрд░. рд╕рд╡реНрд╡реАрд╕ рдзрдбреЗ. рддреБрдореНрд╣реА рдЖрддрд╛ рдлрдХреНрдд Kubernetes рд╡рд╛рдкрд░рдд рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА рддреЗ рдЪрд╛рд▓рд╡реВ рд╢рдХрддрд╛, debug рдХрд░реВ рд╢рдХрддрд╛, рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд░реВ рд╢рдХрддрд╛, upgrade рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рд╢реНрд╡рд╛рд╕ рдкрд╛рд╣реВ рд╢рдХрддрд╛. ЁЯОУ
git checkout main # and go run something real