Reagowanie na incydenty wspomagane przez AI
ENReagowanie na incydenty wspomagane przez AI łączy Claude Code, Codex lub Cursor z Sentry, Grafaną, Datadogiem i PagerDuty przez serwery MCP tylko do odczytu. Agent układa alerty, wdrożenia i błędy w oś czasu ze źródłami, sprawdza hipotezy, przygotowuje mitygację, komunikaty i post-mortem. Każdą zmianę na produkcji zatwierdza incident commander, a powrót do normy potwierdza zapytanie do monitoringu.
Jest 02:47. PagerDuty budzi cię z powodu błędów w płatnościach, Grafana, Datadog i Sentry są otwarte w sześciu kartach, a product manager już pyta na kanale incydentu, kiedy będzie naprawione. Sama poprawka może zająć dwie minuty; czas zjada ustalenie, co się właściwie zepsuło. Ta strona jest dla dyżurnego developera, który prowadzi taki incydent, i dla tech leada odpowiedzialnego za proces obsługi incydentów. Pokazuje, gdzie agent pracuje w każdej fazie, jakie prompty wkleić i jakie bramki pozwalają zaufać jego wynikom bez czytania każdej linijki.
Co daje ten proces
Dział zatytułowany „Co daje ten proces”- Podział na fazy: co robi agent, a o czym decyduje konkretna osoba, od alertu do post-mortemu.
- Konfigurację MCP tylko do odczytu dla Sentry, Grafany, Datadoga i PagerDuty w Claude Code, Codeksie i Cursorze, wraz z przełącznikiem, który odbiera każdemu serwerowi prawo zapisu.
- Sześć promptów do wklejenia: korelacja, weryfikacja hipotezy, przygotowanie mitygacji, sprawdzenie powrotu do normy, komunikat o statusie i szkic post-mortemu.
- Tabelę decyzyjną: rollback, flaga funkcji czy poprawka do przodu, oraz test powrotu do normy, który zamyka incydent.
- Sposób na post-mortem, w którym każdy czynnik przyczynowy zamienia się w test, regułę alertu albo ewaluację.
Gdzie agent pomaga w incydencie, a gdzie się zatrzymuje?
Dział zatytułowany „Gdzie agent pomaga w incydencie, a gdzie się zatrzymuje?”Agent jest analitykiem i protokolantem incydentu. Nigdy nie obsługuje produkcji. Każda faza ma wynik, który sprawdzisz bez ufania prozie agenta.
| Faza | Agent robi | Decyduje człowiek | Dowód, który sprawdzasz |
|---|---|---|---|
| Wykrycie | Nic: monitoring budzi człowieka | Dyżurny otwiera incydent | ID alertu w narzędziu do incydentów |
| Korelacja | Buduje oś czasu w UTC z alertów, błędów i wdrożeń | — | Każda linia wskazuje zapytanie, ID alertu, ID zgłoszenia lub SHA commita |
| Diagnoza | Szereguje hipotezy z dowodami za i przeciw | Incident commander wybiera, na podstawie której działać | Źródła ponownie otwarte przez drugie uruchomienie |
| Mitygacja | Przygotowuje krok z runbooka, revert albo zmianę flagi | Incident commander zatwierdza, pipeline wykonuje | Log audytowy systemu wdrożeń lub flag |
| Powrót do normy | Uruchamia zapytanie i porównuje z progami ustalonymi wcześniej | Commander ogłasza powrót do normy | Wynik zapytania o SLO dołączony do incydentu |
| Komunikacja | Przygotowuje każdy komunikat o statusie | Osoba od komunikacji lub incident commander go publikuje | Opublikowana wiadomość, podpisana nazwiskiem |
| Wnioski | Pisze szkic post-mortemu i testy regresji | Właściciele usługi scalają pull request z post-mortemem | Testy i ewaluacje, które nie przechodzą na starym zachowaniu |
Dwie sąsiednie strony opisują to, co dzieje się na granicach tego procesu. Jeśli chcesz zamknąć agenta triażowego na osobnym koncie serwisowym, z listą dozwolonych narzędzi i ćwiczeniem z wstrzykiwaniem promptów, przejdź do zawężonego triażu incydentów z AI. Gdy to agent spowodował incydent, zacznij od strony gdy incydent wywoła agent: tam ograniczanie skutków zaczyna się od odebrania agentowi tożsamości.
Podłącz źródła incydentów tylko do odczytu, zanim przyjdzie następny alert
Dział zatytułowany „Podłącz źródła incydentów tylko do odczytu, zanim przyjdzie następny alert”Zrób to spokojnym popołudniem, a nie w trakcie incydentu. Konfiguracja MCP różni się tylko poleceniem albo plikiem; serwery, adresy URL i przełączniki trybu tylko do odczytu są takie same w każdym agencie. Pełny przewodnik instalacji, z zakresami OAuth i kosztem kontekstu, znajdziesz na stronie serwery MCP do obserwowalności.
| Serwer | Oficjalny pakiet lub URL (sprawdzone 2026-09-26) | Co wymusza tryb tylko do odczytu |
|---|---|---|
| Sentry | https://mcp.sentry.dev/mcp (OAuth); stdio @sentry/mcp-server 0.42.0 dla instalacji self-hosted | Zawęź udostępniane narzędzia parametrem ?skills= w URL-u, na przykład ?skills=inspect,seer (README Sentry MCP, sprawdzone 2026-09-26). seer uruchamia analizy Seer; ściśle tylko do odczytu daje ?skills=inspect |
| Grafana | PyPI mcp-grafana 1.6.3, uruchamiany przez uvx | --disable-write i konto serwisowe z rolą Viewer |
| Datadog | https://mcp.datadoghq.com/v1/mcp (US1; UE używa mcp.datadoghq.eu) | README nie opisuje przełącznika tylko do odczytu; zaloguj się jako użytkownik z adekwatną rolą |
| PagerDuty | PyPI pagerduty-mcp 1.1.0, uruchamiany przez uvx (repozytorium wycofane w 2026 roku; nadal domyślnie tylko do odczytu). Utrzymywaną drogą jest hostowany zdalny serwer MCP PagerDuty z OAuth; zobacz jego bazę wiedzy | Domyślnie tylko do odczytu; do triażu nigdy nie dodawaj --enable-write-tools |
Uruchom w terminalu w katalogu głównym repozytorium usługi. -s project zapisuje .mcp.json, więc konfiguracja przechodzi przez review, a pojedyncze cudzysłowy zostawiają każde ${VAR} nierozwinięte aż do startu:
claude mcp add -s project --transport http sentry 'https://mcp.sentry.dev/mcp?skills=inspect,seer'claude mcp add -s project grafana \ -e GRAFANA_URL=https://yourstack.grafana.net \ -e 'GRAFANA_SERVICE_ACCOUNT_TOKEN=${GRAFANA_SERVICE_ACCOUNT_TOKEN}' \ -- uvx mcp-grafana --disable-writeclaude mcp add -s project --transport http datadog https://mcp.datadoghq.com/v1/mcpclaude mcp add -s project pagerduty \ -e 'PAGERDUTY_USER_API_KEY=${PAGERDUTY_USER_API_KEY}' \ -- uvx pagerduty-mcpW sesji uruchom /mcp, aby dokończyć logowania OAuth i sprawdzić, czy każdy serwer jest połączony.
Serwery zdalne dodaj przez codex mcp add; w naszym teście od razu uruchomił przepływ OAuth, a codex mcp login <nazwa> go powtarza. Dwa serwery stdio trafiają do ~/.codex/config.toml, gdzie env_vars przekazuje token z powłoki bez zapisywania go w pliku:
codex mcp add sentry --url 'https://mcp.sentry.dev/mcp?skills=inspect,seer'codex mcp add datadog --url https://mcp.datadoghq.com/v1/mcp[mcp_servers.grafana]command = "uvx"args = ["mcp-grafana", "--disable-write"]env = { GRAFANA_URL = "https://yourstack.grafana.net" }env_vars = ["GRAFANA_SERVICE_ACCOUNT_TOKEN"]
[mcp_servers.pagerduty]command = "uvx"args = ["pagerduty-mcp"]env_vars = ["PAGERDUTY_USER_API_KEY"]Każdy wpis sprawdzisz poleceniem codex mcp list (codex-cli 0.157.1).
W .cursor/mcp.json w katalogu głównym repozytorium. Dokumentacja MCP Cursora (według fragmentu SECONDARY, 2026-08-28) zapisuje zmienne środowiskowe jako ${env:NAZWA}:
{ "mcpServers": { "sentry": { "url": "https://mcp.sentry.dev/mcp?skills=inspect,seer" }, "datadog": { "url": "https://mcp.datadoghq.com/v1/mcp" }, "grafana": { "command": "uvx", "args": ["mcp-grafana", "--disable-write"], "env": { "GRAFANA_URL": "https://yourstack.grafana.net", "GRAFANA_SERVICE_ACCOUNT_TOKEN": "${env:GRAFANA_SERVICE_ACCOUNT_TOKEN}" } }, "pagerduty": { "command": "uvx", "args": ["pagerduty-mcp"], "env": { "PAGERDUTY_USER_API_KEY": "${env:PAGERDUTY_USER_API_KEY}" } } }}Dokończ każde logowanie OAuth, gdy Cursor o nie poprosi.
Tryb tylko do odczytu jest cechą poświadczenia, a nie promptu. Token bez prawa zapisu wytrzyma agenta, którego ktoś namówił do działania; zdanie „niczego nie zmieniaj” już nie. Serwery wskazuj zwykłym językiem („Using the Grafana and Sentry MCP servers, …”). W Claude Code wzmianki @serwer:protokół://zasób odwołują się do zasobów MCP, a nie do narzędzi (sprawdzone na 2.1.283).
Jak skorelować alerty w jedną oś czasu?
Dział zatytułowany „Jak skorelować alerty w jedną oś czasu?”Uruchom agenta w chwili, gdy potwierdzasz alert. Pierwszy wynik, którego potrzebujesz, to oś czasu, w której każda linia wskazuje swoje źródło, bo tylko taką formę sprawdzisz w dwie minuty.
Interaktywnie zacznij w trybie planowania, w którym agent może odpytywać serwery, ale nie edytuje plików: claude --permission-mode plan, potem wklej prompt. Żeby skrypt dopisał oś czasu do zapisu incydentu, uruchom go bez interfejsu i pozwól tylko na serwery MCP:
claude -p "$(cat prompts/correlate.md) Incident: $INCIDENT_ID" \ --allowedTools "mcp__sentry mcp__grafana mcp__datadog mcp__pagerduty" \ --permission-mode dontAsk \ --output-format stream-json --verbose > "timeline-$INCIDENT_ID.jsonl"dontAsk odrzuca każde wywołanie narzędzia, które wymagałoby pytania, zamiast czekać na odpowiedź, której nikt nie udzieli (Claude Code 2.1.283). Serwery dodane z -s project wymagają jednorazowego zatwierdzenia, zanim się załadują, więc na świeżej maszynie lub runnerze CI to uruchomienie może wystartować bez narzędzi MCP i zwrócić oś czasu bez żadnych wywołań. Zatwierdź serwery projektu raz w sesji interaktywnej (albo dodaj je z -s user na maszynie, która uruchamia skrypt), a potem sprawdź claude mcp list, zanim zaufasz uruchomieniu bez interfejsu.
Interaktywnie uruchom codex w repozytorium i wklej prompt. Bez interfejsu użyj profilu uprawnień tylko do odczytu (beta, codex-cli 0.138.0 i nowsze) i zachowaj strumień zdarzeń JSONL, który rejestruje każde wywołanie MCP:
codex exec -c default_permissions=":read-only" \ --json -o "timeline-$INCIDENT_ID.md" \ "$(cat prompts/correlate.md) Incident: $INCIDENT_ID" \ < /dev/null > "timeline-$INCIDENT_ID.jsonl"Profil ogranicza polecenia powłoki uruchamiane przez Codeksa. Dokumentacja nie mówi, że ogranicza wywołania MCP (codex-cli 0.157.1), dlatego prawdziwą gwarancję dają przełączniki z tabeli powyżej.
Otwórz agenta w Plan Mode i wklej prompt. Automatyzacje Cursora (Automations) potrafią też uruchomić agenta w chmurze na zdarzenie z Sentry lub PagerDuty (dokumentacja Cursora, sprawdzona 2026-08-28), więc oś czasu może czekać, zanim otworzysz laptopa. Agent w chmurze ma pełną maszynę wirtualną z powłoką, więc daj jego środowisku tylko powyższe tokeny tylko do odczytu i każ mu dostarczyć raport, a nie gałąź.
Przydatna odpowiedź jest krótka i sprawdzalna. Na przykład (ilustracyjnie):
02:30 payment-service v2.3.1 deployed [commit 9f3c2e1]02:44 DB connection wait p95 150 ms -> 4.2 s [grafana: query A]02:45 5xx rate 0.2% -> 15% [datadog monitor 81234]02:47 ConnectionTimeoutError spike, first seen in v2.3.1 [sentry PAY-4F2]02:47 PagerDuty incident triggered [pagerduty Q2X9]
Downstream: checkout-web 502s follow payment-service 5xx.H1 connection pool too small after v2.3.1 (pool config changed in 9f3c2e1). Against: none found.H2 database saturation. Against: DB CPU flat at 35% [grafana: query B].Jak sprawdzić główną hipotezę, zanim ktokolwiek zacznie mitygację?
Dział zatytułowany „Jak sprawdzić główną hipotezę, zanim ktokolwiek zacznie mitygację?”Oś czasu podsuwa przyczynę, ale jej nie dowodzi. Zanim ktoś dotknie produkcji, poproś agenta, żeby spróbował obalić własną najlepszą hipotezę i wskazał, co by ją potwierdziło.
„Najmniejsza odwracalna akcja” to celowy zapis. Kieruje odpowiedź w stronę flagi albo revertu, które da się cofnąć, a nie spekulatywnej zmiany w kodzie pisanej pod presją.
Rollback, wyłączenie flagi czy poprawka do przodu?
Dział zatytułowany „Rollback, wyłączenie flagi czy poprawka do przodu?”Wybierz mitygację, zanim ktokolwiek napisze kod. Zadaniem agenta jest przygotować wariant wybrany przez incident commandera i z góry zapisać próg powrotu do normy.
| Sytuacja | Mitygacja | Co przygotowuje agent |
|---|---|---|
| Wdrożenie w oknie incydentu i czysta poprzednia wersja | Rollback przez pipeline | Pull request z revertem i krok rollbacku z runbooka |
| Zmiana jest za flagą funkcji | Wyłączenie flagi | Dokładną flagę, jej obecne targetowanie i oczekiwaną zmianę metryki |
| Rollback jest niebezpieczny (poszła migracja, zmienił się kształt danych) | Poprawka do przodu | Minimalną łatkę z testem, który najpierw nie przechodzi, a potem przechodzi |
| Żadna zmiana nie koreluje (pojemność, awaria zależności) | Skalowanie, failover albo zrzucanie ruchu według runbooka | Krok z runbooka i liczby, które go uzasadniają |
Nieprzećwiczona ścieżka rollbacku zawodzi o trzeciej w nocy. Jej budowę opisuje przećwiczony rollback z ludzką decyzją o produkcji, a to, kto może nacisnąć przycisk, strona zatwierdzanie produkcji jako granica systemu.
Mitygacja to faza, w której trzeba zwolnić. Od v2.1.283 (oba kanały wydań w dniu 2026-10-12) tryb auto jest trybem startowym sesji interaktywnych, więc tę sesję zacznij w trybie Manual, żeby każda akcja wymagała zgody:
claude --permission-mode manualPodczas incydentu nigdy nie używaj --dangerously-skip-permissions ani bypassPermissions. Agent otwiera pull request, a wdraża go pipeline.
Pracuj w osobnym worktree, żeby gałąź incydentu z niczym się nie zderzyła, i użyj -a on-request, dzięki czemu model prosi o zatwierdzenie, gdy go potrzebuje:
codex --worktree -a on-request -c default_permissions=":workspace"Codex pyta, zanim przekroczy granicę przestrzeni roboczej, na przykład przed pushem. Nie używaj --dangerously-bypass-approvals-and-sandbox poza jednorazowym sandboksem z ograniczonym dostępem do sieci.
Użyj Plan Mode, przeczytaj plan, potem pozwól agentowi edytować i przejrzyj diff, zanim go zaakceptujesz. Ustaw Run modes w Cursorze tak, by polecenia terminala i wywołania MCP wymagały twojej zgody; tryby to Auto-review, Allowlist i Run Everything, w Settings > Agents > Approvals & Execution (dokumentacja Cursora, sprawdzone 2026-10-12). Bugbot może przejrzeć powstały pull request jak każdy inny.
Jak ogłosić powrót do normy, nie ufając podsumowaniu agenta?
Dział zatytułowany „Jak ogłosić powrót do normy, nie ufając podsumowaniu agenta?”Powrót do normy to wynik zapytania porównany z progami zapisanymi przed wdrożeniem. Ustalanie poprzeczki po zobaczeniu liczb to prosta droga do uznania połowicznej poprawki za gotową. Agent uruchamia sprawdzenie i raportuje PASS albo FAIL; powrót do normy ogłasza incident commander.
Jak informować interesariuszy w trakcie incydentu?
Dział zatytułowany „Jak informować interesariuszy w trakcie incydentu?”Agent pisze szkic, publikuje konkretna osoba. Bot, który publikuje sam, prędzej czy później powie klientom coś, na co incident commander się nie zgodził.
W Slacku oficjalny serwer MCP jest częścią wtyczek: /plugin install slack@claude-plugins-official w Claude Code i codex plugin add slack@openai-curated w Codeksie (obie sprawdzone 2026-09-26). W planach Claude Team i Enterprise drogą do Slacka jest Claude Tag, który działa jako wspólna tożsamość organizacji, więc zanim zaprosisz go na kanał incydentu, sprawdź, jakie uprawnienia nadał mu administrator. Codex działa też ze Slacka: wspomnij @ChatGPT, a przy włączonym Cloud delegation ChatGPT wysyła pracę na repozytorium do zadania Codex Cloud (dokumentacja OpenAI, sprawdzone 2026-10-12).
Jak zamienić post-mortem w testy i ewaluacje?
Dział zatytułowany „Jak zamienić post-mortem w testy i ewaluacje?”Post-mortem opłaca się tylko wtedy, gdy każdy czynnik przyczynowy staje się sprawdzeniem, które zawiedzie, jeśli problem wróci. Agent odtwarza oś czasu z tych samych zapytań, które uruchamiał na żywo, więc szkic zaczyna się od dowodów, a nie od pamięci. Oznacz każdy czynnik klasą z taksonomii błędów, żeby powtarzające się przyczyny były widoczne w wielu incydentach.
Właściciel usługi przegląda post-mortem jako pull request, który trafia do repozytorium tylko razem z testami albo z podlinkowanymi zgłoszeniami dla każdego działania naprawczego. Gdy przyczyną była zmiana napisana przez agenta, przypadek ewaluacyjny trafia do zestawu ciągłych ewaluacji, dzięki czemu ten sam błąd zatrzyma build, zamiast kogoś budzić.
Skąd wiesz, że pracy agenta przy incydencie można ufać?
Dział zatytułowany „Skąd wiesz, że pracy agenta przy incydencie można ufać?”Wynik agenta sprawdzają bramki, a nie ponowne czytanie:
- Źródła, a potem audyt. Każda linia osi czasu ma źródło, a drugie uruchomienie otwiera je ponownie i oznacza jako VERIFIED, CONTRADICTED albo UNSOURCED. Prompt audytowy jest na stronie zawężony triaż incydentów z AI. Hipoteza oparta na linii bez źródła nie trafia do incident commandera.
- Log wywołań narzędzi. Strumień stream-json z Claude Code i strumień JSONL z Codeksa rejestrują każde wywołanie MCP. Oś czasu bez wywołań za nią jest zmyślona.
- Poświadczenia, nie instrukcje. O tym, czego agent może dotknąć, decydują role Viewer,
--disable-write, lista umiejętności w Sentry (samoinspectdla ścisłego odczytu) oraz domyślny tryb tylko do odczytu w PagerDuty. - Progi ustalone z góry. Powrót do normy przechodzi albo nie względem liczb zapisanych w pull requeście przed wdrożeniem.
- Zwykłe bramki dostarczania. Revert albo poprawka przechodzi przez review, CI i pipeline wdrożeń jak każda zmiana. Zobacz, jak przeglądać pull request agenta.
- Podpis z nazwiskiem. Incident commander zatwierdza mitygację i ogłasza powrót do normy; właściciele usługi scalają post-mortem.
Żeby ocenić praktykę w skali kwartału, dla każdego incydentu śledź trzy rzeczy: minuty od alertu do pierwszej osi czasu ze źródłami, odsetek linii osi czasu oznaczonych przez audyt jako VERIFIED oraz działania z post-mortemów zamknięte z dołączonym sprawdzeniem. Uruchomienia, koszty i wywołania narzędzi samego agenta należą do panelu obserwowalności agentów.
Wprowadzaj ten proces w kolejności z tabeli na początku strony: najpierw korelacja tylko do odczytu, potem szkice komunikatów i post-mortemów, a przygotowywanie mitygacji dopiero wtedy, gdy zespół zobaczy, że osie czasu sprawdzają się w kilku prawdziwych incydentach.
Co psuje się w reagowaniu na incydenty z AI i jak z tego wyjść?
Dział zatytułowany „Co psuje się w reagowaniu na incydenty z AI i jak z tego wyjść?”Agent podaje metryki, o które nigdy nie zapytał. Objaw: pewna siebie oś czasu bez wywołań narzędzi. Wyjście: sprawdź /mcp (Claude Code), codex mcp list albo ustawienia MCP w Cursorze; najczęściej winny jest wygasły token OAuth albo brakujący zakres. Uruchom ponownie z serwerami wymienionymi wprost i odrzuć każdą linię bez źródła. Pełna diagnostyka jest na stronie problemy z połączeniem MCP.
Serwer stdio kończy działanie zaraz po starcie. Objaw: Grafana albo PagerDuty nigdy się nie łączy. Wyjście: oba to pakiety Pythona, więc uruchamia się je przez uvx, a nie npx; zainstaluj uv na maszynie. Pakiet npm @leval/mcp-grafana to port społeczności, nie serwer Grafany.
Serwer Datadoga zwraca 401 albo złe dane. Objaw: uwierzytelnianie się nie udaje albo zapytania trafiają do pustej organizacji. Wyjście: dopasuj host MCP do regionu z adresu Datadoga; app.datadoghq.eu oznacza mcp.datadoghq.eu.
Agent wycisza, potwierdza albo zamyka alerty. Objaw: alerty milkną, a użytkownicy nadal widzą błędy. Wyjście: odbierz prawo zapisu u źródła (--disable-write, bez --enable-write-tools, bez umiejętności triage w Sentry) i wznów powiadamianie w narzędziu do incydentów.
Tekst z logów steruje agentem. Objaw: agent proponuje akcję, która przyszła z linii logu albo zgłoszenia. Wyjście: traktuj wiadomości z kanału, logi i ślady jako dane; trzymaj narzędzia zapisu poza zasięgiem i przeprowadź ćwiczenie z wstrzykiwaniem promptu ze strony zawężony triaż incydentów z AI, zanim agent dołączy do prawdziwego incydentu.
Komunikaty zalewają kanał. Objaw: ludzie przestają je czytać. Wyjście: publikuj tylko przy zmianie stanu albo w uzgodnionym odstępie, ogranicz komunikat do pięciu linii i niech publikuje człowiek.
Post-mortem obwinia model. Objaw: „AI się pomyliło” jako przyczyna źródłowa. Wyjście: zakończ łańcuch przyczyn na mechanizmie kontrolnym, który powinien był wyłapać zmianę, czyli brakującym teście, uprawnieniu albo ścieżce review, i postępuj według strony gdy incydent wywoła agent.
Dokąd dalej po reagowaniu na incydenty
Dział zatytułowany „Dokąd dalej po reagowaniu na incydenty”- Monitoring i obserwowalność — reguły alertów i panele, które cię budzą, zbudowane i przetestowane z agentem.
- Zawężony triaż incydentów z AI — zamknięta tożsamość, lista dozwolonych narzędzi i ćwiczenie dla agenta triażowego.
- Serwery MCP do obserwowalności — pełna instalacja, zakresy OAuth i koszt kontekstu dla Sentry, Grafany, Datadoga i PostHoga.
- Przećwiczony rollback z ludzką decyzją o produkcji — ścieżka mitygacji, na której opiera się ta strona.
- Odtwarzanie po awarii — gdy incydent to utracony region albo utracone dane, a nie złe wdrożenie.
- Gdy incydent wywoła agent — ograniczanie skutków i ustalanie odpowiedzialności, gdy przyczyną jest agent.