OpenVPN 로그 줄에서 us=의 의미와 변환 방법
us= 필드는 로그 타임스탬프의 마이크로초 부분이며 세션 ID가 아닙니다. 여섯 자리까지 채우고 시계를 비교하기 전에 줄 전체를 읽으세요.
OpenVPN의 텍스트 로그는 날짜, 시각 그리고 하나의 us= 값을 같은 줄에 기록하는데, 셋 중 마지막 부분을 독자들이 잘못 읽습니다. 그것은 해당 타임스탬프의 마이크로초 성분이며 영으로 채우지 않고 출력됩니다. 세션 식별자도, 사용자 이름도, 카운터도 아니며 그렇게 다루면 일 초의 일부가 자신만만한 잘못된 결론이 됩니다. 표시된 초의 일부로 변환하면 줄의 나머지는 읽을 수 있는 상태로 남습니다.
줄의 세 부분이 뜻하는 것
날짜와 정수 초가 먼저 오고, us= 가 일 초 미만의 나머지를 담습니다. 12345 값은 만 이천 삼백 사십오 마이크로초, 즉 0.012345초이므로 출력된 시각이 09:15:30일 때 그 줄은 09:15:30.012345를 뜻합니다. 카운터는 새 초마다 다시 시작하므로 뒤의 줄이 더 작은 소수를 출력해도 시계가 거꾸로 가는 것이 아닙니다. 오직 완전한 타임스탬프만 사건을 정렬합니다.
2026-11-02 08:41:07 us=4820
단위는 초의 백만분의 일이고, us=의 여섯 자리는 0.000000부터 0.999999까지 전 범위를 덮습니다. 다섯 자리는 수십 밀리초를, 여섯 자리는 거의 일 초에 이르는 수백 밀리초를 설명합니다. 변환이 일보다 큰 소수를 만들면 소수점이 옮겨졌고 계산이 틀린 것입니다. 손으로 하려면 출력된 정수를 백만으로 나누어 정수 초에 더하면 됩니다.
채우기가 함정입니다. us=42 은 마흔두 마이크로초이며, .000042 로 쓰고, .42 가 아닙니다. 변환 전에 정수를 왼쪽에서 여섯 자리까지 채우면 그 값은 더 이상 보이는 숫자의 소수 부분처럼 보이지 않습니다.
계산기 없이 줄 변환하기
출력된 초를 기준으로 삼고 us= 을 소수로 취급합니다. 09:15:30 그리고 us=12345 의 경우 소수 형식은 09:15:30.012345이고, us=900000 의 경우 09:15:30.900000입니다. 소수점 뒤의 숫자는 채워진 정수이며 결코 천으로 나눈 정수가 아닙니다. 여섯 자리 형식을 먼저 적으면 대부분의 실수를 막을 수 있습니다.
로그를 타임스탬프로 분석한다면 날짜, 정수 초, 소수를 함께 분석하세요. 밀리초를 가정하는 파서는 사건을 천 배 잘못 정렬하고도 출력은 그럴듯해 보입니다.
로그에서 이 필드가 없을 때
마이크로초 부분은 텍스트 로그 형식에 속하며 상세 타임스탬프가 켜져 있을 때만 나타납니다. OpenVPN 2.6의 타임스탬프 포매터에서는 그 출력이 켜져 있고 저장된 값이 영이 아닐 때 덧붙습니다. 따라서 us= 가 없는 로그는 시계나 빌드에 대해 아무것도 말하지 않으며, 보통 설정된 상세 수준이 너무 낮다는 뜻입니다. 시간 동기화를 탓하기 전에 설정을 확인하세요.
설정은 서버 구성에서 쉽게 확인할 수 있습니다. 아래 명령을 실행하고 반환되는 숫자를 읽으세요. 상세 타임스탬프 출력은 상세 수준 4에서 나타나므로 더 낮은 값이면 다른 결함 없이 필드가 없는 이유를 설명합니다. 같은 구성을 --verb 4 와 함께 실행하면 데몬이 그 수준으로 다시 시작되는 즉시 필드가 나타납니다.
grep -nE '^[[:space:]]*verb[[:space:]]+[0-9]' /etc/openvpn/server.conf
상세 수준을 높이면 로그에 정보가 늘어나지만 시계를 개선하지는 않습니다. 재시작 후 새 줄을 오래된 줄과 비교해 형식이 바뀌었는지 확인하고, 질문에 답이 나오면 수준을 다시 낮추세요.
여섯 자리가 증명하지 못하는 것
여섯 자리는 분해능을 나타낼 뿐 두 호스트가 시간에 동의하는지는 말해 주지 않습니다. 클라이언트와 서버가 모두 마이크로초를 출력해도 시계가 몇 초씩 어긋날 수 있습니다. 여러 기계의 사건을 상호 연관시킬 때는 시간대와 알려진 오프셋을 기록하고, 어떤 타임스탬프보다 피어나 세션을 지목하는 필드를 우선하세요. 같은 소수를 공유하는 두 줄이 반드시 같은 연결은 아닙니다.
수집기는 각 줄이 도착할 때 도장을 찍을 수 있으며, 이는 OpenVPN이 아니라 수집기에 속하는 두 번째 타임스탬프를 더합니다. 비교하기 전에 어느 쪽을 읽고 있는지 확인하고, 비교를 다시 할 수 있도록 원본 줄을 보관하세요.
새로운 us= 값은 새 클라이언트가 로그인했음을 증명하지 않고, 반복된 값은 중복 사건을 증명하지 않습니다. 피어와 연결 필드가 그 질문에 답합니다.