ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯУИ рдзрдбрд╛ 18 тАФ CloudWatch: рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ, рдбрд╛рдпрд▒реНрдпрд╛, рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯУИ рдзрдбрд╛ 18 тАФ CloudWatch: рдкреНрд░рдЧрддрд┐рдкреБрд╕реНрддрдХреЗ, рдбрд╛рдпрд▒реНрдпрд╛, рдзреЛрдХреНрдпрд╛рдЪреНрдпрд╛ рдШрдВрдЯрд╛

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 18 ┬╖ рдорд╛рдЧреАрд▓: lesson-17-rds ┬╖ рдкреБрдвреАрд▓: lesson-19-lambda


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ18. рдЖрддрд╛рдкрд░реНрдпрдВрдд рддреБрдореНрд╣реА рдмрд╛рдВрдзрд▓реЗрд▓реЗ рд╕рдЧрд│реЗ, рдЕрдЦреЗрд░ рджрд┐рд╕реВ рд▓рд╛рдЧрддреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдЬреА рд╢рд╛рд│рд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рджрд┐рд╕рдд рдирд╛рд╣реА, рддрд┐рдЪреНрдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдВрддрд╛рдкрд▓реЗрд▓реНрдпрд╛ рдкрд╛рд▓рдХрд╛рдВрдХрдбреВрдирдЪ рдХрд│рддреЗ. CloudWatch рд╣реА рд╢рд╛рд│реЗрдЪреА рд╕рдВрдкреВрд░реНрдг рдЬрд╛рдгреАрд╡-рд╡реНрдпрд╡рд╕реНрдерд╛ рдЖрд╣реЗ, рддреАрди рднрд╛рдЧрд╛рдВрдд:

рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдзрдХреНрдХрд╛ ЁЯлв: 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

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рдзрдбрд╛ 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 рд╕реНрд╡рддрдГ рдареЗрд╡рд╛рдпрд▓рд╛ рдореЛрдлрдд рдЖрд╣реЗ

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

тПня╕П рдкреБрдвреЗ

рдЖрддрд╛рдкрд░реНрдпрдВрдд рд╕рдЧрд│реЗ рдХрд╛рд╣реА рдХрд╛рдорд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рдгрд╛рд▒реНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ. рдкрдг рдХрд╛рд╣реА рдХрд╛рдо рджрд┐рд╡рд╕рд╛рддреВрди рдПрдХрджрд╛рдЪреЗ рдЫреЛрдЯреЗ рдХрд╛рдо рдЕрд╕рддреЗ тАФ рддреНрдпрд╛рд╕рд╛рдареА рдмрд╛рдХ рднрд╛рдбреНрдпрд╛рдиреЗ рдШреЗрдгреЗ рдореВрд░реНрдЦрдкрдгрд╛ рдЖрд╣реЗ. рдзрдбрд╛ 19: Lambda, рдлрдХреНрдд рдмреЛрд▓рд╛рд╡рд▓реНрдпрд╛рд╡рд░рдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рдгрд╛рд░рд╛ рдорджрддрдиреАрд╕.

ЁЯУИ Lesson 18 тАФ CloudWatch: report cards, diaries, alarm bells

ЁЯУН You are here: Lesson 18 of 20 ┬╖ Previous: lesson-17-rds ┬╖ Next: lesson-19-lambda


ЁЯУж What's in this branch

Lessons 01тАУ18. Everything you've built so far, finally visible.

ЁЯзТ Explain like I'm 5

A school you can't see is a school you find out about from angry parents. CloudWatch is the school's whole awareness system, in three parts:

One famous surprise ЁЯлв: EC2's built-in report card has no memory column. The hypervisor can see CPU from outside, but memory is the desk's private business тАФ you must install the CloudWatch agent (a little reporter ON the desk) to mail that in.

ЁЯЧ║я╕П Diagram

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

тЭУ What

ЁЯдФ Why

Lesson 20 will tell you what the school costs; this lesson tells you what it's doing тАФ and the alarm-тЖТ-action wiring is the difference between "monitoring" (pretty graphs you look at after the outage) and "operating" (the school reacts before you wake up). Metrics say THAT something's wrong, diaries say WHY: you need both, filed and findable.

ЁЯФз How

# 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

ЁЯзк Try it (~15 min, pennies)

Boot lesson 07's desk, stress --cpu 2 it (user-data installs stress), create an alarm at CPU > 50% wired to an SNS topic your email subscribes to, and wait for the mail. Read the same spike as a graph. Destroy тАФ and notice the alarm itself is free to keep, but the desk isn't.

тЬЕ Verify тАФ what you should see

the alarm goes OK тЖТ ALARM during the stress test and the SNS email arrives; the metric graph shows the spike.

ЁЯз╣ Clean up тАФ do not leave running

terraform destroy the desk; the alarm itself is free to keep

тЪая╕П Common mistakes

тПня╕П Next

Everything so far assumed a desk waiting for work. But some work is one errand a day тАФ renting a desk for that is silly. Lesson 19: Lambda, the helper who exists only while called.

тЖР PreviousrdsNext тЖТlambda

This page is the lesson's README from the lesson-18-cloudwatch branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.