ЁЯУИ рдзрдбрд╛ 18 тАФ CloudWatch: рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ, рдбрд╛рдпрд▒реНрдпрд╛, рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 18 ┬╖ рдорд╛рдЧреАрд▓: lesson-17-rds ┬╖ рдкреБрдвреАрд▓: lesson-19-lambda
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ18. рдЖрддрд╛рдкрд░реНрдпрдВрдд рддреБрдореНрд╣реА рдмрд╛рдВрдзрд▓реЗрд▓реЗ рд╕рдЧрд│реЗ, рдЕрдЦреЗрд░ рджрд┐рд╕реВ рд▓рд╛рдЧрддреЗ.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЬреА рд╢рд╛рд│рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рдд рдирд╛рд╣реА, рддрд┐рдЪреНрдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрддрд╛рдкрд▓реЗрд▓реНрдпрд╛ рдкрд╛рд▓рдХрд╛рдВрдХрдбреВрдирдЪ рдХрд│рддреЗ. CloudWatch рд╣реА рд╢рд╛рд│реЗрдЪреА рд╕рдВрдкреВрд░реНрдг рдЬрд╛рдгреАрд╡-рд╡реНрдпрд╡рд╕реНрдерд╛ рдЖрд╣реЗ, рддреАрди рднрд╛рдЧрд╛рдВрдд:
- рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ ЁЯУК (metrics): рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдХ, reception рдЖрдгрд┐ рджрдкреНрддрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рджрд░ рдорд┐рдирд┐рдЯрд╛рд▓рд╛ рдЖрдХрдбреЗ рдкрд╛рдард╡рддрд╛рдд тАФ CPU, requests, рдирд┐рд░реЛрдЧреА рдмрд╛рдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛, рдореЛрдХрд│реА storage. Metric рдореНрд╣рдгрдЬреЗ рдлрдХреНрдд timestamp рдЕрд╕рд▓реЗрд▓рд╛ рдЖрдХрдбрд╛, рдирд╛рд╡рд╛рдиреБрд╕рд╛рд░ рдареЗрд╡рд▓реЗрд▓рд╛.
- рдбрд╛рдпрд▒реНрдпрд╛ ЁЯУФ (logs): рдиреЗрдордХреЗ рдХрд╛рдп рдШрдбрд▓реЗ рддреНрдпрд╛рдЪрд╛ рдордЬрдХреВрд░ тАФ application output, Lambda prints, VPC flow logs (рдХреЛрдгреА рдХреЛрдгрддреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рджрд╛рд░рд╛рд╡рд░ рдареЛрдард╛рд╡рд▓реЗ тАФ рдзрдбрд╛ 13 рдЪреЗ corridors, рд▓рд┐рд╣реВрди рдареЗрд╡рд▓реЗрд▓реЗ).
- рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛ ЁЯФФ (alarms): рдПрдХрд╛ рдЖрдХрдбреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдареЗрд╡рдгрд╛рд░рд╛ рдирд┐рдпрдо: *"рдЬрд░ CPU
80% 5 рдорд┐рдирд┐рдЯреЗ рд░рд╛рд╣рд┐рд▓рд╛ тЖТ рд╡рд╛рдЬрд╡."* рдЖрдгрд┐ рд╡рд╛рдЬрдгреЗ рдХрд╛рд╣реАрддрд░реА рдХрд░рддреЗрд╣реА: рд╢рд┐рдХреНрд╖рд┐рдХреЗрд▓рд╛ text рдХрд░рддреЗ (SNS), рдХрд┐рдВрд╡рд╛ тАФ рд╕рдЧрд│реНрдпрд╛рдд рд╕реБрдВрджрд░ тАФ fleet рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХрд╛рд▓рд╛ рдмрд╛рдХ рд╡рд╛рдврд╡рд╛рдпрд▓рд╛ рд╕рд╛рдВрдЧрддреЗ (рдзрдбрд╛ 12 рдЪрд╛ ASG; рд╣рд╛ alarm рдореНрд╣рдгрдЬреЗрдЪ k8s HPA рдЪреНрдпрд╛ рдкрд╛рд╡рд╕рд╛рд│реА рджрд┐рд╡рд╕рд╛рдЪреНрдпрд╛ рдЬрд╛рджрд╛ рдмрд╕реЗрд╕, рдПрдХ рдерд░ рдЦрд╛рд▓реА).
рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдзрдХреНрдХрд╛ ЁЯлв: EC2 рдЪреНрдпрд╛ рдЕрдВрдЧрднреВрдд рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХрд╛рдд memory рдЪрд╛ рд░рдХрд╛рдирд╛рдЪ рдирд╛рд╣реА. Hypervisor рдмрд╛рд╣реЗрд░реВрди CPU рдкрд╛рд╣реВ рд╢рдХрддреЛ, рдкрдг memory рд╣реА рдмрд╛рдХрд╛рдЪреА рдЦрд╛рдЬрдЧреА рдмрд╛рдм рдЖрд╣реЗ тАФ рддреА рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ CloudWatch agent (рдмрд╛рдХрд╛рд╡рд░рдЪ рдмрд╕рд▓реЗрд▓рд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╡рд╛рд░реНрддрд╛рд╣рд░) install рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрддреЛ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
src["ЁЯЦея╕П desks ┬╖ ЁЯЫОя╕П ALB ┬╖ ЁЯЧГя╕П RDS<br/>every minute"]
m["ЁЯУК metrics<br/>CPUUtilization = 87%"]
l["ЁЯУФ logs<br/>app output, flow logs"]
a["ЁЯФФ alarm: CPU > 80%<br/>for 5 min"]
sns["ЁЯУ▒ text the teacher (SNS)"]
asg["ЁЯСп ASG: +2 desks<br/>(the HPA, one floor down)"]
src -->|"1"| m
src -->|"1"| l
m -->|"2 watched by"| a
a -->|"3a"| sns
a -->|"3b"| asg
тЭУ рдХрд╛рдп
- Namespaces & dimensions: metrics
AWS/EC2,AWS/ApplicationELBтАж рдЦрд╛рд▓реА рдареЗрд╡рд▓реЗ рдЬрд╛рддрд╛рдд, instance/target-group рдиреБрд╕рд╛рд░ рд╡рд┐рднрд╛рдЧрд▓реЗрд▓реЗ. рддреБрдордЪреЗ app рд╕реНрд╡рддрдГрдЪреЗ custom metrics рдкрд╛рдард╡реВ рд╢рдХрддреЗ (put-metric-data) тАФ рджрд░ рдорд┐рдирд┐рдЯрд╛рдЪреНрдпрд╛ orders рд╣рд╛рд╣реА metric рдЖрд╣реЗ. - Alarm states:
OK/ALARM/INSUFFICIENT_DATAтАФ рддрд┐рд╕рд▒реНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдмрд╣реБрдзрд╛ рдмрд╛рдХрд╛рдиреЗ рдХрд│рд╡рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ рдЖрд╣реЗ, рдЬреА рд╕реНрд╡рддрдГрдЪ рдПрдХ рдЖрдгреАрдмрд╛рдгреА рдЖрд╣реЗ. - Logs Insights: рдбрд╛рдпрд▒реНрдпрд╛рдВрд╕рд╛рдареА grep тАФ terabytes log рдУрд│реАрдВрд╡рд░ query рдХрд░рд╛
(
filter @message like /ERROR/ | stats count() by bin(5m)). - Dashboards: staff room рдЬрд╡рд│рдЪрд╛ рд╕реВрдЪрдирд╛рдлрд▓рдХ тАФ рд╕рдЧрд│реЗ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛рдХрдбреЗ рдирдЬрд░ рдЯрд╛рдХрддрд╛рдд рддреЗ рдЪрд╛рд░ graphs.
- рдпрд╛ рдорд╛рд▓рд┐рдХреЗрдд: k8s рдзрдбрд╛ 26 рдордзрд▓реЗ Prometheus/Grafana рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреЗ рд╣реЗрдЪ рддреНрд░рд┐рдХреВрдЯ, self-hosted; EKS control-plane logs рдЗрдереЗрдЪ рдпреЗрддрд╛рдд.
ЁЯдФ рдХрд╛
рдзрдбрд╛ 20 рддреБрдореНрд╣рд╛рд▓рд╛ рд╢рд╛рд│реЗрдЪрд╛ рдЦрд░реНрдЪ рд╕рд╛рдВрдЧреЗрд▓; рд╣рд╛ рдзрдбрд╛ рд╕рд╛рдВрдЧрддреЛ рддреА рдХрд╛рдп рдХрд░рдд рдЖрд╣реЗ тАФ рдЖрдгрд┐ alarm-тЖТ-action рдЪреА рдЬреЛрдбрдгреА рдореНрд╣рдгрдЬреЗ "monitoring" (outage рдирдВрддрд░ рдкрд╛рд╣рд╛рдпрдЪреЗ рд╕реБрдВрджрд░ graphs) рдЖрдгрд┐ "operating" (рддреБрдореНрд╣реА рдЙрдардгреНрдпрд╛рдЖрдзреАрдЪ рд╢рд╛рд│рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЗ) рдпрд╛рдВрддрд▓рд╛ рдлрд░рдХ. Metrics рд╕рд╛рдВрдЧрддрд╛рдд рдХреА рдХрд╛рд╣реАрддрд░реА рдЪреБрдХрд▓реЗ рдЖрд╣реЗ, рдбрд╛рдпрд▒реНрдпрд╛ рд╕рд╛рдВрдЧрддрд╛рдд рдХрд╛: рджреЛрдиреНрд╣реА рд▓рд╛рдЧрддрд╛рдд, рдиреАрдЯ рдареЗрд╡рд▓реЗрд▓реЗ рдЖрдгрд┐ рд╕рд╛рдкрдбрдгреНрдпрд╛рдЬреЛрдЧреЗ.
ЁЯФз рдХрд╕реЗ
# read a desk's report card from the CLI (last hour of CPU):
aws cloudwatch get-metric-statistics --namespace AWS/EC2 \
--metric-name CPUUtilization --dimensions Name=InstanceId,Value=$ID \
--start-time $(date -u -v-1H +%FT%TZ) --end-time $(date -u +%FT%TZ) \
--period 300 --statistics Average
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~15 рдорд┐рдирд┐рдЯреЗ, рдХрд╛рд╣реА рдкреИрд╕реЗ)
рдзрдбрд╛ 07 рдЪрд╛ рдмрд╛рдХ boot рдХрд░рд╛, рддреНрдпрд╛рд╡рд░ stress --cpu 2 рдЪрд╛рд▓рд╡рд╛ (user-data stress
install рдХрд░рддреЗ), CPU > 50% рд╡рд░ alarm рдмрдирд╡рд╛ рдЖрдгрд┐ рддреЛ рддреБрдордЪреНрдпрд╛ email рдиреЗ subscribe
рдХреЗрд▓реЗрд▓реНрдпрд╛ SNS topic рд▓рд╛ рдЬреЛрдбрд╛, рдЖрдгрд┐ mail рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рд╛. рддреАрдЪ рдЙрд╕рд│реА graph рдореНрд╣рдгреВрди
рд╡рд╛рдЪрд╛. Destroy рдХрд░рд╛ тАФ рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛, alarm рдареЗрд╡рд╛рдпрд▓рд╛ рдореЛрдлрдд рдЖрд╣реЗ, рдкрдг рдмрд╛рдХ рдирд╛рд╣реА.
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
Stress test рджрд░рдореНрдпрд╛рди alarm OK тЖТ ALARM рд╣реЛрддреЛ рдЖрдгрд┐ SNS email рдпреЗрддреЛ; metric graph рдЙрд╕рд│реА рджрд╛рдЦрд╡рддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
рдмрд╛рдХ terraform destroy рдХрд░рд╛; alarm рд╕реНрд╡рддрдГ рдареЗрд╡рд╛рдпрд▓рд╛ рдореЛрдлрдд рдЖрд╣реЗ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- 1 рддрд╛рд╕рд╛рдЪреНрдпрд╛ рд╕рд░рд╛рд╕рд░реАрд╡рд░ alarm тАФ рдЙрд╕рд│реА рд╕рд░рд╛рд╕рд░реАрдд рд╡рд┐рд░реВрди рдЬрд╛рддреЗ
- CloudWatch agent рд╢рд┐рд╡рд╛рдп memory metric рдЪреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдгреЗ
INSUFFICIENT_DATAрдХрдбреЗ рджреБрд░реНрд▓рдХреНрд╖ тАФ рдмрд╛рдХрд╛рдиреЗ рдХрд│рд╡рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ, рддреЗ incident рдЖрд╣реЗ
тПня╕П рдкреБрдвреЗ
рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╕рдЧрд│реЗ рдХрд╛рд╣реА рдХрд╛рдорд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдгрд╛рд▒реНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ. рдкрдг рдХрд╛рд╣реА рдХрд╛рдо рджрд┐рд╡рд╕рд╛рддреВрди рдПрдХрджрд╛рдЪреЗ рдЫреЛрдЯреЗ рдХрд╛рдо рдЕрд╕рддреЗ тАФ рддреНрдпрд╛рд╕рд╛рдареА рдмрд╛рдХ рднрд╛рдбреНрдпрд╛рдиреЗ рдШреЗрдгреЗ рдореВрд░реНрдЦрдкрдгрд╛ рдЖрд╣реЗ. рдзрдбрд╛ 19: Lambda, рдлрдХреНрдд рдмреЛрд▓рд╛рд╡рд▓реНрдпрд╛рд╡рд░рдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рдгрд╛рд░рд╛ рдорджрддрдиреАрд╕.