로그 설계는 어떤 프로세스가 기록을 만들었는지, 그 기록이 어디에 남는지, 얼마나 오래 살아남는지에 대한 세 가지 답입니다. OpenVPN은 파일에 쓰거나, 메시지를 시스템 로거에 넘기거나, 서비스 관리자가 수집하는 것에 맡길 수 있으며, 이들은 하나의 흐름을 세 번 복사한 것이 아닙니다. 각 선택은 로테이션의 주인, 결과를 읽을 수 있는 사용자, 시작 중에 벌어지는 일을 바꿉니다. 나중에는 설정된 것을 물려받을 뿐이므로 사고가 나기 전에 답을 정하십시오.

데몬이 지시문으로 실제로 하는 일

지시문은 추상 개념이 아니며, 각각이 프로세스가 메시지를 어디에 쓰는지 결정합니다. log /path는 그 파일을 열고, log-append /path는 덧붙이기 위해 열며, syslog는 소켓을 통해 로컬 시스템 로거에 메시지를 넘깁니다. 셋 다 쓰지 않으면 출력은 표준 출력으로 가고, 다음에 무슨 일이 일어나는지는 서비스 관리자가 결정합니다. 데몬이 설정을 무시한다고 결론내리기 전에 실제 유닛과 프로필을 함께 읽으십시오.

마지막 경우는 패키지 설치에서 흔하며, 두 관리자가 로그 위치에 대해 의견이 다른 이유를 설명합니다. 한 사람은 유닛의 저널을 읽고, 다른 사람은 데몬이 한 번도 쓰지 않은 파일을 읽습니다.

디스크의 파일이 아니라 실행 중인 설정을 확인하십시오. drop-in 유닛 재정의나 환경 파일은 지금 읽고 있는 프로필을 건드리지 않고 유효 지시문을 바꿀 수 있습니다.

log는 자르고, log-append는 자르지 않는다

log는 지시문이 적용될 때 기존 파일을 자르므로 재시작하면 그 이전의 증거가 지워집니다. log-append는 있는 내용을 유지하고 덧붙입니다. 어느 옵션도 로테이션을 하지 않고, 나중에 스스로 파일을 다시 열지도 않으므로 로테이션에는 협력이 필요합니다.

로테이션이 파일 이름을 바꾸는 동안 데몬이 계속 옛 디스크립터에 쓴다면, 새 파일은 비어 있고 디스크 사용량은 이름이 바뀐 파일에서 계속 늘어납니다. 프로세스에 다시 열라는 신호를 보내거나, 복사 후 자르기 방식으로 로테이션하고 그 복사 구간을 받아들이십시오.

디렉터리, 소유권, 권한은 설계의 일부입니다. 데몬은 시작 후 비특권 사용자로 실행될 수 있으며, 설치 시 root가 만든 디렉터리는 그때 쓰기 가능하지 않을 수 있습니다. 사고 중에 권한을 고치는 대신 패키징이나 배포 과정에서 준비하십시오.

서비스 관리자는 두 번째 사본을 유지한다

systemd는 기본으로 표준 출력과 표준 오류를 수집하므로, 명시적 리다이렉션이 없는 유닛에도 이미 로그가 있습니다. 파일 지시문을 더하면 보존 기간과 읽는 사람, 타임스탬프가 서로 다른 두 흐름이 생깁니다.

그것이 자동으로 틀린 것은 아니지만 결정이어야 합니다. 설정된 파일이 존재하기 전의 실패는 다른 어디에도 나타나지 않으므로 시작 기록은 저널에 남기십시오. 그다음 정상 상태 이벤트에 대해서는 파일을 권위로 삼고 런북에 그렇게 적으십시오. 권위 있는 흐름이 둘이면 모든 질문에 답이 둘입니다.

일부러 실패하는 테스트로 그 선택을 확인하십시오. 읽을 수 없는 인증서로 데몬을 시작하고 어느 흐름이 오류를 기록하는지 보십시오.

상세함은 쓸 수 있는 세부와 다르다

verb 수준을 높이면 줄이 늘고, 어느 지점을 지나면 아무도 읽지 않는 줄이 늘어납니다. 레벨 3은 대부분의 배포에 합리적인 정상 상태이고, 레벨 4 이상은 알려진 질문이 있는 제한된 조사에 맞습니다. 반복 억제는 노이즈를 줄이지만 사건이 얼마나 자주 다시 일어나는지를 감춰서는 안 됩니다. 감당할 수 있는 수준을 정하고, 끝이 있는 이름 붙은 조사에만 올리십시오.

기록에 인스턴스 식별자와 타임스탬프를 남기십시오. 파일에 몇 달 동안 덧붙여졌고 인스턴스 이름이 빠져 있으면, 재연결은 첫 연결과 똑같이 보입니다.

그 파일에 또 무엇이 들어가는지 주의하십시오. 리다이렉션된 출력에는 호출된 스크립트의 텍스트가 들어갈 수 있고, 자기 환경을 그대로 출력하는 도우미는 자격 증명과 키 경로를 읽을 수 있는 로그에 남깁니다. 데몬 자체가 민감한 것을 출력하지 않더라도 로그 접근을 보안 결정으로 다루십시오.

로테이션, 보존, 그리고 다시 읽게 하는 신호

보존 기간은 디스크를 소유한 사람과 정하고, 볼륨이 대신 결정하기 전에 설정하십시오. 다시 읽기 신호는 로그 유지보수 명령이 아니며, 잘못된 신호를 보내면 터널이 재시작되고 모든 사용자가 연결이 끊깁니다. 다시 열기 절차를 로테이션 규칙 옆에 적어 두어 둘이 어긋나지 않게 하십시오.

결과는 권위 있는 흐름이 하나 있고, 각 사건이 수명 주기 어딘가에 놓이며, 호스트의 모든 비밀 포함 파일을 모으지 않고도 기록을 얻을 수 있는, 운영자가 설명할 수 있는 서비스여야 합니다. 그 설명이 설계의 인수 테스트이며, 다음 사고 전에 확인하는 비용은 낮습니다.

관련 글