빠른 속도의 팀을 위한 인시던트 관리
인시던트 사후 검토
Atlassian에서는 비난을 배제한 사후 검토를 적용하여 심각도 수준이 2 이상인 모든 인시던트에서 근본 원인을 파악하고 인시던트를 해결하고 있습니다. 아래에는 Atlassian에서 사후 검토를 운영하는 방식에 대해 설명하는 내부 문서가 간단히 요약되어 있습니다.
핸드북 인쇄 버전 또는 PDF 받기
무료로 제공되는 Atlassian 인시던트 관리 핸드북의 인쇄 버전은 한정되어 있습니다. 또는 PDF 버전을 다운로드하세요.
필드 | 설명 | 예 |
인시던트 요약 | 몇 개의 문장으로 인시던트를 요약합니다. 심각도, 원인, 영향이 지속된 기간이 포함되어야 합니다. | <날짜> <인시던트 시간 범위(예: 14:30부터 15:00까지)>에 <숫자>명의 고객이 <이벤트 증상>을(를) 경험했습니다. 이벤트는 <인시던트의 원인이 된 배포 또는 변경 시간>에 수행된 배포로 인해 트리거되었습니다. 해당 배포에는 <변경 이유에 대한 설명>(으)로 인한 코드 변경이 포함되어 있었습니다. 이 배포의 버그로 인해 <문제에 대한 설명>이(가) 발생했습니다. 이 이벤트는 <시스템>에서 감지되었습니다. 우리는 <취한 해결 조치>을(를) 통해 이벤트의 영향을 완화했습니다. 이 <심각도 수준> 인시던트는 X%의 고객에게 영향을 미쳤습니다. 이 인시던트와 관련하여 <지원 티켓 및/또는 소셜 미디어 게시물 개수>이(가) 제기되었습니다. |
사전 요소 | 이 인시던트가 발생한 상황에 대해 설명합니다. 예를 들어 잠재 버그를 생성한 이전 변경사항 등입니다. | <날짜><시간>(<고객이 영향을 받기 전까지의 시간>)에 <제품 또는 서비스>을(를) <인시던트를 발생시킨 변경 사항에 대한 설명>과(와) 같이 변경했습니다. 해당 변경으로 인해 <변경 사항의 영향에 대한 설명>이(가) 발생했습니다. |
결함 | 예상과 다르게 수행된 작업에 대해 설명합니다. 결함을 보여주는 관련 그래프 또는 데이터의 스크린샷을 첨부합니다. | <기간> 중에 X%의 요청에 대해 <숫자>개의 응답이 잘못 전송되었습니다. |
영향 | 인시던트 발생 시 내부 고객과 외부 고객에게 표시된 내용에 대해 설명합니다. 제출된 지원 사례의 수를 기재해야 합니다. | <날짜>, <시간 범위>에 <경과 시간> 동안 <인시던트 요약>이(가) 발생했습니다. 이로 인해<숫자> 명의 고객(전체 <시스템 또는 서비스>의 고객 중 X%)이 <고객이 경한한 증상에 대한 설명>을(를) 경험했습니다. <지원 티켓 및 소셜 미디어 게시물 수>이(가) 제출되었습니다. |
감지 | Atlassian에서 언제, 어떻게 인시던트를 감지했는가? 어떻게 하면 감지 시간을 개선할 수 있는가? 사고 훈련으로, 어떻게 하면 시간을 반으로 줄일 수 있는가? | <알림 유형> 이(가) 트리거되고 <호출을 받은 팀 또는 개인>이(가) 호출되었을 때 인시던트가 감지되었습니다. 해당 팀 또는 개인에게 디스크에 서비스를 기록할 권한이 없었기 때문에 <2차 대응 담당자 또는 팀>을(를) 호출했으며, 이로 인해 대응이 <시간 길이> 지연되었습니다. <개선을 소유한 팀>에서 <개선 영향>을(를) 구현하기 위해 <개선에 대한 설명>을(를) 준비할 예정입니다. |
대응 | 누가 언제, 어떤 방법으로 대응했는가? 대응이 지연되거나 불가능했던 요인이 있었는가? | UTC 기준으로 14시 34분에 호출을 받은 후에 KITT 엔지니어가 14시 38분에 인시던트 채팅방에 접속했습니다. 그러나 대기 중인 엔지니어는 Escalator 오토스케일러에 대한 충분한 배경 지식이 없었기 때문에 14시 50분에 추가 알림을 보냈으며, 선임 KITT 엔지니어가 14시 58분에 채팅방에 접속했습니다. |
복구 | 서비스가 복구된 방법과 시점에 대해 설명합니다. 영향을 완화하는 방법을 어떻게 찾았는가? 시나리오에 따라 추가 질문하기: 영향을 완화하기까지 소요되는 시간을 어떻게 개선할 수 있는가? 사고 훈련으로, 어떻게 하면 시간을 반으로 줄일 수 있는가? | 다음 세 가지 방법으로 복구되었습니다.
|
타임라인 | 시간대가 포함된 타임스탬프를 기록하여 자세한 인시던트 타임라인을 시간순으로 제공합니다. 사전 요소, 영향 시작 시간, 감지 시간, 에스컬레이션, 의사결정, 변경사항, 영향 종료 시간이 모두 포함되어야 합니다. | 모든 시간은 UTC 기준입니다. 11:48 - Control Plane K8S 1.9 업그레이드 완료12:46 - V1.9 으로 Goliath 업그레이드 완료(클러스터 오토스케일러 및 BuildEng 스케줄러 인스턴스 포함) 14:20 - Build Engineering에서 KITT Disturbed에 문제 보고 14:27 - KITT Disturbed에서 특정EC2 인스턴스(ip-203-153-8-204)의 오류 조사 시작 14:42 - KITT Disturbed에서 특정 노드 통제 14:49 - BuildEng에서 문제가 여러 노드에 영향을 미치는 것을 보고, 문제의 86개 인스턴스로 장애가 더 시스템상의 문제인 것으로 보임 15:00 - KITT Disturbed에서 표준 스케줄러로 전환하도록 권장함 15:34 - BuildEng에서 300개 포드에 장애가 있다고 보고함 16:00 - BuildEng에서 OutOfCpu 보고서를 통해 장애가 있는 모든 빌드를 제거함 16:13 - BuildEng에서 새로운 빌드에서 장애가 지속적으로 반복되며, 일시적인 장애가 아님을 보고함 16:30 - KITT에서 장애를 인시던트로 인식하고 인시던트로 실행함 16:36 - KITT에서 문제의 영향을 완화하기 위해, Escalator 오토스케일러가 컴퓨팅 노드를 제거할 수 없도록 오토스케일러를 비활성화함 16:40 - KITT에서 ASG가 안정적이고, 클러스터 로드가 정상이며, 고객에게 미치는 영향이 해결되었음을 확인 |
다섯 번의 '왜?' | 근본 원인 식별 기법을 사용합니다. 영향에서 시작하고 왜 인시던트가 발생했는지, 그리고 왜 그런 영향을 미쳤는지 질문합니다. 근본 원인을 찾을 때까지 계속 질문합니다. 여기에서, 또는 이슈에 첨부된 다이어그램에 이러한 이유를 목록으로 문서화합니다. |
|
근본 원인 | 근본 원인은 무엇이었는가? 이는 이러한 클래스의 인시던트가 반복되는 것을 막기 위해 변경해야 하는 사항입니다. | <버그 원인 또는 버그가 발생한 서비스> 연결 풀 처리의 버그로 인해 잘못된 조건에서 연결에 문제가 생긴 동시에 연결 상태를 확인할 수 없는 문제가 발생했습니다. |
백로그 점검 | 백로그에 이러한 인시던트를 방지하거나, 인시던트의 영향을 크게 줄일 수 있었던 조치가 있는가? 그렇다면 왜 그러한 조치를 수행하지 않았는가? 솔직하게 평가해야만 우선순위와 위험에 대한 과거 의사결정을 밝히는 데 도움이 됩니다. | 구체적으로 정해진 사항은 없습니다. 흐름 유형 지정에 대한 개선이 현재 진행 중인 것으로 알려져 있으며, 특정 방식이 마련되어 있습니다(예: 파일 변경/생성 시 흐름 유형 추가). 통합 테스트를 수정하기 위한 티켓이 만들어졌지만, 성공하지 못했습니다. |
반복 | 이 인시던트가 이전에 동일한 원인으로 반복된 적이 있는가? 그렇다면 왜 다시 발생했는가? | 동일한 근본 원인으로 인해 인시던트 HOT-13432, HOT-14932, HOT-19452가 발생했습니다. |
교훈 | 어떤 점을 알게 되었는가? 잘한 일, 더 잘할 수 있었던 일, 다행히 개선 기회를 찾을 수 있었던 점에 대해 논의하세요. |
|
수정 조치 | 이 종류의 인시던트가 다시 발생하지 않게 하려면 무엇을 해야 하는가? 누가, 언제 조치를 취할 예정인가? 이슈에 대해 각 조치를 추적하는 "우선 순위 조치" 이슈 링크를 만듭니다. |
|
시나리오 | 직전 원인 및 조치 | 근본 원인 | 근본 원인의 영향 완화 방법 |
Stride "Red Dawn" 팀의 서비스에서 서비스를 위한 Datadog 모니터링 및 대기 중 알림이 없었거나 서비스가 적절하게 구성되지 않았습니다. | 팀원이 새로운 서비스에 대한 모니터링과 알림을 구성하지 않았습니다. 해당 서비스를 위한 모니터링과 알림을 구성합니다. | 모니터링과 알림을 비롯하여 새로운 서비스를 올바르게 실행하기 위한 프로세스가 없습니다. | 새로운 서비스를 올바르게 실행하기 위한 프로세스를 만들고 팀에게 해당 프로세스를 준수하도록 교육합니다. |
이 브라우저 버전에서 작동하지 않는 Fabric Editor로 업그레이드하여 IE11에서 Stride를 사용할 수 없습니다. | 종속 서비스를 업그레이드했습니다. 업그레이드를 취소합니다. | 브라우저 간 호환성 테스트를 하지 않았습니다. | 지속적인 브라우저 간 호환성 테스트를 자동화합니다. |
Micros EU의 로그가 로깅 서비스에 전달되지 않았습니다. | 로그를 보내도록 Micros에 지정된 역할이 올바르지 않습니다. 역할을 수정합니다. | 특정 환경의 로깅이 언제 작동하지 않는지 알 수 없습니다. | 모든 환경의 누락된 로그에 대해 모니터링과 알림을 추가합니다. |
이전 AWS 인시던트에 의해 트리거되어 Confluence Vertigo 노드에서 미디어에 대한 연결 풀이 소진되었으며, 고객이 계속 연결되지 못하고 미디어 오류가 발생합니다. | AWS에 결함이 있습니다. AWS 사후 검토를 실시합니다. | Confluence 연결 풀 처리의 버그로 인해 잘못된 조건에서 연결에 문제가 생긴 동시에 연결 상태를 확인할 수 없는 문제가 발생했습니다. | 버그를 수정하고 향후 비슷한 상황 발생 시 영향을 미치기 전에 감지하기 위해 모니터링을 추가합니다. |
범주 | 정의 | 근본 원인에 대해 취해야 할 조치 |
버그 | Atlassian에서 코드에 적용한 변경사항(특정한 유형의 변경) | 테스트하고 카나리아 버전을 만든 후 단계적으로 롤아웃하고 감시합니다. 기능 플래그를 사용합니다. 품질 엔지니어에게 알립니다. |
변경 | 코드에 대한 변경 외에 Atlassian에서 적용한 변경사항 | 변경하는 방법을 개선합니다. 예를 들어, 변경 검토 또는 변경 관리 프로세스 등이 있습니다. '버그' 외의 모든 사항도 여기에 해당합니다. |
확장성 | 리소스 제약을 모르거나 용량 계획을 하지 않아서 확장에 실패함 | What are your service's resource constraints? Are they monitored and alerted? If you don't have a capacity plan, make one. If you do have one, what new constraint do you need to factor in? |
아키텍처 | 설계가 운영 조건에 부합하지 않음 | 설계를 검토합니다. 플랫폼을 변경해야 합니까? |
종속성 | Atlassian이 아닌 제3자 서비스 결함 | 제3자 결함의 위험을 관리하고 있습니까? 위험을 수용하는 비즈니스 결정을 내렸습니까, 또는 완화 대책을 구축해야 합니까? 아래의 '종속 서비스 관련 근본 원인'을 참조하세요. |
알 수 없음 | 확인 불가(조치: 진단 능력 향상) | 로깅, 모니터링, 디버깅 및 비슷한 기능을 추가하여 시스템의 식별 능력을 개선합니다. |
범주 | 질문 | 예제 |
인시던트 조사 | '이 인시던트가 어떤 상황에서 발생했으며 그 원인은 무엇인가?' 근본 원인을 찾는 것이 궁극적인 목표입니다. | 로그 분석, 요청 경로를 다이어그램으로 작성, 힙 덤프 검토 |
이 인시던트의 영향 완화 | '이 특정 이벤트를 해결하고 관리하기 위해 취한 즉각적 조치는 무엇인가?' | 롤백, 체리 피킹, 푸싱 구성, 영향을 받는 사용자에게 알림 |
이 인시던트로 인한 손해 복구 | '이 인시던트로 인한 즉각적 또는 부차적 손해를 어떻게 해결했는가?' | 데이터 복원, 시스템 수정, 트래픽 다시 라우팅 제거 |
향후 인시던트 감지 | '비슷한 오류를 정확히 감지하는 시간을 어떻게 줄일 수 있는가?' | 모니터링, 알림, 입력/출력에 대한 타당성 점검 |
향후 인시던트의 영향 완화 | '향후 이와 비슷한 인시던트 발생 시 심각도 및/또는 기간을 줄일 수 있는 방법은 무엇인가?' '이러한 클래스의 오류가 다음에 다시 발생하는 경우 영향을 받는 사용자 비율을 어떻게 줄일 수 있는가?' | 단계적 기능 축소, 중요하지 않은 결과 제외, 장애 시 열림, 대시보드 또는 플레이북 사용과 관련된 현재 방식 보강, 인시던트 프로세스 변경 |
향후 인시던트 방지 | '어떻게 이러한 종류의 오류가 반복되는 것을 막을 수 있는가?' | 코드 기반의 안정성 개선, 더욱 철저한 단위 테스트, 입력 유효성 검사 및 오류 조건에 대한 견고한 내성, 변경 제공 |
또한, Lueder와 Beyer의 조언을 참조하여 사후 검토 조치에 사용되는 표현을 결정했습니다.
사후 검토 조치의 표현:
사후 검토 조치에 올바른 표현을 사용하여 실행이 불가능하거나 미루는 것으로 인해 해당 조치가 무제한 연기되는 것을 막고 인시던트를 쉽게 완료할 수 있습니다. 잘 작성된 사후 조치는 다음과 같은 특징을 갖추고 있습니다.
실행 가능함: 동사로 시작하는 문장으로 각 조치를 표현합니다. 조치를 통해 프로세스가 아닌 유용한 결과를 얻어야 합니다. 예를 들어, '중요한 종속 서비스 목록을 열거하세요'는 좋은 조치인 반면, '종속 서비스를 조사하세요'는 좋은 결과를 만들 수 없습니다.
구체적임: 각 조치의 범위를 최대한 좁게 정의하여 작업에 포함되는 사항과 그렇지 않은 사항을 명확하게 합니다.
제한이 있음: 조치를 무기한 또는 진행 중 상태로 남겨놓는 대신 조치가 종료되는 시점을 알 수 있도록 각 조치를 표현
바람직하지 않은 표현 | 권장 표현 |
이 시나리오에 대한 모니터링을 조사하세요. | (작업 지정) 이 서비스에서 1%를 초과하여 오류가 반환된 모든 경우에 대해 알림을 추가하세요. |
서비스 중단을 야기한 이슈를 수정하세요. | (구체적임) 사용자 주소 서식 입력의 유효하지 않은 우편번호를 안전하게 처리하세요. |
엔지니어가 업데이트 전에 데이터베이스 스키마를 구문 분석할 수 있어야 합니다. | (작업 지정) 스키마 변경에 대해 자동화된 사전 제출 점검을 추가하세요. |