어디를 탐색하는지 기록하지 않고 VPN 피어 모니터링하기
가용성에는 네 개의 필드가 필요하며 캡처가 아니다. 문서화된 간격으로 핸드셰이크와 카운터를 읽고, 레이블을 안정적으로 유지하며, 보존 규칙을 정하라.
VPN 피어를 모니터링하려면 네 가지 사실이 필요하며, 그중 어느 것도 목적지가 아니다. 터널이 올라와 있는지, 마지막으로 언제 트래픽을 교환했는지, 어떤 키가 관련되어 있는지, 얼마나 이동했는지면 가용성에는 충분하다. 그 이상은 사람에 대한 기록이며, 상태 페이지를 여는 부작용이 아니라 의도적인 결정이어야 한다. 반드시 답해야 할 질문에서 시작하고, 그 질문에 답하는 가장 작은 출력을 선택하라.
도구보다 질문을 먼저 정하라
먼저 운영 질문을 적어라—이 피어는 연결되어 있는가, 트래픽을 움직이고 있는가. 그 질문에는 실시간 뷰가 필요하고, 실시간 뷰에는 보존 문제가 없다. 두 번째 질문인 지난 화요일 02:00에 피어가 연결되어 있었는가는 저장된 시계열이 필요하므로 보존 결정을 요구한다. 이 둘을 분리하는 것이 설계의 전부다—실시간 뷰는 저렴하지만 저장된 시계열은 데이터 보호 논의로 변하기 때문이다.
상태 점검도 상태 출력과 분리하라—최근 핸드셰이크는 터널이 협상했다는 것을 증명할 뿐, 그 뒤의 사설 애플리케이션이 동작한다는 것은 아니다. 따라서 카운터에서 추론하지 말고 승인된 점검으로 애플리케이션을 시험하라. 점검이 실패했는데 핸드셰이크가 최근이라면 문제는 터널 너머에 있다.
그것에 답하는 세 필드를 읽어라
WireGuard의 기본 상태 출력에는 인터페이스, 공개 키, 엔드포인트, 최근 핸드셰이크, 전송 카운터가 담긴다. 존재 여부에는 공개 키와 최근 핸드셰이크가 필요하고, 필요하면 바이트 카운터를 추가해 움직임을 보라. 엔드포인트는 존재 여부에 필요 없고, 기기가 어디서 접속하는지를 식별하므로 가장 먼저 버릴 필드다. 매뉴얼 페이지는 도구가 출력하는 각 필드를 설명하며, 한 번 읽기에 충분히 짧다:
wg show
wg show wg0 latest-handshakes
그 숫자를 불리언이 아니라 경과 시간으로 읽어라. 핸드셰이크는 프로토콜 자체의 키 재생성 간격에 상대적으로만 최신이며, 움직이지 않은 카운터는 고장 난 피어가 아니라 유휴 피어를 뜻할 수 있다. 경과 시간과 움직임을 함께 읽도록 둘 다 같은 화면에 두라.
설명할 수 있는 간격을 고르라
모든 상태 샘플은 기록이므로 간격은 모니터링이라는 레이블을 붙인 보존 결정이다. 십 초 샘플은 세밀한 정보를 주지만 저장 행을 늘리고, 일 분 샘플은 보통 비용의 육분의 일로 가용성에 충분하다. 간격은 도구가 할 수 있는 일이 아니라 약속한 응답 시간에서 고르라. 그다음 숫자를 대시보드 옆에 적어라.
OpenVPN의 경우 상태 기능이 설정된 간격으로 파일을 쓴다. 서버 구성에서는 이렇게 보인다 status /var/log/openvpn-status.log 60 그리고 끝의 숫자는 재작성 사이의 초이며, 파일은 덧붙이지 않고 교체된다. 이 차이는 중요하다—교체된 파일에는 이력이 없지만, 덧붙이는 수집기는 이력을 만든다.
수집기도 간격을 지키는지 확인하라. 매초 샘플을 떠서 분당 한 행만 저장하는 도구도 여전히 매초 읽는다.
레이블을 안정적으로, 매핑을 제한적으로 유지하라
공개 키는 이름이 붙지 않아도 기기 관계를 식별하므로, 키를 불투명한 식별자가 아니라 개인정보로 취급하라. 피어에는 재연결을 견디는 안정적인 내부 식별자로 레이블을 붙이고, 식별자에서 사람으로의 매핑은 제한된 장소에 두라. 시계열을 쓰는 대시보드는 VPN이 자체 파일을 두지 않더라도 저장된 기록이다. 대시보드가 유일한 저장소라면 보존 규칙은 바로 대시보드에 적용된다.
내보내기 경로도 검토하라—복사된 CSV는 그것을 만든 시스템보다 오래 살아남는다. 집계된 가용성은 보고서에 충분한 경우가 많고, 창 안에 핸드셰이크가 있는 피어의 비율은 누가 언제 연결되었는지 나열하지 않고도 운영 질문에 답한다.
무엇을 수집하고 무엇을 수집하지 않는지 문서화하라
수집 설명을 평이한 언어로 적어라—어떤 필드를, 어느 인터페이스에서, 어떤 간격으로, 어디에 저장하고, 얼마나 보관하며, 누가 읽을 수 있는지. 사고 중에 아무도 열지 않는 정책 저장소가 아니라 런북 옆에 두라. 설명은 모니터링이 볼 수 없는 것도 말해야 한다—탐색 데이터가 없다는 것이 기록이 없다는 뜻이라고 누군가 가정하는 것을 바로 그것이 막는다.
모니터링이 바뀔 때마다 보존 창을 검토하라—새 필드는 보관되는 것을 조용히 늘린다. 그런 다음 설명대로 삭제하고, 삭제가 실제로 일어났는지 확인하라.