ЁЯж║ рдзрдбрд╛ 08 тАФ Incident command: рднреВрдорд┐рдХрд╛, рд▓рдп рдЖрдгрд┐ handoff
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 08 ┬╖ рдорд╛рдЧреЗ: lesson-07-capacity-planning ┬╖ рдкреБрдвреЗ: lesson-09-reliability-math
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбрд╛ 07, рдЕрдзрд┐рдХ incident рджрд░рдореНрдпрд╛рди рдкрдердХ рд╕реНрд╡рддрдГрд▓рд╛ рдХрд╕реЗ рд╕рдВрдШрдЯрд┐рдд рдХрд░рддреЗ.
Observability school рдЪрд╛ рдзрдбрд╛ 10 severity,
incident рдЪреА рдШрдбреНрдпрд╛рд│реЗ (detect, acknowledge, mitigate, resolve) рд╢рд┐рдХрд╡рддреЛ, рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдзрдбреЗ 11тАУ12 root
cause рдЖрдгрд┐ postmortem. рд╣рд╛ рдзрдбрд╛ рдореНрд╣рдгрдЬреЗ command рдЪреА рд░рдЪрдирд╛: рдЪрд╛рд░ рднреВрдорд┐рдХрд╛,
status-update рдЪреА рд▓рдп, рдЖрдгрд┐ shift рд╕рдВрдкрд▓реНрдпрд╛рд╡рд░рдЪреЗ handoff. sre/crew.py рдордзреАрд▓ IncidentLog
рдЖрдгрд┐ sre/demo.py рдордзреАрд▓ command().
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рд░рд╛рддреНрд░реА 23:00 рд▓рд╛ рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рдЪреА рдЗрдорд╛рд░рдд рдЕрдВрдзрд╛рд░рд╛рдд рдЬрд╛рддреЗ. ЁЯМС
рдкрд╣рд┐рд▓реА рд░рд╛рддреНрд░ тАФ рдХреЛрдгрддрд╛рд╣реА plan рдирд╛рд╣реА. рдХрддрд░рд┐рдирд╛ рдЖрдгрд┐ рджреАрдкрд┐рдХрд╛ рджреЛрдШреАрд╣реА рджреБрд░реБрд╕реНрддреА рд╕реБрд░реВ рдХрд░рддрд╛рдд. рддреНрдпрд╛ рдПрдХрдореЗрдХреАрдВрдЪреЗ рдХрд╛рдо рдЙрд▓рдЯрд╡рддрд╛рдд. рдЬрд╡рд│рдЬрд╡рд│ рджреЛрди рддрд╛рд╕ рдХреЛрдгреАрдЪ рдореБрдЦреНрдпрд╛рдзреНрдпрд╛рдкрдХрд╛рдВрдирд╛ рдХрд╛рд╣реАрд╣реА рд╕рд╛рдВрдЧрдд рдирд╛рд╣реА. рдордзреНрдпрд░рд╛рддреНрд░реА рдХрддрд░рд┐рдирд╛ рдШрд░реА рдЬрд╛рддреЗ тАФ рдЖрдгрд┐ рддреА рдиреЗрдордХреЗ рдХрд╛рдп рдХрд░рдд рд╣реЛрддреА рддреЗ рдХреЛрдгрд╛рд▓рд╛рдЪ рдорд╛рд╣реАрдд рдирд╕рддреЗ.
рджреБрд╕рд░реА рд░рд╛рддреНрд░ тАФ рдПрдХ plan. рджреАрдкрд┐рдХрд╛ рдореНрд╣рдгрддреЗ: "рдореА incident commander рдЖрд╣реЗ. рдореА рджреБрд░реБрд╕реНрддреА рдХрд░рдд рдирд╛рд╣реА тАФ рдореА рдиреЗрддреГрддреНрд╡ рдХрд░рддреЗ." рддреА рдмреЛрдЯ рджрд╛рдЦрд╡рддреЗ: "рдХрддрд░рд┐рдирд╛, рддреВ рджреБрд░реБрд╕реНрддреА рдХрд░. рдРрд╢реНрд╡рд░реНрдпрд╛, рддреВ рджрд░ рдЕрд░реНрдзреНрдпрд╛ рддрд╛рд╕рд╛рдиреЗ рд▓реЛрдХрд╛рдВрдирд╛ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рддреЗ рд╕рд╛рдВрдЧрдд рд░рд╛рд╣рд╛. рдЖрдгрд┐ рд▓рд╣рд╛рди рдЖрд╣реЗ рддреЛрдкрд░реНрдпрдВрдд рдХрд╛рдп рдШрдбрддреЗ рддреЗ рдореАрдЪ рд▓рд┐рд╣реВрди рдареЗрд╡рддреЗ." рдордзреНрдпрд░рд╛рддреНрд░реА рджреАрдкрд┐рдХрд╛рдЪреА shift рд╕рдВрдкрддреЗ. рддреА рдЕрд╢реАрдЪ рдирд┐рдШреВрди рдЬрд╛рдд рдирд╛рд╣реА. рддреА crew-5 рд▓рд╛ рд╕рдЧрд│реЗ рд╕рд╛рдВрдЧрддреЗ тАФ рдХрд╛рдп рдмрд┐рдШрдбрд▓реЗ рдЖрд╣реЗ, рдХрд╛рдп рдХрд░реВрди рдкрд╛рд╣рд┐рд▓реЗ, рдХреЛрдг рдХрд╛рдп рдХрд░рдд рдЖрд╣реЗ тАФ рдЖрдгрд┐ crew-5 рдореНрд╣рдгрддреЗ: "I have command." рддреНрдпрд╛рдирдВрддрд░рдЪ рджреАрдкрд┐рдХрд╛ рдЬрд╛рддреЗ.
рдмрд┐рдШрд╛рдб рддреЛрдЪ. рджреБрд╕рд░реА рд░рд╛рддреНрд░ рд╢рд╛рдВрдд рдЕрд╕рддреЗ, рдЖрдгрд┐ рд▓рд╡рдХрд░ рд╕рдВрдкрддреЗ.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
ic["ЁЯж║ IC тАФ Dipika<br/>leads, decides, does NOT fix"] --> ops["ЁЯФз ops тАФ Katrina<br/>hands on the system"]
ic --> comms["ЁЯУг comms тАФ Aishwarya<br/>update every 30 min"]
ic --> scribe["ЁЯУЭ scribe<br/>the timeline"]
ic -->|"00:00 handoff:<br/>state, actions, roles"| ic2["ЁЯж║ IC тАФ crew-5<br/>'I have command' тЬУ"]
bad["without roles: 5 problems<br/>no IC ┬╖ 110 min with no update<br/>Katrina left holding ops"]
ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/sre/lesson-diagrams.html#l08
тЭУ рдХрд╛рдп
- Incident Command System (ICS) тАФ 1970 рдЪреНрдпрд╛ рджрд╢рдХрд╛рдд California рдордзреАрд▓ рдЬрдВрдЧрд▓рд╛рддреАрд▓ рдЖрдЧреА рд╡рд┐рдЭрд╡рдгреНрдпрд╛рд╕рд╛рдареА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рд░рдЪрдирд╛, рдЖрддрд╛ рдЖрдкрддреНрдХрд╛рд▓реАрди рд╕реЗрд╡рд╛ рддреА рд╡рд╛рдкрд░рддрд╛рдд. Google рдЪреА incident рдкреНрд░рдХреНрд░рд┐рдпрд╛ (IMAG), PagerDuty рдЪреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдгрд┐ рдЗрддрд░ рдЕрдиреЗрдХ рддрд┐рдЪреНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗрдд.
- Incident commander (IC) тАФ incident рдЪреА рдорд╛рд▓рдХреА рдШреЗрддреЗ: рдкреНрд░рд╛рдзрд╛рдиреНрдпреЗ рдард░рд╡рддреЗ, рднреВрдорд┐рдХрд╛ рд╡рд╛рдЯрддреЗ, рдирд┐рд░реНрдгрдп рдШреЗрддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде "рдЖрддреНрддрд╛рдЪ roll back рдХрд░рд╛"), рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рддреНрд░ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЗ. IC рдиреЗ рд╕реНрд╡рддрдГ commands рдЯрд╛рдЗрдк рдХрд░реВ рдирдпреЗрдд тАФ рдирд╛рд╣реАрддрд░ рд╕рдВрдкреВрд░реНрдг incident рд╡рд░ рдХреЛрдгрд╛рдЪреЗрдЪ рд▓рдХреНрд╖ рд░рд╛рд╣рдд рдирд╛рд╣реА. рдЕрдЧрджреА рдЫреЛрдЯреНрдпрд╛ incident рдордзреНрдпреЗ рдПрдХ рд╡реНрдпрдХреНрддреА рдЕрдиреЗрдХ рднреВрдорд┐рдХрд╛ рд╕рд╛рдВрднрд╛рд│реВ рд╢рдХрддреЗ, рдкрдг рддреЗ рдореЛрдареНрдпрд╛рдиреЗ рд╕рд╛рдВрдЧрд╛.
- Operations lead (ops) тАФ system рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгрд╛рд░реЗ рд▓реЛрдХ: рд╢реЛрдз рдШреЗрдгреЗ, mitigate рдХрд░рдгреЗ. Incident рджрд░рдореНрдпрд╛рди рдлрдХреНрдд ops рдЪ production рдмрджрд▓рддреЗ.
- Communications lead (comms) тАФ users, support рдЖрдгрд┐ рдиреЗрддреГрддреНрд╡рд╛рд▓рд╛ рдирд┐рдпрдорд┐рдд status updates рдкрд╛рдард╡рддреЗ, рдореНрд╣рдгрдЬреЗ рддреЗ рджреБрд░реБрд╕реНрддреА рдХрд░рдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рдордзреНрдпреЗ рдордзреНрдпреЗ рддреНрд░рд╛рд╕ рджреЗрдгреЗ рдерд╛рдВрдмрд╡рддрд╛рдд. рдмрд╛рддрдореА рдирд╕рддрд╛рдирд╛рд╣реА рдПрдХ рдард░рд▓реЗрд▓реА рд▓рдп (рдЗрдереЗ рджрд░ 30 рдорд┐рдирд┐рдЯрд╛рдВрдиреА): "рдЕрдЬреВрди рд╢реЛрдз рд╕реБрд░реВ рдЖрд╣реЗ, рдкреБрдврдЪрд╛ update 00:30 рд▓рд╛".
- Scribe (planning) тАФ timeline рдареЗрд╡рддреЗ: рдХрд╛рдп рджрд┐рд╕рд▓реЗ, рдХрд╛рдп рдард░рд▓реЗ рдЖрдгрд┐ рдХрд╛рдп рдХреЗрд▓реЗ, рдХреЗрд╡реНрд╣рд╛. рддреНрдпрд╛рд╡рд░реВрдирдЪ postmortem рдмрдирддреЛ.
- Incident рдШреЛрд╖рд┐рдд рдХрд░рдгреЗ тАФ "рд╣реЗ incident рдЖрд╣реЗ, рдореА IC рдЖрд╣реЗ" рдЕрд╕реЗ рд▓рд╡рдХрд░ рдореНрд╣рдгрдгреЗ. рдЫреЛрдЯреЗ incident рдШреЛрд╖рд┐рдд рдХрд░реВрди рдордЧ рдмрдВрдж рдХрд░рдгреЗ рд╕реНрд╡рд╕реНрдд рдЖрд╣реЗ; рдЙрд╢рд┐рд░рд╛ рдХреЗрд▓реЗрд▓реА рдШреЛрд╖рдгрд╛ рдорд╣рд╛рдЧ рдкрдбрддреЗ.
- Handoff тАФ рдЬреЗрд╡реНрд╣рд╛ рдПрдЦрд╛рджреА рднреВрдорд┐рдХрд╛ рджреБрд╕рд▒реНрдпрд╛рдХрдбреЗ рдЬрд╛рддреЗ (shift рд╕рдВрдкрддреЗ, IC рдердХрд▓реА рдЖрд╣реЗ), рддреЗрд╡реНрд╣рд╛ рдЬрд╛рдгрд╛рд░реА рд╡реНрдпрдХреНрддреА рд╕рд╛рд░рд╛рдВрд╢ рджреЗрддреЗ тАФ рд╕рдзреНрдпрд╛рдЪреА рд╕реНрдерд┐рддреА, рдХрд╛рдп рдХрд░реВрди рдкрд╛рд╣рд┐рд▓реЗ, рдмрд╛рдХреА рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреГрддреА, рдХреЛрдгрд╛рдХрдбреЗ рдХреЛрдгрддреА рднреВрдорд┐рдХрд╛ тАФ рдЖрдгрд┐ рдпреЗрдгрд╛рд░реА рд╡реНрдпрдХреНрддреА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ "I have command" рдореНрд╣рдгрддреЗ. Acknowledge рди рдХреЗрд▓реЗрд▓реЗ handoff рдореНрд╣рдгрдЬреЗ рджреЛрдШреАрдВрдирд╛ рд╡рд╛рдЯрддреЗ рдХреА рдЖрдкрдг рдиреЗрддреГрддреНрд╡ рдХрд░рддреЛ, рдХрд┐рдВрд╡рд╛ рдХреЛрдгреАрдЪ рдХрд░рдд рдирд╛рд╣реА.
- рдЖрдзреА mitigate тАФ root cause рд╢реЛрдзрдгреНрдпрд╛рдЖрдзреА рдиреБрдХрд╕рд╛рди рдерд╛рдВрдмрд╡рд╛ (roll back, fail over, load shed рдХрд░рд╛). рдХрд╛рд░рдг рд╢реЛрдзрдгреЗ postmortem рдЪреЗ рдХрд╛рдо рдЖрд╣реЗ (Observability рдзрдбрд╛ 11).
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг incident рдордзреНрдпреЗ рдЕрдбрдЪрдг рдмрд╣реБрддреЗрдХ рд╡реЗрд│рд╛ рдмрд┐рдШрд╛рдб рдирд╕рддреЗ тАФ рддреА рддреНрдпрд╛рдЪреНрдпрд╛ рднреЛрд╡рддреАрдЪреЗ рд▓реЛрдХ рдЕрд╕рддрд╛рдд: рджреБрд╣реЗрд░реА рдХрд╛рдо, рдкрд░рд╕реНрдкрд░рд╡рд┐рд░реЛрдзреА рдмрджрд▓, рджрд░ рдкрд╛рдЪ рдорд┐рдирд┐рдЯрд╛рдВрдиреА "рдХрд╛рд╣реА рдмрд╛рддрдореА?" рд╡рд┐рдЪрд╛рд░рдгрд╛рд░реЗ рдиреЗрддреЗ, рдЖрдгрд┐ рдХреЛрдгреА рдШрд░реА рдЧреЗрд▓реНрдпрд╛рд╡рд░ рд╣рд░рд╡рд▓реЗрд▓реА рдорд╛рд╣рд┐рддреА. рднреВрдорд┐рдХрд╛ рдЖрдгрд┐ рд▓рдп рд╕реНрд╡рд╕реНрдд рдЖрд╣реЗрдд, рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдореБрд│реЗ рддреЗрдЪ рд▓реЛрдХ рддрд╛рдгрд╛рдЦрд╛рд▓реА рдЦреВрдк рдЪрд╛рдВрдЧрд▓реЗ рдХрд╛рдо рдХрд░рддрд╛рдд.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
sre/crew.py рдордзреАрд▓ IncidentLog(events, update_every=30) events рдШреЗрддреЗ
(minute, kind, тАж) тАФ role, update, handoff (role, from, to, acknowledged), leave,
resolve тАФ рдорд┐рдирд┐рдЯреЗ 23:00 рдкрд╛рд╕реВрди рдореЛрдЬрд▓реЗрд▓реА. check() рддреНрдпрд╛рд▓рд╛ рд╕рд╛рдкрдбрд▓реЗрд▓реНрдпрд╛ рдЕрдбрдЪрдгреА рдкрд░рдд рджреЗрддреЗ: рдХрдзреАрдЪ рдиреЗрдорд▓реЗрд▓реА рдирд╕рд▓реЗрд▓реА
рднреВрдорд┐рдХрд╛, рд▓рдпреАрдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рджреЛрди updates рдордзреАрд▓ рдЕрдВрддрд░, рднреВрдорд┐рдХрд╛ рд╣рд╛рддрд╛рдд рдЕрд╕рддрд╛рдирд╛рдЪ рдирд┐рдШреВрди рдЧреЗрд▓реЗрд▓реА
рд╡реНрдпрдХреНрддреА, acknowledge рди рдХреЗрд▓реЗрд▓реЗ handoff, ops рд╕реБрджреНрдзрд╛ рдХрд░рдгрд╛рд░реА IC. command() рджреЛрдиреНрд╣реА рд░рд╛рддреНрд░реА рддрдкрд╛рд╕рддреЗ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 sre/demo.py command
python3 - <<'EOF'
import sys; sys.path.insert(0, "sre"); from crew import IncidentLog
log = IncidentLog([(0, "role", "Dipika", "IC"), (2, "role", "Dipika", "ops"), (3, "role", "Aishwarya", "comms"),
(4, "role", "Katrina", "scribe"), (5, "update"), (50, "update"),
(60, "handoff", "IC", "Dipika", "crew-5", False), (61, "leave", "Dipika"), (90, "resolve")])
probs, mins = log.check()
print(f"{mins} min, {len(probs)} problems:")
for p in probs: print(" -", p)
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
command рд╣реЗ рдЫрд╛рдкрддреЗ:
тФАтФА without roles: the timetable service is down at 23:00 ┬╖ resolved after 110 min ┬╖ 5 problem(s)
тЬЧ 00:00 Katrina went off shift still holding ops тАФ nobody holds it now
тЬЧ no IC was ever named
тЬЧ no comms was ever named
тЬЧ no scribe was ever named
тЬЧ 23:00 no status update for 110 min (rhythm: every 30)
тФАтФА with incident command: the timetable service is down at 23:00 ┬╖ resolved after 100 min ┬╖ 0 problem(s)
рддреБрдордЪрд╛ snippet рд╣реЗ рдЫрд╛рдкрддреЛ:
90 min, 6 problems:
- 00:00 IC handoff Dipika тЖТ crew-5 never acknowledged тАФ two people think they lead
- 00:01 Dipika went off shift still holding IC тАФ nobody holds it now
- 00:01 Dipika went off shift still holding ops тАФ nobody holds it now
- 23:05 no status update for 45 min (rhythm: every 30)
- 23:50 no status update for 40 min (rhythm: every 30)
- the IC is also hands-on in ops тАФ nobody is watching the whole incident
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
рднреВрдорд┐рдХрд╛рдВрдЪреА рдлрдХреНрдд рдирд╛рд╡реЗ рдЕрд╕рдгреЗ рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА. рддреБрдордЪреНрдпрд╛ snippet рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рднреВрдорд┐рдХрд╛ рдиреЗрдорд▓реА рд╣реЛрддреА, рдЖрдгрд┐ рддрд░реАрд╣реА рддреНрдпрд╛рдд рд╕рд╣рд╛ рдЕрдбрдЪрдгреА рд╣реЛрддреНрдпрд╛: IC рджреБрд░реБрд╕реНрддреАрд╣реА рдХрд░рдд рд╣реЛрддреА, updates 45 рдЖрдгрд┐ 40 рдорд┐рдирд┐рдЯрд╛рдВрдкрд░реНрдпрдВрдд рд▓рд╛рдВрдмрд▓реЗ, рдЖрдгрд┐ handoff рдХрдзреАрдЪ acknowledge рдЭрд╛рд▓реЗ рдирд╛рд╣реА тАФ рдореНрд╣рдгреВрди рджреАрдкрд┐рдХрд╛ рдЧреЗрд▓реНрдпрд╛рд╡рд░ command рдХрд┐рдВрд╡рд╛ ops рдХреЛрдгрд╛рдХрдбреЗрдЪ рдирд╡реНрд╣рддреЗ. рд╢рд╛рдВрдд рд░рд╛рддреНрд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдорд╛рдд рдЙрддреНрддреАрд░реНрдг рдЭрд╛рд▓реА, рддреНрдпрд╛рдд 00:00 рдЪреЗ handoff рд╕реБрджреНрдзрд╛, рдЬреЗ crew-5 рдиреЗ рд╕реНрд╡реАрдХрд╛рд░рд▓реЗ. (рдпрд╛ runs рдордзреАрд▓ resolve рд╣реЛрдгреНрдпрд╛рдЪреЗ рд╡реЗрд│ рдЧреЛрд╖реНрдЯреАрдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗрдд, model рддреЗ рдЧрдгрдд рдирд╛рд╣реА.)
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рд╕рд░реНрд╡рд╛рдд рд╡рд░рд┐рд╖реНрда engineer IC рд╣реЛрддреЗ рдЖрдгрд┐ debugging рд╕реБрджреНрдзрд╛ рд╕реБрд░реВ рдХрд░рддреЗ
- "рдХрджрд╛рдЪрд┐рдд рдХрд╛рд╣реАрдЪ рдирд╕реЗрд▓" рдореНрд╣рдгреВрди incident рдЙрд╢рд┐рд░рд╛ рдШреЛрд╖рд┐рдд рдХрд░рдгреЗ
- рдмрд╛рддрдореА рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛рдЪ status updates тАФ рд╢рд╛рдВрддрддреЗрдореБрд│реЗ рдиреЗрддреЗ рджреБрд░реБрд╕реНрддреА рдХрд░рдгрд╛рд▒реНрдпрд╛рдВрдирд╛ рдлреЛрди рдХрд░рддрд╛рдд
- handoff рдореНрд╣рдгреВрди "рдореА рдЭреЛрдкрд╛рдпрд▓рд╛ рдЬрд╛рддреЗ"
- рдЕрдиреЗрдХ рд▓реЛрдХ рдПрдХрд╛рдЪ рд╡реЗрд│реА production рдмрджрд▓рддрд╛рдд, рдЖрдгрд┐ рдХреЛрдгреА рдХрд╛рдп рдмрджрд▓рд▓реЗ рддреЗ рдХреЛрдгрд╛рд▓рд╛рдЪ рдорд╛рд╣реАрдд рдирд╕рддреЗ
- scribe рдирд╛рд╣реА, рдореНрд╣рдгреВрди postmortem рдЪреА timeline рдЖрдард╡рдгреАрддреВрди рдЖрдгрд┐ chat scrollback рдордзреВрди рдкреБрдиреНрд╣рд╛ рдмрдирд╡рд▓реА рдЬрд╛рддреЗ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
Handoff рдЪрд╛ template рд╕рдЧрд│реНрдпрд╛рдВрдирд╛ рд╕рд╛рдкрдбреЗрд▓ рдЕрд╢рд╛ рдард┐рдХрд╛рдгреА рдареЗрд╡рд╛ (incident channel рдЪрд╛ pinned message):
IC HANDOFF тАФ timetable outage тАФ 00:00
state: timetable API 40% errors, database failover done at 23:40, errors falling
tried: rolled back release 2026.09.27-2 (no change); failed over DB (helped)
next: confirm replica lag < 5 s, then raise read traffic
roles: IC crew-5 (from Dipika) ┬╖ ops Katrina ┬╖ comms Aishwarya (next update 00:30) ┬╖ scribe crew-5
incoming: "crew-5: I have command."
incident.io, PagerDuty, FireHydrant рдЖрдгрд┐ Rootly рд╕рд╛рд░рдЦреА tools incident channel рддрдпрд╛рд░ рдХрд░рддрд╛рдд, рднреВрдорд┐рдХрд╛ рд╡рд╛рдЯрддрд╛рдд рдЖрдгрд┐ chat рдордзреВрди timeline рдареЗрд╡рддрд╛рдд. рдЦрд▒реНрдпрд╛ account рд╡рд░ тАФ PagerDuty рдЪреНрдпрд╛ API (Events API v2) рдиреЗ command line рд╡рд░реВрди incident рдЙрдШрдбрд╛:
curl -s -X POST https://events.pagerduty.com/v2/enqueue -H "Content-Type: application/json" -d '{
"routing_key": "'"$PD_ROUTING_KEY"'", "event_action": "trigger",
"payload": {"summary": "timetable API 40% errors", "source": "timetable", "severity": "critical"}}'
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рдпрд╛ рдорд╣рд┐рдиреНрдпрд╛рдд 30 рдорд┐рдирд┐рдЯрд╛рдВрдЪрд╛ tabletop exercise рдХрд░рд╛: рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ outage, рдиреЗрдорд▓реЗрд▓реА IC, updates рдЯрд╛рдХрдгрд╛рд░реА comms lead, рдЖрдгрд┐ рдордзреНрдпреЗрдЪ рдПрдХ handoff. рдкрд╣рд┐рд▓реНрдпрд╛рдЪ рд╡реЗрд│реА рдиреЗрд╣рдореА рдПрдЦрд╛рджреА рдЙрдгреАрд╡ рд╕рд╛рдкрдбрддреЗ.
тПня╕П рдкреБрдвреЗ
рднрд╛рдЧ 3: рдЕрдкрдпрд╢ рдЧреГрд╣реАрдд рдзрд░реВрди design. рдЖрдзреА рдЧрдгрд┐рдд: рдЗрдорд╛рд░рддреАрдВрдЪреА рд╕рд╛рдЦрд│реА рдХрд┐рддреА рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдЕрд╕реВ рд╢рдХрддреЗ?
git checkout lesson-09-reliability-math