02:00에 인수한 담당자는 문서가 설계만 설명하고 무엇을 실행해야 하는지는 한 번도 말하지 않았기 때문에 서비스가 건강한지 알 수 없었다. 파일을 다른 사람에게 넘기고 방을 떠나는 것이 의미 있는 유일한 시험이다. 작은 VPN 메모 대부분은 두 번째 페이지에서 이 시험에 떨어진다. 아래 형태는 그 시험을 견디며, 어느 것도 길 필요가 없다.

지친 사람이 훑어볼 수 있는 지도부터 시작한다

급할 때 누군가 찾아봐야 할 것, 곧 클라이언트가 접속하는 이름, 데몬이 듣는 포트, 배포하는 주소 풀, 클라이언트 이름이 해석되는 방식, 터널 뒤에서 도달해야 할 네트워크를 적는다. 실제로 돌리는 빌드 번호를 더하고 움직이는 부분마다 그것을 소유한 컴포넌트를 적는데, 라우트와 패킷 필터와 클라이언트 프로파일이 흔히 세 곳에서 따로 구성되기 때문이다. 바깥 의존성, 곧 호스팅 계정, 상향 링크, ID 공급자, 먼 쪽 끝의 사설 네트워크도 적는다. 표나 손으로 그린 도면이 문단보다 이것을 잘 전달하는데, 읽는 사람은 읽기보다 훑고 있기 때문이다.

다음으로 긴급 변경을 승인할 수 있는 사람을, 터널이 떠 있는지에 기대지 않는 연락 경로와 함께 적는다. 대안 없는 에스컬레이션 경로는 그것이 필요한 바로 그 사고에서 막다른 길이 된다. 이름 둘과 전화번호 하나면 충분하며, 이 지도는 직원 명부가 아니다.

모든 점검에는 건강하다고 볼 답이 필요하다

서비스마다 명령과 그것이 성공했다는 뜻의 줄을 나란히 두어, 읽는 사람이 급할 때 한쪽에서 다른 쪽을 이끌어 내지 않아도 되게 한다. 프로세스 상태와 끝에서 끝까지의 도달성은 다른 계층에 있는데, 하나는 데몬이 설정을 받아들였음을, 다른 하나는 클라이언트가 터널이 주는 것을 쓸 수 있음을 보여 준다. 두 줄을 모두 적고 각각이 어떤 고장을 잡는지 밝혀야 하는데, 결과를 밝히지 않은 점검은 출력이 괜찮아 보이는지에 대한 논쟁이 되기 때문이다.

systemctl status openvpn-server@lab
ss -lntu | grep 1194

둘 다 실행하고, 순서가 아니라 별개의 증거로 다룬다. 초록 유닛이 아무도 쓸 수 없는 터널 옆에 있을 수 있고, 반대는 리스너가 끊긴 라우트에서 살아남을 때 일어난다. 각 줄이 관찰하는 계층을 밝히면, 서로 어긋날 때 어느 쪽을 믿어야 하는지 읽는 사람이 알게 된다.

세 가지 고장이 대부분의 밤을 덮는다

끝점에 닿지 않음, ID 거부, 쓸모 있는 트래픽 없는 연결, 이 셋이 누군가를 깨우는 거의 모든 일을 설명한다. 각각에 대해 처음 두 점검과 에스컬레이션할 사람을 적어, 02:00에 누군가 진단 순서를 지어내지 않아도 되게 한다. 닿지 않는 경우는 보통 경로나 리스너를, ID 거부는 인증서나 자격 증명 저장소나 시계를, 빈 연결은 라우트나 전달이나 이름 해석을 가리킨다. 이 세 갈래는 서로 다른 로그를 읽으므로, 로그를 열기 전에 갈래를 골라야 한다.

이 호스트에서 실행해 보지 않은 명령을 붙여 넣는 대신 상류 문서를 링크한다. 다른 환경에서 복사한 검증되지 않은 명령은 권위 있어 보이면서 조용히 실패하기 때문에 참조보다 나쁘다.

변경은 문단이 아니라 순서로 쓴다

어떤 변경이든 돌아갈 수 있는 체크포인트, 성공을 확인하는 검사, 롤백을 일으키는 조건을 이 순서로 기록한다. 터널을 지나지 않는 돌아갈 길을 넣어야 하는데, 지금 하는 변경이 바로 그것을 닫을 수 있기 때문이다. 오래된 스냅숏이 아니라 현재의 폐기가 어떻게 복원되는지 적어야 하는데, 오래된 목록은 그날 아침 은퇴시킨 자격 증명을 조용히 다시 받아들이기 때문이다. 번호가 붙은 명령형 단계는 압박을 견디고, 산문은 해석으로 변한다.

그 돌아갈 길은 필요해지기 전에, 변경이 의미 있을 만큼 클 때마다 연습해 둔다. 기억에서 쓴 롤백은 날짜가 붙은 추측이다.

자격 증명은 다른 곳에 산다

파일에 어떤 자료를 인용하는 대신 암호 관리자, 금고, 봉인된 봉투를 가리키고 누가 열 수 있는지 적는다. 개인 키, 일회용 복구 코드, 비밀을 품은 프로파일은 보호된 저장소에 속하며, 페이지는 권한 있는 담당자가 02:00에 그것에 어떻게 닿는지 설명해야 한다. 살아 있는 비밀을 예로 쓰면 안 되는데, 예는 티켓과 채팅 스레드에 붙여 넣어지기 때문이다. 참조와 권한 목록, 그것이 문서에 필요한 전부다.

실제 변경이나 복구 훈련 뒤에 파일을 검토하고, 더 이상 없는 경로를 지우고, 다음 유지보수 결정이 누구 일인지 적는다. 마지막에 날짜, 무엇이 바뀌었는지, 누가 검증했는지의 세 칸짜리 변경 기록을 둔다. 그 페이지가 나머지가 최신인지 다음 읽는 사람에게 알려 주며, systemd의 systemctl 문서는 어차피 어긋날 서비스 명령을 바꿔 쓴 것보다 나은 링크다.

관련 글