ЁЯУЯ рдзрдбрд╛ 04 тАФ On-call: рдбреНрдпреБрдЯреАрдЪрд╛ рдлреЛрди, рдЖрдгрд┐ рддреЛ рдЯрд┐рдХрд╛рдК рдареЗрд╡рдгреЗ
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдорд╛рдЧреЗ: lesson-03-toil ┬╖ рдкреБрдвреЗ: lesson-05-canary-analysis
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 03, рдЕрдзрд┐рдХ рдбреНрдпреБрдЯреАрдЪрд╛ рдлреЛрди. Rotations, рдПрдХ shift рдХрд┐рддреА pages рд╕рд╣рди рдХрд░реВ рд╢рдХрддреЗ, рд░рд╛рддреНрд░реАрдЪреЗ
pages, follow-the-sun, рдЖрдгрд┐ on-call рдиреЗ рдЖрдард╡рдбрд╛ рдЦрд╛рдКрди рдЯрд╛рдХрдгреНрдпрд╛рдЖрдзреА rotation рдордзреНрдпреЗ рдХрд┐рддреА рд▓реЛрдХ рд╣рд╡реЗрдд.
Alert design (рдореБрд│рд╛рдд рдХрд╢рд╛рд╕рд╛рдареА page рдпрд╛рд╡рд╛) рд╣рд╛ Observability рдзрдбрд╛ 08 рдЪрд╛ рд╡рд┐рд╖рдп рдЖрд╣реЗ;
рд╣рд╛ рдзрдбрд╛ рдЙрддреНрддрд░ рджреЗрдгрд╛рд▒реНрдпрд╛ рд▓реЛрдХрд╛рдВрдмрджреНрджрд▓ рдЖрд╣реЗ. sre/crew.py рдордзреАрд▓ page_times, shift_load, night_pages
рдЖрдгрд┐ oncall_share, рдЖрдгрд┐ sre/demo.py рдордзреАрд▓ oncall().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдкрдердХрд╛рдХрдбреЗ рдПрдХ рдбреНрдпреБрдЯреАрдЪрд╛ рдлреЛрди рдЖрд╣реЗ. ЁЯУЯ рддреЛ рдЬреНрдпрд╛рдЪреНрдпрд╛рдХрдбреЗ рдЕрд╕реЗрд▓ рддрд┐рдиреЗ рдПрдЦрд╛рджреА рдЗрдорд╛рд░рдд рдмрд┐рдШрдбрд▓реА рдХреА рдЙрддреНрддрд░ рджреНрдпрд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗ тАФ рджрд┐рд╡рд╕рд╛ рдХрд┐рдВрд╡рд╛ рд░рд╛рддреНрд░реА.
рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдлрдХреНрдд рдХрддрд░рд┐рдирд╛, рджреАрдкрд┐рдХрд╛ рдЖрдгрд┐ рдРрд╢реНрд╡рд░реНрдпрд╛ рддреЛ рд╡рд╛рдЯреВрди рдШреЗрддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рдЬрдг рддреЛ рдПрдХ рдЖрдард╡рдбрд╛ рдареЗрд╡рддреЗ, рдордЧ рдкреБрдвреЗ рджреЗрддреЗ. рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХреАрдХрдбреЗ рддреЛ рддреАрди рдЖрдард╡рдбреНрдпрд╛рдВрддреВрди рдПрдХ рдЖрдард╡рдбрд╛ рдЕрд╕рддреЛ. рд╣реЗ рдЦреВрдк рдЖрд╣реЗ. рдлреЛрди рд╣рд╛рддрд╛рдд рдЕрд╕рддрд╛рдирд╛ рддреБрдореНрд╣реА рдореЛрдареЗ рдХрд╛рдо рд╕реБрд░реВ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдЖрдгрд┐ рдЭреЛрдкрд╣реА рдиреАрдЯ рд▓рд╛рдЧрдд рдирд╛рд╣реА.
рдЪрд╛рд░ рдЖрдард╡рдбреНрдпрд╛рдВрдд рдлреЛрди рд░рд╛рддреНрд░реА 17 рд╡реЗрд│рд╛ рд╡рд╛рдЬрд▓рд╛. рдердХрд▓реЗрд▓реА рдорд╛рдгрд╕реЗ рдЪреБрдХрд╛ рдХрд░рддрд╛рдд.
рдореНрд╣рдгреВрди рдкрдердХ рджреЛрди рдмрджрд▓ рдХрд░рддреЗ. рдкрд╣рд┐рд▓рд╛, rotation рдордзреНрдпреЗ рдЬрд╛рд╕реНрдд рд▓реЛрдХ рд╕рд╛рдореАрд▓ рд╣реЛрддрд╛рдд: рдЖрда рдЬрдг рдЕрд╕рд▓реЗ, рддрд░ рдкреНрд░рддреНрдпреЗрдХ рдЬрдг рдЖрда рдЖрдард╡рдбреНрдпрд╛рдВрддреВрди рдлрдХреНрдд рдПрдХ рдЖрдард╡рдбрд╛ рдлреЛрди рдареЗрд╡рддреЗ. рджреБрд╕рд░рд╛, рддреНрдпрд╛рдВрдирд╛ рдЬрдЧрд╛рдЪреНрдпрд╛ рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдЬреВрд▓рд╛ рдПрдХ sister crew рдорд┐рд│рддреЗ. рдкреБрдгреНрдпрд╛рдд рд░рд╛рддреНрд░ рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рддрд┐рдереЗ рджрд┐рд╡рд╕ рдЕрд╕рддреЛ. рдкреБрдгреЗ рдЖрдкрд▓реНрдпрд╛ рджрд┐рд╡рд╕рд╛ рдлреЛрди рдареЗрд╡рддреЗ, sister crew рдЖрдкрд▓реНрдпрд╛ рджрд┐рд╡рд╕рд╛. рдЖрддрд╛ рдХреЛрдгрд╛рдЪрд╛рд╣реА рдлреЛрди рд░рд╛рддреНрд░реА рд╡рд╛рдЬрдд рдирд╛рд╣реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
pages["ЁЯУЯ 55 pages in 4 weeks<br/>0.98 per 12-hour shift"] --> one["one Pune crew, 24 h<br/>17 night pages"]
pages --> fts["follow-the-sun<br/>Pune 07тАУ19 ┬╖ sister crew 19тАУ07<br/>0 night pages"]
pages --> busy["4 of 56 shifts<br/>had more than 2 pages"]
rot["rotation size"] --> r3["3 people: 33.3% of weeks тЬЧ"]
rot --> r8["8 people: 12.5% of weeks тЬУ"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/sre/lesson-diagrams.html#l04
тЭУ рдХрд╛рдп
- On-call тАФ рдирд╛рд╡ рдард░рд▓реЗрд▓реА рд╡реНрдпрдХреНрддреА рдЬрд┐рдиреЗ рдард░рд▓реЗрд▓реНрдпрд╛ рд╡реЗрд│реЗрдд pages рдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреНрдпрд╛рдпрд▓рд╛рдЪ рд╣рд╡рд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рд░реНрд╡рд╛рдд рддрд╛рддрдбреАрдЪреНрдпрд╛ page рдЪреА 5 рдорд┐рдирд┐рдЯрд╛рдВрдд рдкреЛрдЪрдкрд╛рд╡рддреА). рд╕рд╣рд╕рд╛ рдПрдХ primary рдЖрдгрд┐ рдПрдХ secondary (primary рдиреЗ рдЙрддреНрддрд░ рджрд┐рд▓реЗ рдирд╛рд╣реА рддрд░ backup).
- Page тАФ рдЖрддреНрддрд╛ рдПрдЦрд╛рджреНрдпрд╛ рд╡реНрдпрдХреНрддреАрд▓рд╛ рдЕрдбрд╡рдгрд╛рд░рд╛ alert. рдкреНрд░рддреНрдпреЗрдХ page рд▓рд╛ рдорд╛рдгрд╕рд╛рдЪреА рдХреГрддреА рд▓рд╛рдЧрд╛рдпрд▓рд╛ рд╣рд╡реА; рдмрд╛рдХреАрдЪреЗ ticket рдЕрд╕реВ рд╢рдХрддреЗ.
- Shift тАФ on-call рд╡реЗрд│реЗрдЪрд╛ рдПрдХ рддреБрдХрдбрд╛ (рдПрдХ рдЖрдард╡рдбрд╛, рдХрд┐рдВрд╡рд╛ 12 рддрд╛рд╕рд╛рдВрдЪреНрдпрд╛ shifts).
- рдкреНрд░рддреНрдпреЗрдХ shift рдордзреАрд▓ pages тАФ Google SRE рдкреБрд╕реНрддрдХрд╛рдЪрд╛ рдвреЛрдмрд│ рдирд┐рдпрдо: рдиреАрдЯ рд╣рд╛рддрд╛рд│рд▓реЗрд▓реНрдпрд╛ incident рд▓рд╛ follow-up рд╕рдХрдЯ рд╕реБрдорд╛рд░реЗ 6 рддрд╛рд╕ рд▓рд╛рдЧрддрд╛рдд, рдореНрд╣рдгреВрди 12 рддрд╛рд╕рд╛рдВрдЪреНрдпрд╛ shift рдордзреНрдпреЗ рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд 2 incidents рд╣реЗ рд▓рдХреНрд╖реНрдп рдареЗрд╡рд╛. рддреНрдпрд╛рд╣реВрди рдЬрд╛рд╕реНрдд рдЭрд╛рд▓реЗ рдХреА рд▓реЛрдХ рдШрд╛рдИ рдХрд░рддрд╛рдд рдЖрдгрд┐ рдХрд╛рдорд╛рдд рдХреЛрдкрд░реЗ рдХрд╛рдкрддрд╛рдд.
- 25% рдирд┐рдпрдо тАФ рддреНрдпрд╛рдЪ рдкреБрд╕реНрддрдХрд╛рддреВрди: SRE рдЪреНрдпрд╛ рд╡реЗрд│реЗрдкреИрдХреА рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд 25% on call (рдзрдбрд╛ 01 рдордзреАрд▓ 50% ops cap рдЪреНрдпрд╛ рдЖрдд). рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛ primary rotation рд╕рд╛рдареА рдпрд╛рд▓рд╛ рдХрд┐рдорд╛рди 4 рд▓реЛрдХ рд▓рд╛рдЧрддрд╛рдд тАФ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрдард╡рдбреНрдпрд╛рд▓рд╛ primary рдЖрдгрд┐ secondary рджреЛрдиреНрд╣реА рдЕрд╕рддреАрд▓, рддрд░ рдПрдХрд╛ site рд╕рд╛рдареА рд╕реБрдорд╛рд░реЗ 8 (рдХрд┐рдВрд╡рд╛ рджреЛрди sites рдЕрд╕рддреАрд▓ рддрд░ рдкреНрд░рддреНрдпреЗрдХ site рд▓рд╛ 6), рд╣рд╛рдЪ рдкреБрд╕реНрддрдХрд╛рддрд▓рд╛ рдЖрдХрдбрд╛ рдЖрд╣реЗ.
- Follow-the-sun тАФ time zones рдордзреНрдпреЗ рдПрдХрдореЗрдХрд╛рдВрдкрд╛рд╕реВрди рджреВрд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЬрд╛рд╕реНрдд sites рдкреНрд░рддреНрдпреЗрдХ site рдЪрд╛ рджрд┐рд╡рд╕ рд╕рдВрдкрд▓реНрдпрд╛рд╡рд░ pager рдкреБрдвреЗ рд╕реЛрдкрд╡рддрд╛рдд, рдореНрд╣рдгрдЬреЗ рдкреНрд░рддреНрдпреЗрдХ site рдлрдХреНрдд рдЖрдкрд▓реНрдпрд╛ рджрд┐рд╡рд╕рд╛ рдЙрддреНрддрд░ рджреЗрддреЗ. рдпрд╛рд╕рд╛рдареА рд╕реНрд╡рдЪреНрдЫ handoff (рдзрдбрд╛ 08) рдЖрдгрд┐ рджреЛрдиреНрд╣реА sites рд╡рд╛рдкрд░реВ рд╢рдХрддреАрд▓ рдЕрд╕реЗ runbook рд▓рд╛рдЧрддреЗ.
- Runbook (playbook) тАФ рдкреНрд░рддреНрдпреЗрдХ page рд╕рд╛рдареА: рддреНрдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп, рдХрд╕реЗ рддрдкрд╛рд╕рд╛рдпрдЪреЗ, рдЖрдзреА рдХрд╛рдп рдХрд░рд╛рдпрдЪреЗ. рддреЗ рдкрд╣рд╛рдЯреЗ 3 рд╡рд╛рдЬрддрд╛рдЪреНрдпрд╛ рдХреЛрдбреНрдпрд╛рд▓рд╛ checklist рдордзреНрдпреЗ рдмрджрд▓рддреЗ.
- рдореЛрдмрджрд▓рд╛ рдЖрдгрд┐ рд╕реБрдЯреНрдЯреА тАФ рдкреБрд╕реНрддрдХ on-call рд╕рд╛рдареА рдореЛрдмрджрд▓рд╛ рджреЗрдгреНрдпрд╛рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЗ (рд╕реБрдЯреНрдЯреА рдХрд┐рдВрд╡рд╛ рдкреИрд╕реЗ). рдердХрд▓реЗрд▓реЗ рдЖрдгрд┐ рдореЛрдмрджрд▓рд╛ рди рдорд┐рд│рд╛рд▓реЗрд▓реЗ on-call рд▓реЛрдХ рд╕реЛрдбреВрди рдЬрд╛рддрд╛рдд.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг on-call рдореНрд╣рдгрдЬреЗ рдЬрд┐рдереЗ reliability рдЖрдгрд┐ рдорд╛рдгрд╕реЗ рднреЗрдЯрддрд╛рдд. рдЦреВрдк рд▓рд╣рд╛рди rotation рд▓реЛрдХрд╛рдВрдирд╛ рдердХрд╡реВрди рдЯрд╛рдХрддреЗ, рдЖрдгрд┐ рдердХрд▓реЗрд▓реЗ рд▓реЛрдХ рдкреБрдврдЪреЗ outage рдЕрдзрд┐рдХ рд╡рд╛рдИрдЯ рдХрд░рддрд╛рдд. рд░рд╛рддреНрд░реАрдЪреЗ pages рдХрд┐рддреНрдпреЗрдХ рджрд┐рд╡рд╕ рдЭреЛрдк рдмрд┐рдШрдбрд╡рддрд╛рдд. рдПрдХрд╛ shift рдордзреНрдпреЗ рдЦреВрдк pages рдореНрд╣рдгрдЬреЗ рдХреЛрдгрддреНрдпрд╛рдЪ page рдХрдбреЗ рдЦрд░реЗ рд▓рдХреНрд╖ рдЬрд╛рдд рдирд╛рд╣реА, рдлрдХреНрдд рдПрдХ рдЭрдЯрдкрдЯ restart тАФ рдЖрдгрд┐ рдХрд╛рд░рдг рддрд╕реЗрдЪ рд░рд╛рд╣рддреЗ. рдЗрдерд▓реЗ рдЖрдХрдбреЗрдЪ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреБрд░рд╛рд╡реНрдпрд╛рд╕рд╣ "рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдгрдЦреА рдЪрд╛рд░ рд▓реЛрдХ рд╣рд╡реЗрдд" рдХрд┐рдВрд╡рд╛ "рд╣реЗ alerts рджреБрд░реБрд╕реНрдд рд╡реНрд╣рд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗрдд" рдЕрд╕реЗ рдореНрд╣рдгреВ рджреЗрддрд╛рдд.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
sre/crew.py рдордзреАрд▓ page_times(weeks=4, rate=0.07, seed=11) page рдЪреНрдпрд╛ рддрд╛рд╕рд╛рдВрдЪреА
seed рджрд┐рд▓реЗрд▓реА рдпрд╛рджреА рдмрдирд╡рддреЗ (hour 0 = рдкреБрдгреНрдпрд╛рдд рд╕реЛрдорд╡рд╛рд░ 00:00; рдПрдХрд╛ рддрд╛рд╕рд╛рдд рдЬрд╛рд╕реНрддреАрдд рдЬрд╛рд╕реНрдд рдПрдХ page).
shift_load(pages) рдкреНрд░рддреНрдпреЗрдХ 12 рддрд╛рд╕рд╛рдВрдЪреНрдпрд╛ shift рдордзреАрд▓ pages рдореЛрдЬрддреЗ (07:00тАУ19:00 рдЖрдгрд┐ 19:00тАУ07:00);
night_pages(pages, offset_h) offset_h рддрд╛рд╕ рджреВрд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ crew рд╕рд╛рдареА 22:00 рддреЗ 07:00 рдордзреАрд▓ pages
рдореЛрдЬрддреЗ; oncall_share(people) рдореНрд╣рдгрдЬреЗ рдЖрдард╡рдбреНрдпрд╛рдЪреНрдпрд╛ rotation рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддреА рдХрд┐рддреА рдЯрдХреНрдХреЗ рдЖрдард╡рдбреЗ on call рдЕрд╕рддреЗ.
oncall() рдордзреАрд▓ follow-the-sun рдЪреА рдУрд│ рдкреБрдгреНрдпрд╛рд▓рд╛ 07тАУ19 рдЪреЗ pages рджреЗрддреЗ рдЖрдгрд┐ sister
crew рд▓рд╛ (12 рддрд╛рд╕ рджреВрд░) рдЙрд░рд▓реЗрд▓реЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 sre/demo.py oncall
python3 - <<'EOF'
import sys; sys.path.insert(0, "sre"); from crew import page_times, shift_load, night_pages
for rate in (0.03, 0.07, 0.15):
pages = page_times(weeks=4, rate=rate)
load = shift_load(pages)
over = sum(1 for n in load.values() if n > 2)
print(f"rate {rate:.2f}/h тЖТ {len(pages):>3} pages ┬╖ busiest shift {max(load.values())} ┬╖ shifts over 2: {over:>2} ┬╖ night pages (one site): {night_pages(pages):>2}")
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
oncall рд╣реЗ print рдХрд░рддреЗ:
тФАтФА 4 weeks of pages for the timetable service: 55 pages ┬╖ 0.98 per 12-hour shift on average
busiest shift 3 pages ┬╖ shifts with more than 2 pages: 4 of 56
one Pune crew, 24 h on call: 17 pages between 22:00 and 07:00
follow-the-sun: Pune takes 07:00тАУ19:00, a sister crew 12 h away takes the rest in its own daytime тЖТ night pages 0 + 0
weekly rotation of 3: each person is on call 33.3% of weeks тЖР over 25%: no time left for engineering
weekly rotation of 5: each person is on call 20.0% of weeks
weekly rotation of 8: each person is on call 12.5% of weeks
рддреБрдордЪрд╛ snippet рд╣реЗ print рдХрд░рддреЛ:
rate 0.03/h тЖТ 20 pages ┬╖ busiest shift 2 ┬╖ shifts over 2: 0 ┬╖ night pages (one site): 5
rate 0.07/h тЖТ 55 pages ┬╖ busiest shift 3 ┬╖ shifts over 2: 4 ┬╖ night pages (one site): 17
rate 0.15/h тЖТ 114 pages ┬╖ busiest shift 5 ┬╖ shifts over 2: 21 ┬╖ night pages (one site): 48
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
Shift рдорд╛рдЧреЗ 0.98 pages рдЪреА рд╕рд░рд╛рд╕рд░реА рдареАрдХ рджрд┐рд╕рддреЗ, рдкрдг рддрд░реАрд╣реА 4 shifts 2 рдЪреНрдпрд╛ рд╡рд░ рдЧреЗрд▓реНрдпрд╛ тАФ pages рдШреЛрд│рдХреНрдпрд╛рдиреЗ рдпреЗрддрд╛рдд, рдореНрд╣рдгреВрди рд╕рд░рд╛рд╕рд░реА рдирд╡реНрд╣реЗ рддрд░ рд╕рд░реНрд╡рд╛рдд рд╡реНрдпрд╕реНрдд shifts рдмрдШрд╛. рддрд╛рд╕рд╛рд▓рд╛ 0.15 pages рд╡рд░ 56 рдкреИрдХреА 21 shifts рд╡рд░ рдЬрд╛рд╕реНрдд рднрд╛рд░ рдЕрд╕рддреЛ: рд╣рд╛ alert рдЪрд╛ рдкреНрд░рд╢реНрди рдЖрд╣реЗ (alerts рдЖрдгрд┐ рдХрд╛рд░рдгреЗ рджреБрд░реБрд╕реНрдд рдХрд░рд╛), рдорд╛рдгрд╕рд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдЪрд╛ рдирд╛рд╣реА. Follow-the-sun рдиреЗ рд░рд╛рддреНрд░реАрдЪреЗ 17 pages рд╢реВрдиреНрдпрд╛рд╡рд░ рдЖрдгрд▓реЗ, рдЖрдгрд┐ 8 рдЬрдгрд╛рдВрдЪреНрдпрд╛ rotation рдиреЗ рддреАрдирдкреИрдХреА-рдПрдХ-рдЖрдард╡рдбрд╛ рдпрд╛рд▓рд╛ рдЖрдардкреИрдХреА-рдПрдХ рдХреЗрд▓реЗ. рджреЛрдиреНрд╣реАрдВрдЪрд╛ рдЦрд░рд╛ рдЦрд░реНрдЪ рдЖрд╣реЗ тАФ рджреБрд╕рд░реА site, рдЬрд╛рд╕реНрдд рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдХ тАФ рдЖрдгрд┐ рджреЛрдиреНрд╣реА рдкрдердХ рдЧрдорд╛рд╡рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рд╕реНрд╡рд╕реНрдд рдЖрд╣реЗрдд.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- "рд╕рдзреНрдпрд╛рдкреБрд░рддреЗ" 2 рдХрд┐рдВрд╡рд╛ 3 рдЬрдгрд╛рдВрдЪреЗ rotation, рд╡рд░реНрд╖рд╛рдиреБрд╡рд░реНрд╖реЗ
- shift рдорд╛рдЧрдЪреНрдпрд╛ pages рдЪреА рд╕рд░рд╛рд╕рд░реА рдореЛрдЬрдгреЗ рдЖрдгрд┐ рд╡рд╛рдИрдЯ shifts рдЪреБрдХрд╡рдгреЗ
- runbook рдирд╕рд▓реЗрд▓реЗ pages, рдХрд┐рдВрд╡рд╛ рдХреЛрдгреАрдЪ рд╡рд╛рдкрд░реВрди рди рдкрд╛рд╣рд┐рд▓реЗрд▓реЗ runbooks
- "рддреВ on call рдЖрд╣реЗрд╕, рддрд░ рддреБрдЭреЗ рдиреЗрд╣рдореАрдЪреЗ рдХрд╛рдорд╣реА рдХрд░" тАФ рдордЧ рджреЛрдиреНрд╣реАрдкреИрдХреА рдХрд╛рд╣реАрдЪ рд╣реЛрдд рдирд╛рд╣реА
- handoff рдирд╕рд▓реЗрд▓реЗ follow-the-sun, рдореНрд╣рдгрдЬреЗ рдирд╡реА site рдкреНрд░рддреНрдпреЗрдХ incident рд╢реВрдиреНрдпрд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рдХрд░рддреЗ
- on-call рд╕рд╛рдареА рдореЛрдмрджрд▓рд╛ рди рджреЗрдгреЗ, рдХрд┐рдВрд╡рд╛ рд╕реБрдЯреНрдЯреАрд╡рд░ рдЕрд╕рддрд╛рдирд╛ рд▓реЛрдХрд╛рдВрдиреА on call рд░рд╛рд╣рд╛рд╡реЗ рдЕрд╢реА рдЕрдкреЗрдХреНрд╖рд╛
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдмрд╣реБрддреЗрдХ teams PagerDuty, Opsgenie, Grafana OnCall рдХрд┐рдВрд╡рд╛ incident.io рд╡рд╛рдкрд░реВрди pages рдЪреЗ рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдЖрдгрд┐ routing рдХрд░рддрд╛рдд. рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдореНрд╣рдгрдЬреЗ data: рдПрдХ rotation, handoff рдЪреА рд╡реЗрд│, рдПрдХ primary рдЖрдгрд┐ рдПрдХ secondary. рдЦрд▒реНрдпрд╛ account рд╡рд░ тАФ PagerDuty рдЪрд╛ REST API рдЖрддреНрддрд╛ рдХреЛрдг on call рдЖрд╣реЗ рддреЗ рджрд╛рдЦрд╡рддреЛ:
curl -s -H "Authorization: Token token=$PD_TOKEN" -H "Accept: application/vnd.pagerduty+json;version=2" \
"https://api.pagerduty.com/oncalls?schedule_ids[]=$SCHEDULE_ID" | jq -r '.oncalls[].user.summary'
Prometheus Alertmanager рдЪрд╛ route рдлрдХреНрдд рддрд╛рддрдбреАрдЪреЗ alerts pager рд▓рд╛ рдЖрдгрд┐ рдмрд╛рдХреАрдЪреЗ ticket рд░рд╛рдВрдЧреЗрдХрдбреЗ рдкрд╛рдард╡реВ рд╢рдХрддреЛ, рдЖрдгрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд░реЛрдЦреВ рд╢рдХрддреЛ:
route:
receiver: tickets
group_by: [alertname, service]
repeat_interval: 4h
routes:
- matchers: [severity="page"]
receiver: pagerduty-timetable
receivers:
- name: pagerduty-timetable
pagerduty_configs: [{routing_key: "<secret>"}]
- name: tickets
webhook_configs: [{url: "https://tickets.school.example/hook"}]
рдЖрдард╡рдбреНрдпрд╛рдЪрд╛ on-call review (15 рдорд┐рдирд┐рдЯреЗ) рдкреНрд░рддреНрдпреЗрдХ page рдкрд╛рд╣рддреЛ: рддреНрдпрд╛рд╡рд░ рдХреГрддреА рдХрд░рддрд╛ рдпреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреА рд╣реЛрддреА рдХрд╛, runbook рдмрд░реЛрдмрд░ рд╣реЛрддреЗ рдХрд╛, рддреНрдпрд╛рдРрд╡рдЬреА рддреЗ ticket рдЕрд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ рд╣реЛрддреЗ рдХрд╛?
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рдЧреЗрд▓реНрдпрд╛ рдорд╣рд┐рдиреНрдпрд╛рддрд▓реЗ shift рдорд╛рдЧрдЪреЗ pages, рдЖрдгрд┐ рд╡реНрдпрдХреНрддреАрдорд╛рдЧрдЪреЗ рд░рд╛рддреНрд░реАрдЪреЗ pages рдореЛрдЬрд╛. Team рд╕рдореЛрд░ рд╕рд░рд╛рд╕рд░реА рдирд╡реНрд╣реЗ, рддрд░ рд╕рд░реНрд╡рд╛рдд рд╡реНрдпрд╕реНрдд shifts рдареЗрд╡рд╛. рдордЧ рднрд░рддреА рдХрд░рдгреНрдпрд╛рдЖрдзреА рд╕рд░реНрд╡рд╛рдд рдЧреЛрдВрдЧрд╛рдЯ рдХрд░рдгрд╛рд░рд╛ alert рджреБрд░реБрд╕реНрдд рдХрд░рд╛.
тПня╕П рдкреБрдвреЗ
рдмрд░реЗрдЪ pages рдПрдЦрд╛рджреНрдпрд╛ рдмрджрд▓рд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрддрд╛рдд. рдкреБрдврдЪрд╛ рдзрдбрд╛ рдПрдЦрд╛рджрд╛ рдмрджрд▓ рдЖрдзреА рд╢рд╛рд│реЗрдЪреНрдпрд╛ рдЫреЛрдЯреНрдпрд╛ рднрд╛рдЧрд╛рд╡рд░ рдХрд░реВрди рдкрд╛рд╣рддреЛ, рдЖрдгрд┐ рдЖрдХрдбреНрдпрд╛рдВрд╡рд░реВрди рддреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддреЛ.
git checkout lesson-05-canary-analysis