OPS Management
DoubleZero OPS Management 포털은 기여자들이 네트워크 전반에 걸쳐 인시던트(계획되지 않은 장애)와 유지보수(계획된 작업)를 기록하고 추적하는 곳입니다. 모든 티켓은 모든 기여자에게 공개됩니다.
포털: https://doublezero.xyz/ops-management
포털 vs Slack
OPS Management 포털과 Slack은 함께 작동합니다. 모든 인시던트와 유지보수는 티켓으로 추적되며, 포털 또는 API를 통해 접근할 수 있습니다. 각 티켓은 자동으로 적절한 Slack 채널에 알림을 보내고 모든 기여자에게 네트워크에서 일어나고 있는 상황에 대한 공유 뷰를 제공합니다. Slack은 대화가 이루어지는 곳입니다: 로그 공유, 다른 기여자와의 조율, 활성 이슈에 대한 협업이 여기서 진행됩니다.
티켓은 포털이든 API를 통해서든 생성되면 공식 기록입니다. Slack 스레드는 그렇지 않습니다: 티켓 상태를 업데이트하지 않으며 영구적으로 저장되지도 않습니다. 대화가 Slack에서 이루어지더라도 항상 티켓 상태를 최신으로 유지하세요.
포털과 Slack은 서로 다른 목적을 가지고 있습니다. 둘 다 사용하되, 적절한 용도에 맞게 사용하세요.
| 포털(또는 API) 사용 목적... | Slack 사용 목적... |
|---|---|
| 티켓 생성, 업데이트 및 종료 | 활성 이슈에 대한 대화 및 협업 |
| 상태 전환 기록 | 로그, 스크린샷 공유 또는 통화 시작 |
| 티켓 할당 또는 에스컬레이션 | 문제에 빠르게 관심 집중시키기 |
| 종료 시 근본 원인 설정 | 다른 기여자와 조율 |
온보딩
포털을 사용하기 전에 다음 단계를 한 번 완료하세요.
1. Ops Manager 키 설정
Solana 지갑 공개키를 Ops Manager 키로 등록합니다. 지원되는 지갑: Phantom, Solflare, Coinbase Wallet.
doublezero contributor update \
--ops-manager <OPS_MANAGER_PUBKEY> \
--pubkey <CONTRIBUTOR_PUBKEY>
2. 포털에서 지갑 연결
- https://doublezero.xyz/ops-management으로 이동합니다.
- Connect Your Wallet을 클릭하고 지갑을 선택합니다.
- Ops Manager 키의 소유권을 증명하기 위해 메시지에 서명합니다.
인증이 완료되면 Incident Tracking Table이 표시됩니다.
계정 설정은 Settings 메뉴(오른쪽 상단 톱니바퀴 아이콘) 뒤에 있습니다: API Key Management, User Management, Escalation Contacts. 표시되는 옵션은 역할에 따라 다릅니다.
3. API 키 생성 (선택 사항)
웹 폼 대신 프로그래밍 방식으로 접근하려면:
- Settings 메뉴(톱니바퀴 아이콘)를 열고 API Key Management를 선택합니다.
- 하나 이상의 API 키를 생성합니다.
- 이 페이지에서 API 문서를 다운로드합니다.
인시던트
인시던트는 계획되지 않은 서비스 영향 이벤트입니다.
심각도 수준
DoubleZero 네트워크에 대한 영향을 기준으로 심각도를 지정합니다. 상황이 변화함에 따라 심각도를 업데이트할 수 있습니다.
| 심각도 | 영향 | 대응 |
|---|---|---|
sev1 |
전체 장애 또는 대체 경로 없는 주요 제어/데이터 플레인 손상 | 근무 시간 외라도 즉시 모든 것을 중단하고 대응. DoubleZero Foundation에 즉시 에스컬레이션. |
sev2 |
부분적이지만 상당한 영향; 대체 경로 가능한 서비스 저하 | 긴급으로 처리. 적극적으로 조율. 지속적인 저하에 대해서는 야간 대응 필요. |
sev3 |
제한적이거나 사용자에게 보이지 않는 영향; 해결되지 않으면 에스컬레이션 가능성 | 근무 시간 중 최우선 순위. 면밀히 모니터링. 영향이 증가하지 않는 한 근무 시간 외 에스컬레이션 불필요. |
심각도 예시
Sev1 예시
- DoubleZero에서 사용자 트래픽의 10% 이상이 블랙홀되고 공용 인터넷으로의 대체 경로 없음
- 사용자 온보딩, 연결 또는 연결 해제 시도의 80% 이상 실패
- DZD의 20% 이상에서 인터페이스 오류 보고
- 컨트롤러가 DZD 에이전트에 유효하지만 잘못된 설정을 반환
Sev2 예시
- 사용자의 20% 이상이 DoubleZero 터널을 통해 트래픽을 송수신할 수 없지만 공용 인터넷으로 대체 가능
- 대체 경로 없이 DoubleZero에서 사용자 트래픽의 0–10%가 블랙홀됨
- 신규 사용자 온보딩, 연결 또는 연결 해제 시도의 20–80% 실패
- 설정 에이전트의 20% 이상이 DZD 설정 적용 실패
- DZD의 0–20%에서 인터페이스 오류 보고
- 업스트림 이슈로 인한 관측성 손실 (모니터링/알림 중단)
- 온체인 데이터 파이프라인 중단 또는 잘못된 데이터 생성
- 인터넷 지연 시간 수집 또는 제출의 20% 이상 실패
- DZD 에이전트가 컨트롤러에 접근 불가
- 컨트롤러가 DZD에 적용되지 않을 유효하지 않은 설정 반환
Sev3 예시
- 사용자의 0–20%가 DoubleZero 터널을 통해 트래픽을 송수신할 수 없지만 공용 인터넷으로 대체 가능
- DZD의 0–20%에서 인터페이스 오류 보고
- DZD의 0–20%에서 설정 에이전트 장애 발생
- 사용자 온보딩, 연결 또는 연결 해제 시도의 0–20% 실패
- 단일 데이터 제공자에 대한 인터넷 지연 시간 수집 또는 제출의 20% 이상 실패
- 모든 데이터 제공자에 대한 인터넷 지연 시간 수집 또는 제출의 0–20% 실패
- 무음 처리할 수 없는 알림 노이즈를 유발하는 버그 또는 기술 부채
- 여러 시간 동안 장치의 0–20%에 대해 DIA 중단 또는 원장 RPC 네트워킹 이슈
- 사소한 버그, 외관 오류 또는 고객 트래픽에 영향을 주지 않는 격리된 인시던트와 같은 낮은 영향의 이슈
- 서비스 중단 없이 소수의 장치에서 간헐적으로 오류 보고
인시던트 생성
Create New Record를 클릭하고 포털에서 Type = Incident를 선택하거나 API를 통해 제출합니다.
필수:
| 필드 | 설명 |
|---|---|
title |
짧은 요약 (최대 100자) |
description |
상세 설명 (최대 500자) |
severity |
sev1, sev2 또는 sev3 |
status |
생성 시 종료 상태(resolved, closed)로 설정할 수 없음 |
| Device 및/또는 Link | 최소 하나 필요. 웹 폼에서는 드롭다운에서 장치 및 링크 코드를 선택. API 사용 시에는 device_pubkey 및/또는 affected_link_pubkey로 해당 공개키를 전달. |
선택 사항:
| 필드 | 설명 |
|---|---|
reporter_name / reporter_email |
연락처 정보 |
assignee |
해결 담당자 |
internal_reference |
내부 티켓 ID (예: Jira, ServiceNow) |
start_at |
기본값은 생성 시간; 수정 가능 |
생성되면 티켓 ID, 심각도, 영향받는 장치/링크 및 기여자 이름과 함께 기여자 인시던트 Slack 채널에 알림이 게시됩니다.
인시던트 업데이트
인시던트가 진행됨에 따라 티켓 상태를 최신으로 유지하세요. 이것은 다른 기여자와 DZ가 무엇이 작업 중인지 파악하는 데 사용하는 신호입니다.
| 상태 | 설정 시점 |
|---|---|
open |
초기 상태: 이슈 보고됨, 아직 작업 시작 안 됨 |
acknowledged |
확인하고 소유권을 가짐 |
investigating |
적극적으로 진단 중: 로그 수집, 메트릭 확인 |
mitigating |
근본 원인 파악되었거나 의심됨; 수정 또는 우회 방법 적용 중 |
monitoring |
수정 적용됨; 유지되는지 확인 중 |
resolved |
이슈 해결 확인됨; 근본 원인 필수 |
closed |
완전히 완료됨; 추가 조치 불필요; 근본 원인 필수 |
open → acknowledged → investigating → mitigating → monitoring → resolved → closed
적절한 경우 상태를 건너뛸 수 있습니다. 예를 들어, 즉시 작업을 시작하는 경우 open에서 investigating으로 바로 이동할 수 있습니다. 항상 현재 상태에 가장 정확한 상태를 사용하세요.
각 상태 업데이트는 원래 Slack 알림 스레드에 답글로 게시됩니다.
인시던트 종료
인시던트를 resolved 또는 closed로 전환하려면 근본 원인을 설정해야 합니다. 이미 알고 있다면 이전 단계에서 근본 원인을 설정할 수 있으며, 종료 시 필수가 됩니다.
| 코드 | 설명 |
|---|---|
hardware |
하드웨어 수리, 교체 또는 업그레이드 (SFP, NIC, 케이블, 장치) |
software |
소프트웨어 또는 펌웨어 수정, 업데이트 또는 재시작 |
configuration |
설정 변경, 수정 또는 롤백 |
capacity |
혼잡, 용량 제한 또는 트래픽 관리 |
carrier |
회선, 파장 또는 크로스커넥트 제공업체 이슈 |
network_external |
기여자 통제 범위 밖의 외부 네트워크 이슈 |
facility |
데이터센터 인프라 이슈 (전원, 냉각) |
fiber_cut |
물리적 광섬유 손상 복구됨 |
security |
보안 인시던트 완화됨 |
human_error |
운영 실수 수정됨 |
false_positive |
조사 후 실제 이슈 발견되지 않음 |
duplicate |
다른 티켓에서 이미 추적 중 |
self_resolved |
개입 없이 이슈 자체 해결됨 |
dz_managed |
DoubleZero 관리 소프트웨어 컴포넌트(activator, controller 등)의 이슈 |
유지보수
유지보수 기록은 가용성에 영향을 줄 수 있는 계획된 시간 제한 활동입니다. 다른 기여자가 충돌하는 윈도우를 확인하고 피할 수 있도록 사전에 생성하세요.
유지보수 예약
포털에서 Create New Record > Maintenance를 클릭하거나 API를 통해 제출합니다.
필수:
| 필드 | 설명 |
|---|---|
title |
짧은 요약 (최대 100자) |
description |
상세 설명 (최대 500자) |
severity |
sev1, sev2 또는 sev3. 예상되는 사용자 영향에 맞게 설정 (아래 참고 사항 참조). |
start_at |
계획된 시작 시간 (UTC) |
end_at |
계획된 종료 시간 (UTC); start_at 이후여야 함 |
| Device 및/또는 Link | 최소 하나 필요. 웹 폼에서는 드롭다운에서 장치 및 링크 코드를 선택. API 사용 시에는 device_pubkey 및/또는 affected_link_pubkey로 해당 공개키를 전달. |
심각도는 인시던트와 동일한 방식으로 유지보수에 적용됩니다. 위의 심각도 수준을 사용하여 윈도우 동안 예상되는 사용자 영향에 맞게 설정하세요.
생성되면 티켓 ID, 영향받는 장치/링크, 계획된 윈도우 및 기여자 이름과 함께 기여자 유지보수 Slack 채널에 알림이 게시됩니다.
유지보수 상태 관리
윈도우가 진행됨에 따라 상태를 최신으로 유지하세요.
| 상태 | 설정 시점 |
|---|---|
planned |
예약됨, 아직 시작되지 않음 |
in-progress |
작업 시작됨 |
completed |
작업 성공적으로 완료됨 |
closed |
end_at 후 24시간에 자동 설정됨 |
cancelled |
실행 전 또는 실행 중 취소됨 |
planned → in-progress → completed → closed (end_at 후 24시간에 자동)
↓ ↓
└──────────┴──→ cancelled
에스컬레이션 연락처
에스컬레이션 연락처는 네트워크의 귀하 담당 부분에 문제가 있을 때 DoubleZero와 다른 기여자가 누구에게 연락해야 하는지 알려줍니다. 귀하 조직의 연락처는 직접 설정합니다. 연락처는 개인 또는 NOC와 같은 팀일 수 있습니다. 각 연락처에는 하나 이상의 연락 방법과 당직 일정이 있습니다.
Settings 메뉴(톱니바퀴 아이콘)를 열고 Escalation Contacts를 선택합니다. Ops Manager만 연락처를 추가하거나 편집할 수 있습니다.
연락처 추가
각 연락처에 대해 다음을 설정합니다:
| 필드 | 설명 |
|---|---|
| Name | 개인 또는 NOC와 같은 팀의 연락처 이름 |
| Timezone | 일정을 읽는 데 사용되는 현지 시간대 |
| Availability | 24/7 또는 연락처가 당직인 하나 이상의 주간 시간대 |
| Contact methods | 우선순위 순서로 연락처에 연락하는 하나 이상의 방법 |
지원되는 연락 방법은 이메일, 전화, Slack, Telegram, WhatsApp입니다. 순서가 중요합니다: 첫 번째 방법이 먼저 시도할 방법입니다.
가용성 및 커버리지 공백
연락처는 24시간(24/7) 이용 가능하거나 정의한 주간 시간대 동안 이용 가능합니다. 예를 들어 월요일부터 금요일, 09:00부터 17:00까지. 시간대는 연락처의 현지 시간대로 입력되고 UTC로 표시되므로 서머타임이 자동으로 처리됩니다.
커버리지 공백 뷰는 매주 조직에서 아무도 당직이 아닌 시간을 보여줍니다. 이를 사용하여 공백을 찾고 해소하세요.
교대 윈도우
한 주는 30분 단위 윈도우로 나뉩니다. 각 윈도우에 대해 연락처에 연락하는 순서를 설정할 수 있습니다. 이를 통해 각 연락처를 편집하지 않고도 당직 교대를 운영할 수 있습니다.
공개 범위
연락처를 누가 볼 수 있는지 제어합니다. DoubleZero는 항상 볼 수 있습니다. 그 외 누가 볼 수 있는지 선택합니다:
| 설정 | 연락처를 볼 수 있는 다른 사람 |
|---|---|
| DoubleZero only (기본값) | 다른 기여자 없음 |
| Everybody | 모든 기여자 |
| Some contributors | 선택한 기여자만 |
귀하 팀은 항상 귀하의 연락처를 볼 수 있습니다. 공개 범위는 조직 전체에 한 번 설정되며 모든 연락처에 적용됩니다.
사용자 관리
기본적으로 Ops Manager 키만 조직을 대신하여 활동할 수 있는 유일한 계정입니다. 팀원을 추가하여 여러 사람이 티켓을 관리할 수 있도록 할 수 있습니다.
Settings 메뉴(톱니바퀴 아이콘)를 열고 User Management를 선택합니다. Ops Manager만 팀원을 추가하거나 제거할 수 있습니다.
각 팀원에 대해 다음을 설정합니다:
| 필드 | 설명 |
|---|---|
| Name | 해당 인원의 이름 |
| Wallet pubkey | 로그인에 사용하는 Solana 지갑 |
| Access level | Read 또는 Read-write |
접근 수준:
- Read: 티켓과 에스컬레이션 연락처를 볼 수 있고 읽기 전용 API 키를 생성할 수 있습니다. 티켓을 생성, 업데이트 또는 종료할 수 없습니다.
- Read-write: 티켓을 생성, 업데이트 및 종료할 수 있는 전체 접근 권한이 있으며 모든 수준의 API 키를 생성할 수 있습니다.
각 팀원은 Ops Manager 키를 연결한 것과 동일한 방식으로 자신의 지갑으로 로그인합니다.
권한 및 에스컬레이션
기여자가 할 수 있는 것
- 자신의 장치와 링크에 대해서만 티켓을 생성하고 관리할 수 있습니다.
- 자신에게 티켓을 할당하거나 DZ/Malbeclabs에 에스컬레이션할 수 있습니다.
- 모든 기여자의 모든 티켓을 볼 수 있습니다.
- 팀원을 추가하고 접근 수준을 설정할 수 있습니다 (Ops Manager만).
- 조직의 에스컬레이션 연락처를 관리할 수 있습니다 (Ops Manager만).
DZ/Malbeclabs 관리자가 할 수 있는 것
- 모든 기여자의 장치와 링크에 대해 티켓을 생성할 수 있습니다.
- 기여자 간에 티켓을 할당하거나 재할당할 수 있습니다.
- 에스컬레이션 및 지원 요청을 처리합니다.
DZX 링크 소유권
DZX 링크는 두 개의 서로 다른 기여자의 장치를 연결합니다. A-side 기여자(링크 이름의 첫 번째 장치)가 링크를 소유하며 해당 링크에 대해 티켓을 생성할 수 있는 유일한 기여자입니다.
예시: deviceA:deviceB 링크의 경우, deviceA를 소유한 기여자가 링크를 소유합니다.
이슈가 Z-side에 있는 경우:
- A-side 기여자가 DZX 링크에 대한 티켓을 생성합니다.
- 티켓을 DZ/Malbeclabs에 할당합니다.
- DZ/Malbeclabs가 조사하고 필요한 경우 Z-side 기여자에게 재할당합니다.
이 워크플로우가 제한적임을 인지하고 있습니다. 현재 Z-side 기여자는 자신이 소유하지 않은 DZX 링크에 대해 티켓을 생성할 수 없으므로 조율이 DZ/Malbeclabs를 통해야 합니다. DZX 링크의 양쪽 모두가 독립적으로 인시던트와 유지보수를 신고할 수 있도록 이를 개선하는 작업을 진행하고 있습니다.