로그
개요
DRX의 로그는 동일한 로그를 다음의 두 경로로 출력한다.
- 표준 출력
- 로그 파일
표준 출력의 경우 서비스 상태로 동작시에는 출력되지 않고, 파일 출력의 경우는 메인 로그와 리소스 로그로 분산 저장된다.
파일 | 저장 위치 | 내용 |
---|---|---|
메인 로그 파일 | {DRX 설치 경로}/logs/main.log | DRX 자체 동작. 리소스별 동작 내용 제외 |
리소스별 로그 파일 | {DRX 설치 경로}/logs/리소스명/리소스명.log | 리소스의 동작 내용 |
각각의 파일은 설정된 크기에 도달하면 파일을 보관 처리하고 새로 생성한다.
각각의 파일은 파일 크기 제한 설정값에 따라 날짜와 시간이 포함된 파일 파일로 분기된다. (예: main_2018-11-22_1432.log)
로그 조회
서비스로 동작중인 DRX 로그를 실시간으로 출력하기 위해 다음과 같은 형태의 명령이 제공된다.
drx-ctl log {options} [resource or all]
지원되는 옵션:
옵션 | 단축옵션 | 설명 |
---|---|---|
--include-main | -m | 메인 로그를 출력한다. 이 옵션을 지정하지 않으면 리소스별 로그만 출력된다. |
--lines {값} | -n {값} | 최초 시작시 가장 최근의 로그에서 지정한 라인 수 만큼 출력한다. |
이 명령을 실행하면 지속적으로 로그 파일의 갱신 내용을 출력하고, Ctrl-C를 통해 종료할 수 있다.
설정
설정 파일(drx.conf)에서 설정 가능한 로그 관련 항목은 다음과 같다.
항목 | 값 | 범위 | 설명 |
---|---|---|---|
loglevel-stdout | 로그 레벨 | trace, debug, info, warning, error, critical, off | 표준 출력되는 로그의 레벨을 지정한다. |
loglevel-file | 로그 레벨 | trace, debug, info, warning, error, critical, off | 파일로 출력되는 로그의 레벨을 지정한다. |
logfile-max-size | 파일 크기 | 용량 단위 (예: 10MB) | 로그 파일이 지정한 용량에 도달하면 현재 로그 파일을 보관하고 새로 생성한다. |
logfile-max-count | 파일 개수 | 숫자 | 현재 로그 파일과 보관된 로그 파일의 최대 개수. |
로그 레벨의 경우는 drx-ctl을 통해 실시간으로 변경할 수 있다.
drx-ctl set console-loglevel [level]
drx-ctl set file-loglevel [level]
단, 서비스 모드로 실행중인 DRX의 표준 출력 레벨은 조절할 수 없다.
출력 형식
레벨/날짜 시간 쓰레드 로거:태그] 내용
항목별 상세
항목 | 형식 | 예시 | 설명 |
---|---|---|---|
로그 레벨/날짜 | {레벨}{날짜} | I1004 | 로그 레벨과 날짜를 붙여서 출력한다. |
시간 | 시:분:초.마이크로초 | 16:44:13.790530 | - |
쓰레드 | t{쓰레드ID} | t3056 | 해당 로그가 생성된 쓰레드 ID |
로거 | 로거 이름 | main | 로그의 카테고리를 나누기 위한 로거명 |
태그 | 태그명 | license c-:o | 로거의 하위 범위를 나타내거나 채널의 상세 정보를 나타내는 역할 |
로그 레벨
약어 | 로그 레벨 | 범위 | 예시 |
---|---|---|---|
T | trace | 아주 자세한 동작 단계별 로그 | 함수 수준의 실행 단계 출력, 객체의 생성/파괴 등 |
D | debug | 문제가 발생하지 않으면 확인할 필요가 없는 수준의 내용 | 내부적으로 사용되는 값의 변화, 통신 내용 등 |
I | info | 상태 변화나 동작에 관한 일반적인 내용 | 접속 이벤트, 채널 상태 변화 등 |
W | warning | 의도하지 않은 문제가 발생하였지만 동작을 다시 시작하거나 지속하는데 문제가 없는 상황 | 타임아웃, 연결 실패 등 |
E | error | 의도하지 않은 문제가 발생하여 해당 동작을 지속할 수 없는 상황 | 잘못된 프로토콜 헤더, 라이선스 오류 등 |
C | critical | 프로그램의 실행을 지속할 수 없는 심각한 오류 | 예외가 발생하여 프로그램을 종료할 때 |
로그 목록
trace와 debug 레벨의 경우에는 개발 과정에서 수시로 변화할 수 있으므로, 이 문서에서는 info~critical 까지의 레벨에 대해서만 정리한다.
main
태그 | 레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
---|---|---|---|---|---|---|
| info | Compiled at {날짜} {시간} | DRX가 컴파일된 시간 | Oct 4 2018 09:04:38 | drx.cpp | |
info | System Locale: {locale} | 현재 시스템 로케일 값 | en_US.windows-1252 | drx.cpp | ||
info | DRX path: {DRX 설치경로} | DRX가 설치된 경로 | C:\Program Files\DRX | 환경변수 'DRX_PATH'에 정의된 값. | drx.cpp | |
info | EXE path: {실행파일경로} | 현재 실행한 DRX가 위치한 경로 | C:\Program Files\DRX\bin | drx.cpp | ||
info | Starting in foreground mode | Foreground 모드로 실행 | - | 설정을 모두 읽어 프로그램 초기화가 완료된 상태. | drx.cpp | |
info | Starting in daemonize mode | Daemonize 모드로 실행 | - | 설정을 모두 읽어 프로그램 초기화가 완료된 상태. | drx.cpp | |
error | Initialization failed | 초기화 실패 | - | 환경 설정을 읽는데 실패했다. | drx.cpp | |
warning | Environment variable 'DRX_PATH' is not exists | 환경변수 DRX_PATH가 설정되지 않음 | instance.cpp | |||
info | Closing drx | DRX 종료 중 | - | DRX를 종료하는 과정에서의 마지막 로그. | core.cpp | |
error | System error at quit. ({오류번호}: {오류내용}) | DRX 종료 중에 시스템 오류 발생 | - | DRX 종료 과정에서 오류가 발생함. | core.cpp | |
info | Read resources configuration success | 리소스별 세션 정보를 읽는데 성공함 | - | BSR 환경 설정으로부터 리소스별 설정을 읽음. | core.cpp | |
warning | Read resources configuration failed | 리소스별 세션 정보를 읽는데 실패함 | - | 리소스가 없을 경우 발생할 수 있다. | core.cpp | |
info | License is available | 정상적인 라이선스로 확인됨 | - | core.cpp | ||
error | License is not available | 라이선스를 사용할 수 없음 | - | 프로그램을 종료한다. | core.cpp | |
info | Resource create complete | 모든 리소스 생성 완료 | - | 설정된 리소스를 모두 생성함. IPC 서비스를 사용할 수 있다. | core.cpp | |
info | Create resource [리소스명] | 리소스 생성 시작 | 해당 리소스의 생성을 시작함. | drx_manager.cpp | ||
error | Resource name [리소스명] is already exists | 같은 리소스가 이미 존재함 | 리소스 설정이 잘못되어 동일 이름의 리소스가 두 개 이상 존재하거나, IPC를 통해 이미 존재하는 리소스를 다시 추가한 경우. | drx_manager.cpp | ||
error | Failed to create resource [리소스명]. {오류내용} | 리소스 생성에 실패함 | 리소스 생성 도중에 오류가 발생함. 프로그램을 종료한다. | drx_manager.cpp | ||
info | Resource [리소스명] deleted | 리소스가 삭제됨 | IPC를 통해 리소스를 삭제한 경우. | drx_manager.cpp | ||
info | IPC service started | IPC 서비스가 시작됨 | - | IPC 서버가 생성됨. | drx_manager.cpp | |
error | Failed to start IPC service | IPC 서비스 시작에 실패함 | - | 메모리 부족 이외에는 발생 가능성이 거의 없다. | drx_manager.cpp | |
error | System error while stopping. ({오류번호}: {오류내용}) | 리소스, IPC, 패킷 처리 중단중 오류 발생 | 프로그램 종료 과정중 오류가 발생함. | drx_manager.cpp | ||
license | info | Verify license is available | 라이선스 확인 시작 | - | 라이선스 확인 과정이 시작됨. | drx_manager.cpp |
info | License applied | 라이선스가 적용됨 | - | set license 명령으로 라이선스를 적용하면 출력됨. | drx_manager.cpp | |
error | Failed to get drx path | DRX 설치 경로를 얻는데 실패함 | - | 환경변수 'DRX_PATH'가 없는 경우일 수 있다. | drx_manager.cpp | |
info | Checking license for [라이선스파일] | 라이선스 파일의 확인 시작 | C:\Program Files\DRX\drx.lic | 해당 경로의 라이선스 파일을 확인한다. | drx_manager.cpp | |
error | Failed to initializing license system. {오류내용} | 라이선스 초기화에 실패함 | 라이선스를 읽는데 실패함. 오류 내용은 RLM에서 출력된 내용이다. | drx_manager.cpp | ||
error | License file not found at [라이선스파일] | 라이선스 파일을 찾지 못함 | 지정한 경로에 파일이 존재하지 않음. set license 명령사용시 출력됨. | drx_manager.cpp | ||
error | Invalid License {제품명}({오류번호}) | 잘못된 라이선스 | drx(-40) | 라이선스가 잘못되었거나 만료됨. 오류번호는 RLM의 오류번호이다. | drx_manager.cpp | |
error | License Expired {제품명} | 라이선스 기간초과 | drx | 기간이 초과되어 사용할 수 없다. 라이선스 교체 필요. | drx_manager.cpp | |
info | License Status: {라이선스상태} | 정상적인 라이선스로 인식됨 | Permanent | drx_manager.cpp | ||
plugins | info | All plugin loaded | 모든 플러그인 적재 과정 완료 | plugin_manager.cpp | ||
critical | Failed to load crypto {플러그인}. {오류내용} | 암호화 플러그인 적재 실패 | 프로그램을 종료한다. | plugin_manager.cpp | ||
info | Crypto plugins loaded: {플러그인 목록} Crypto algorithms: {사용가능한 알고리즘 목록} | 암호화 플러그인 적재 완료 | OPENSSL PLAIN, AES128(OPENSSL) | plugin_manager.cpp | ||
critical | Failed to load compressor {플러그인}. {오류내용} | 압축 플러그인 적재 실패 | 프로그램을 종료한다. | plugin_manager.cpp | ||
info | Compressor plugins loaded: {플러그인 목록} Compressor algorithms: {사용가능한 알고리즘 목록} | 압축 플러그인 적재 완료 | ZLIB, LZ4 PLAIN, GZIP(ZLIB), LZ4(LZ4) | plugin_manager.cpp | ||
resource | info | Loading language: [파일명] | 언어팩 파일 적재 시작 | C:\Program Files\DRX\lang\english.ini | drx.conf의 lang 항목. | lang.cpp |
warning | Language file [파일명] not found | 언어팩 파일을 찾을 수 없음 | C:\Program Files\DRX\lang\english.ini | 실행에는 문제가 없다. | lang.cpp |
config
태그 | 레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
---|---|---|---|---|---|---|
info | Configuration loaded. [파일명] | 설정 파일을 읽는데 성공함. 이 이후에 설정을 적용한다. | instance.cpp | |||
error | Failed to load [파일명]. {오류내용} | 설정 파일을 읽는데 실패함. 프로그램을 종료한다. | [/opt/DRX/drx.conf]. /opt/DRX/drx.conf: cannot open file | instance.cpp | ||
info | Configuration file is not exists. [파일명] | 설정 파일이 존재하지 않는다. | 기본설정으로 동작한다. | instance.cpp | ||
error | Failed to get drbd configuration: {오류내용} | DRBD 설정을 읽는데 실패함. | Can't get drbd configuration. (exit_code: 10) C:\\Program Files\\DRBD\\etc\\drbd.conf:1: Parse error: 'global | common | resource | skip | include' expected, but got '∩' | config.h | ||
info | DRBD configuration output: {명령 내용} | drbdadm proxy-up all -d 명령의 출력 내용. | 이 내용을 통해 리소스가 생성된다. | config.h | ||
info | DRBD '{리소스}' configuration update DRBD configuration tokens: {설정 내용} | 리소스의 설정을 갱신한다. | adjust 명령시 수행된다. | config.h | ||
global | warning | Failed to parse connection timeout: {입력값} ({오류내용}) | 연결 타임아웃 시간이 잘못 지정됨. | drx.conf의 connect-timeout 항목 | config.h | |
warning | Unknown console log level value: {입력값} | 콘솔 로그 레벨이 잘못 지정됨. | drx.conf의 loglevel-stdout 항목 | config.h | ||
warning | Unknown file log level value: {입력값} | 파일 로그 레벨이 잘못 지정됨. | drx.conf의 loglevel-file 항목 | config.h | ||
warning | Failed to parse log file max size: {입력값} | 로그 파일당 최대 용량이 잘못 지정됨. | drx.conf의 logfile-max-size 항목 | config.h | ||
warning | Failed to parse log file max count: {입력값} ({오류내용}) | 로그 파일 최대 개수가 잘못 지정됨. | drx.conf의 logfile-max-count 항목 | config.h | ||
warning | Unknown performance log value: {입력값} | 성능 로그 설정이 잘못 지정됨. | drx.conf의 performance-log 항목 | config.h | ||
warning | Failed to parse process thread count: {입력값} ({오류내용}) | 패킷 처리 쓰레드 개수가 잘못 지정됨. | drx.conf의 process-thread-count 항목 | config.h | ||
warning | Unknown ip verification value: {입력값} | IP 확인 기능의 값이 잘못 지정됨. | drx.conf의 ip-verification 항목 | config.h | ||
warning | Failed to parse init timeout: {} ({}) | 초기화 패킷 교환 타임아웃 값이 잘못 지정됨. | drx.conf의 init-timeout 항목 | config.h | ||
info | Set base dir: {경로} | DRX 베이스 경로가 지정됨. | /opt/DRX | drx.conf의 base-dir 항목 | config.h | |
info | Set DRBD path: {경로} | DRBD 환경설정의 경로가 지정됨. | /etc/drbd.d/drbd.conf | drx.conf의 drbd-conf 항목 | config.h | |
info | Set connection timeout: {시간(초)} | 연결 타임아웃 시간이 지정됨. | 10 | drx.conf의 connect-timeout 항목 | config.h | |
info | Set init timeout: {시간(초)} | 초기화 패킷 교환 타임아웃 값이 지정됨. | 10 | drx.conf의 init-timeout 항목 | config.h | |
info | Set console log level: {로그 레벨} | 표준 출력의 로그 레벨이 지정됨. | info | drx.conf의 loglevel-stdout 항목 | config.h | |
info | Set file log level: {로그 레벨} | 파일 로그의 로그 레벨이 지정됨. | info | drx.conf의 loglevel-file 항목 | config.h | |
info | Set log file max size: {파일 크기} | 로그 파일당 최대 용량이 지정됨. | 10M | drx.conf의 logfile-max-size 항목 | config.h | |
info | Set log file max count: {파일 개수} | 로그 파일 최대 개수가 지정됨. | 10 | drx.conf의 logfile-max-count 항목 | config.h | |
info | Set performance log: {on/off} | 성능 로그 설정이 지정됨. | off | drx.conf의 performance-log 항목 | config.h | |
info | Set process thread count: {쓰레드 개수} | 패킷 처리 쓰레드 개수가 지정됨. | 8 | drx.conf의 process-thread-count 항목 | config.h | |
info | Set IP verification: {on/off} | 소켓 통신시 IP 확인 기능 설정이 지정됨. | on | drx.conf의 ip-verification 항목 | config.h |
packet_process_pool
레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
---|---|---|---|---|---|
info | Started (concurrency: {쓰레드 수}) | 패킷 처리 쓰레드가 시작됨 | auto -> 8 | drx.conf의 process-thread-count 항목. 멀티쓰레드를 사용하지 않는 설정인 경우 이 로그가 출력되지 않는다. | packet_process_pool.cpp |
info | Resized to {쓰레드 수} | 쓰레드 수가 변경됨 | set process-thread-count 사용기 출력된다. | packet_process_pool.cpp | |
info | Stopped | 패킷 처리 쓰레드가 중지됨 | - | 프로그램 종료중에 출력된다. | packet_process_pool.cpp |
error | Load compressor - inconsistency between threads | 쓰레드별 압축 플러그인 적재중 오�� 발생 | - | 하나의 플러그인을 쓰레드별로 적재 또는 해제중에 쓰레드별 차이가 발생함. 이 오류가 발생하면 알고리즘 상에 문제가 있는 것으로 판단된다. | packet_process_pool.cpp |
error | Unload compressor - inconsistency between threads | 쓰레드별 압축 플러그인 해제중 오류 발생 | - | packet_process_pool.cpp | |
error | Load decompressor - inconsistency between threads | 쓰레드별 압축해제 플러그인 적재중 오류 발생 | - | packet_process_pool.cpp | |
error | Unload decompressor - inconsistency between threads | 쓰레드별 압축해제 플러그인 해제중 오류 발생 | - | packet_process_pool.cpp | |
error | Load encrypto - inconsistency between threads | 쓰레드별 암호화 플러그인 적재중 오류 발생 | - | packet_process_pool.cpp | |
error | Unload encrypto - inconsistency between threads | 쓰레드별 암호화 플러그인 해제중 오류 발생 | - | packet_process_pool.cpp | |
error | Load decrypto - inconsistency between threads | 쓰레드별 복호화 플러그인 적재중 오류 발생 | - | packet_process_pool.cpp | |
error | Unload decrypto - inconsistency between threads | 쓰레드별 복호화 플러그인 해재중 오류 발생 | - | packet_process_pool.cpp | |
error | Compressor ({플러그인}) is not available | 해당 압축 플러그인을 사용할 수 없음 | 해당 플러그인이 적재되지 않은 경우 | packet_processor.cpp | |
error | Compressor algorithm ({알고리즘}) is not available | 해당 압축 알고리즘을 사용할 수 없음 | 해당 알고리즘의 플러그인이 적재되지 않은 경우 | packet_processor.cpp | |
error | Crypto ({플러그인}) is not available | 해당 암호화 플러그인을 사용할 수 없음 | 해당 플러그인이 적재되지 않은 경우 | packet_processor.cpp | |
error | Failed to initialize {플러그인} encrypto stream. ({오류 내용}) | 암호화 플러그인 스트림 초기화 실패 | 쓰레드별 암호화 플러그인의 스트림 초기화중 오류가 발생함. 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp | |
error | Crypto algorithm ({알고리즘}) is not available | 해당 암호화 알고리즘을 사용할 수 없음 | 해당 알고리즘의 플러그인이 적재되지 않은 경우 | packet_processor.cpp | |
error | Failed to initialize {플러그인} decrypto stream. ({오류 내용}) | 복호화 플러그인 스트림 초기화 실패 | 쓰레드별 복호화 플러그인의 스트림 초기화중 오류가 발생함. 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp | |
error | Compress stream error. ({오류 번호}) | 압축 실패 | 데이터 압축 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp | |
error | Decompress stream error. ({오류 번호}) | 압축 해제 실패 | 데이터 압축 해제 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp | |
error | Encrypt stream error. ({오류 번호}) | 암호화 실패 | 데이터 암호화 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp | |
error | Decrypt stream error. ({오류 번호}) | 복호화 실패 | 데이터 복호화 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다. | packet_processor.cpp |
리소스별 로거
리소스별 로거는 리소스의 이름이 로거의 이름으로 할당된다.
각각의 리소스는 두개의 채널로 이루어져 있으므로 다음과 같은 태그를 지닌다.
{연결 방향}{채널 유형}
또한, 각각의 채널은 두개의 프록시 연결로 구성되어 있으므로 각 연결의 세부 태그는 다음과 같다.
{연결 방향}{채널 유형}:{프록시 위치}
태그 항목별 상세
각각의 항목
항목 | 값 | 설명 |
---|---|---|
연결 방향 | a | Acceptor. 각 리소스의 첫번째 채널. 상대의 연결을 승인하는 채널. (Local DRBD → Local DRX ← Remote DRX) |
c | Connector. 각 리소스의 두번째 채널. 상대측으로 연결하는 채널. (Local DRBD ← Local DRX → Remote DRX) | |
채널 유형 | - | 미정. DRBD와 연결된 후 정해진다. |
m | meta | |
d | data | |
프록시 위치 | i | Inside. DRBD와의 접속. |
o | Outside. DRX와의 접속. |
리소스명이 'r0'라고 가정할 경우, 다음과 같은 구성의 로거가 존재하게 된다.
리소스 | 채널 | 프록시 | 태그 |
---|---|---|---|
r0 | - | - | r0 |
Acceptor | - | r0:a | |
Inside | r0:a-:i | ||
Outside | r0:a-:o | ||
Connector | - | r0:c | |
Inside | r0:c-:i | ||
Outside | r0:c-:o |
로그 목록
태그 | 레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
---|---|---|---|---|---|---|
info | Start resource Inside local({IP:Port}) <-> drbd({IP:Port}) Outside local({IP:Port}) <-> remote({IP:Port}) | 리소스 동작 시작 | drx_manager.cpp | |||
error | Crypto ({암호화 플러그인}) is not available | 지정한 암호화 플러그인을 사용할 수 없다 | 리소스에 지정된 플러그인이 적재되지 않은 경우 | drx_packet.cpp | ||
error | Encrypto plugin ({암호화 플러그인}) initialization failed. (error_id: {오류번호}) | 암호화 플러그인의 암호화 인스턴스 초기화 실패 | 해당 플러그인 파일에 문제가 있을 가능성이 높다 | drx_packet.cpp | ||
error | Decrypto plugin ({암호화 플러그인}) initialization failed. (error_id: {오류번호}) | 암호화 플러그인의 복호화 인스턴스 초기화 실패 | 해당 플러그인 파일에 문제가 있을 가능성이 높다 | drx_packet.cpp | ||
error | Failed to encrypt stream. (error_id: {오류번호}) | 패킷의 암호화 실패 | drx_packet.cpp | |||
error | Failed to decrypt stream. (error_id: {오류번호}) | 패킷의 복호화 실패 | drx_packet.cpp | |||
error | Compressor ({압축 플러그인}) is not available | 지정한 압축 플러그인을 사용할 수 없다 | 리소스에 지정된 플러그인이 적재되지 않은 경우 | drx_packet.cpp | ||
error | Compressor algorithm ({압축 알고리즘}) is not available | 원격 DRX의 압축 알고리즘에 대응할 플러그인이 없다 | 일부 플러그인이 적재되지 않았을 가능성이 높다 | drx_packet.cpp | ||
error | Failed to compress stream. (error_id: {오류번호}) | 패킷 압축 실패 | drx_packet.cpp | |||
error | Failed to decompress stream. (error_id: {오류번호}) | 패킷 압축 해제 실패 | drx_packet.cpp | |||
전체 채널 태그 a- c- | info | Connector created | Inside 프록시가 생성됨 | - | drx_channel.cpp | |
error | Failed to create connector | Inside 프록시 생성 실패 | - | 메모리 부족이외에는 가능성이 거의 없다. | drx_channel.cpp | |
info | Linker created | Outside 프록시가 생성됨 | - | drx_channel.cpp | ||
error | Failed to create linker | Outside 프록시 생성 실패 | - | 메모리 부족이외에는 가능성이 거의 없다. | drx_channel.cpp | |
info | Channel state changed to ({채널 상태}) | 채널 접속 상태가 변경됨 | bridging, bridged, established 등 | drx_channel.cpp | ||
info | Channel type changed to ({채널 유형}) | 채널 유형이 변경됨 | meta 또는 data | DRBD접속에 의해 채널의 유형이 변경됨. | drx_channel.cpp | |
info | Connector & Linker initialized | Inside & Outside의 프록시가 모두 초기화됨 | - | 채널의 실행 준비가 완료됨. | drx_channel.cpp | |
error | Linker initialization failed | Inside 프록시 초기화에 실패함 | - | 발생하지 않음. | drx_channel.cpp | |
error | Connector initialization failed | Outside 프록시 초기화에 실패함 | - | 발생하지 않음. | drx_channel.cpp | |
info | Start channel | 채널의 동작이 시작됨 | - | 채널의 쓰레드가 실행되었다. | drx_channel.cpp | |
info | Channel type duplicated. ({채널유형} channel) | 채널 유형이 중복됨 | meta 또는 data | 같은 채널이 중복 설정되었으므로 연결을 끊는다. | drx_channel.cpp | |
info | Set memory limit: {BAB크기} | BAB의 크기가 변경됨 | 100M | 발생하지 않음. | channel_info.cpp | |
info | Set bandwidth limit: {전송량제한값} | 전송량 제한값이 변경됨 | 10M | channel_info.cpp | ||
info | Set outbound inside connection: {IP}:{Port} | 채널의 연결설정이 변경됨 | 발생하지 않음. | channel_info.cpp | ||
info | Set outbound outside connection: {IP}:{Port} | 채널의 연결설정이 변경됨 | 발생하지 않음. | channel_info.cpp | ||
info | Set inbound inside connection: {IP}:{Port} | 채널의 연결설정이 변경됨 | 발생하지 않음. | channel_info.cpp | ||
info | Set inbound outside connection: {IP}:{Port} | 채널의 연결설정이 변경됨 | 발생하지 않음. | channel_info.cpp | ||
info | Set compressor: {압축 플러그인} | 채널의 압축 설정이 변경됨 | NONE, ZLIB, IQA, LZ4 | channel_info.cpp | ||
info | Set compressor level: {압축 레벨} | 채널의 압축 설정이 변경됨 | 0~9 | channel_info.cpp | ||
info | Set crypto: {암호화 플러그인} | 채널의 암호화 설정이 변경됨 | NONE, OPENSSL | channel_info.cpp | ||
info | Set crypto key file: {키 파일} | 채널의 암호화 키 파일이 변경됨 | 발생하지 않음. | channel_info.cpp | ||
info | Set block size: {블럭사이즈} | 채널의 block-size가 변경됨 | channel_info.cpp | |||
info | Set minimum raw block size: {블럭사이즈} | 채널의 min-raw-block-size가 변경됨 | channel_info.cpp | |||
a-:i a-:o | info | Start accept | Inside 또는 Outside 프록시의 Acceptor 동작을 시작함 | - | drx_session_impl.cpp | |
c-:i c-:o | info | Start connect | Inside 또는 Outside 프록시의 Connector 동작을 시작함 | - | drx_session_impl.cpp | |
전체 프록시 [ac][-md]:i | warning | System error while disconnect. ({오류번호}: {오류내용}) | 연결 종료중에 오류가 발생함 | 이미 연결이 종료되어 발생하는 경우가 대부분이다. | drx_session_impl.cpp | |
warning | Initialization timeout. ({설정값} seconds) | 초기화 시간 초과 | 10 | 접속 후에 초기화 패킷을 주고 받다가 타임아웃이 발생함. 네트워크 문제일 가능성이 높다. | drx_session_impl.cpp | |
Inside 전체 [ac][-md]:i | warning | Send to drbd failed. ({오류번호}: {오류내용}) | DRBD로 데이터 전송중 실패 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_connector.cpp | |
info | Start RX BAB sender | RX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 시작 | drx_connector.cpp | |||
info | Flushing RX BAB | RX BAB의 남은 데이터를 모두 DRBD로 전송중 | 연결이 종료되었을 때 RX BAB의 남은 데이터를 전송하는 과정 | drx_connector.cpp | ||
info | Stopping RX BAB sender | RX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 종료 | drx_connector.cpp | |||
error | Failed to pop all datas from RX BAB | RX BAB를 비우는 작업에 실패 | RX BAB를 비우는 도중에 프로그램이 종료되는 경우 | drx_connector.cpp | ||
warning | Failed to receive. ({오류번호}: {오류내용}) | DRBD로부터 데이터를 읽는데 실패 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_connector.cpp | ||
info | Start TX BAB receiver | DRBD로부터 읽은 데이터를 TX BAB에 쓰는 작업을 시작 | drx_connector.cpp | |||
warn | not yet bridged | TX BAB receiver를 시작하는 도중에 원격 DRX와의 연결이 끊김 | drx_connector.cpp | |||
warn | Failed to receive from drbd. ({오류번호}: {오류내용}) | DRBD로부터 데이터를 읽는데 실패 | drx_connector.cpp | |||
info | TX BAB receiver stopped | DRBD로부터 읽은 데이터를 TX BAB에 쓰는 작업을 종료 | drx_connector.cpp | |||
warning | Receive timeout | DRBD로부터 데이터를 읽는 도중 타임아웃 발생 | 원격 DRX와의 연결상태를 확인하고 연결이 끊긴 경우 로컬 DRBD와의 연결을 종료한다. | drx_connector.cpp | ||
Inside Acceptor a[-md]:i | error | Accept failed. ({오류번호}: {오류내용}) | DRBD의 연결을 기다리는 작업에 실패 | 포트가 다른곳에서 이미 사용중인 경우가 많다. | drx_connector.cpp | |
error | Get remote endpoint failed. ({오류번호}: {오류내용}) | DRBD의 IP/Port를 조회하는데 실패 | 접속 직후 연결이 끊긴 경우이다. | drx_connector.cpp | ||
info | Accepted. (client: {DRBD IP}:{DRBD Port}) | DRBD가 DRX로 연결됨 | connected 상태로 전환되고 채널 타입을 기다린다. | drx_connector.cpp | ||
warn | Receive magic packet failed. ({오류번호}: {오류내용}) | DRBD의 magic 패킷을 읽는 도중 오류가 발생함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_connector.cpp | ||
error | Unknown channel received | DRBD로부터 알수 없는 채널을 받음 | 상대가 DRBD가 아니거나 호환되지 않는 버전일 가능성이 높다. | drx_connector.cpp | ||
info | Buddy channel got the same type. ({채널유형}) | DRBD로부터 이미 연결되어있는 채널 타입을 받음 | meta 또는 data | 채널 유형이 중복되었으므로 연결을 끊는다. | drx_connector.cpp | |
error | Accept exception. [{DRX IP}:{DRX Port}] ({오류번호}: {오류내용}) | Acceptor의 연결 및 초기화 과정에서 예외가 발생 | drx_connector.cpp | |||
error | Accept exception. ({오류내용}) | Acceptor의 연결 및 초기화 과정에서 예외가 발생 | drx_connector.cpp | |||
Inside Connector c[-md]:i | error | Set buffer size failed. ({오류내용}) | DRBD와 연결하는 소켓의 버퍼 크기 설정에 실패 | 이 이후 연결을 끊는다. | drx_connector.cpp | |
warning | Connect to drbd failed. [{DRBD IP}:{DRBD Port}] ({오류번호}: {오류내용}) | DRBD에 연결하는데 실패함 | DRBD 리소스의 상태, 방화벽을 점검해야 한다. | drx_connector.cpp | ||
info | Connected at [{DRBD IP}:{DRBD Port}] | DRBD에 연결됨 | drx_connector.cpp | |||
info | This is not active channel. Reject | 사용할 수 없는 채널이므로 연결을 끊는다 | DRBD와 연결도중 원격 DRX와 원격 DRBD의 연결이 끊기는 경우 발생한다. | drx_connector.cpp | ||
Outside 전체 [ac][-md]:o | info | Local configuration: | 로컬 DRX의 통신 설정을 출력 | Local configuration: block-size: 1.00 MB compressor selected: ZLIB level 1 crypto selected: NONE compressors available: ZLIB, LZMA cryptos available: OPENSSL | 원격 DRX와의 연결 준비 과정에서 출력된다. | drx_link.cpp |
info | Local configuration: block-size: {블럭사이즈} compressor selected: {선택된 압축 플러그인} crypto selected: {선택된 암호화 플러그인} compressors available: {사용가능한 압축 플러그인} cryptos available: {사용가능한 암호화 플러그인} | 원격 DRX의 통신 설정을 출력 | 원격 DRX와 연결된 후, 원격 DRX와 통신이 가능한것이 판별되면 출력된다. | drx_link.cpp | ||
error | Unknown initialize packet received. (type: {채널유형값}) | 원격 DRX에서 알 수 없는 초기화 패킷을 받음 | 채널 유형에 해당하는 숫자 값 | 상대가 DRX가 아니거나 버전이 다르다. | drx_link.cpp | |
error | Remote crypto configuration not available. (remote: {원격설정}) | 원격 DRX의 암호화 설정을 로컬 DRX에서 사용할 수 없다. | OPENSSL | 연결을 끊는다. (플러그인이 일부 적재되지 않았다.) | drx_link.cpp | |
error | Remote compressor configuration not available. (remote: {원격설정}) | 원격 DRX의 압축 설정을 로컬 DRX에서 사용할 수 없다. | LZ4 level 1 | 연결을 끊는다. (플러그인이 일부 적재되지 않았다.) | drx_link.cpp | |
warning | Wrong size header received. (read: {읽은길이}, requested: {요청한길이}, payload: {데이터길이}, error: {오류내용}) | 원격 DRX로부터 잘못된 길이의 헤더를 받음 | 연결을 끊는다. (전송중 연결이 끊겨도 발생할 수 있다.) | drx_link.cpp | ||
warning | Receive header failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 헤더를 읽는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Wrong size payload received. (read: {읽은길이}, requested: {요청한길이}, error: {오류내용}) | 원격 DRX로부터 잘못된 길이의 데이터를 받음 | 연결을 끊는다. (전송중 연결이 끊겨도 발생할 수 있다.) | drx_link.cpp | ||
warning | Receive payload failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 데이터를 읽는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
error | RX BAB not configured | RX BAB 미설정 상태에서 RX BAB 사용 루틴이 실행됨 | 연결을 끊는다. | drx_link.cpp | ||
info | Channel type received. ({채널유형}) | 원격 DRX로부터 채널 유형을 받음 | drbd_meta 또는 drbd_data | 이미 연결된 채널인 경우 연결을 끊는다. | drx_link.cpp | |
warn | Event received ({이벤트유형}) | 원격 DRX로부터 이벤트를 받음 | 연결을 끊는다. | drx_link.cpp | ||
error | Unhandled header received ({이벤트유형값}) | 원격 DRX로부터 알 수 없는 이벤트 유형을 받음 | 원격 DRX와의 버전이 맞지 않을 가능성이 높다. | drx_link.cpp | ||
info | Start TX BAB sender (memlimit: {}, bwlimit: {}, blocksize: {}, min-raw-block-size: {}) | TX BAB의 데이터를 원격 DRX로 전송하는 작업 시작 | 압축 또는 암호화 사용시의 시작 메시지 | drx_link.cpp | ||
info | Start TX BAB sender (memlimit: {}, bwlimit: {}, blocksize: {}) | TX BAB의 데이터를 원격 DRX로 전송하는 작업 시작 | 압축/암호화 미사용시의 시작 메시지 | drx_link.cpp | ||
info | Flushing TX BAB | TX BAB의 남은 데이터를 모두 DRBD로 전송중 | 연결이 종료되었을 때 TX BAB의 남은 데이터를 전송하는 과정 | drx_link.cpp | ||
info | Stopping TX BAB sender | TX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 종료 | drx_link.cpp | |||
error | Failed to pop all datas from TX BAB | TX BAB를 비우는 작업에 실패 | TX BAB를 비우는 도중에 프로그램이 종료되는 경우 | drx_link.cpp | ||
warning | Send event {이벤트유형} failed. ({오류번호}: {오류내용}) | 원격 DRX로 이벤트를 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Send stream failed. ({오류번호}: {오류내용}) | 원격 DRX로 데이터 스트림을 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
drx_link.cpp | ||||||
Outside Connector c[-md]:o | warning | Connect to remote drx failed. [{원격 DRX IP}:{원격 DRX Port}] ({오류번호}: {오류내용}) | 원격 DRX에 접속하는데 실패함 | 원격 DRX의 가동 상태와 방화벽을 점검해야 한다. | drx_link.cpp | |
info | Connected at [{원격 DRX IP}:{원격 DRX Port}] | 원격 DRX에 접속됨 | 소켓 설정과 초기화 패킷 전달을 시작한다. | drx_link.cpp | ||
error | Set socket options failed. ({오류내용}) | 원격 DRX와의 소켓 옵션 설정에 실패함 | 버퍼 크기와 nodelay 설정을 적용하는데 실패함. 연결을 끊는다. | drx_link.cpp | ||
warning | Send init packet failed. ({오류번호}:{오류내용}) | 원격 DRX로 초기화 패킷을 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Receive response packet failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 초기화 응답 패킷을 받는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Error while making init conversation between remote drx: {실패유형} | 원격 DRX로부터 초기화 실패를 받음 | 연결을 끊는다. | drx_link.cpp | ||
warning | Failed to receive init packet failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 초기화 패킷을 받는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Send response packet failed. ({오류번호}: {오류내용}) | 원격 DRX로 초기화 응답 패킷을 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
Outside Acceptor a[-md]:o | error | Accept failed. ({오류번호}: {오류내용}) | DRX의 연결을 기다리는 작업에 실패 | 포트가 다른곳에서 이미 사용중인 경우가 많다. | drx_link.cpp | |
error | Get remote endpoint failed. ({오류번호}: {오류내용}) | 원격 DRX의 IP/Port를 조회하는데 실패 | 접속 직후 연결이 끊긴 경우이다. | drx_link.cpp | ||
info | Accepted. (client: {원격 DRX IP}:{원격 DRX Port}) | 원격 DRX가 로컬 DRX로 연결됨 | 소켓 설정과 초기화 패킷 전달을 시작한다. | drx_link.cpp | ||
warning | Receive init packet failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 초기화 패킷을 받는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Send response packet failed. ({오류번호}: {오류내용}) | 원격 DRX로 초기화 응답 패킷을 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Send init packet failed. ({오류번호}: {오류내용}) | 원격 DRX로 초기화 패킷을 전송하는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Receive response packet failed. ({오류번호}: {오류내용}) | 원격 DRX로부터 초기화 응답 패킷을 받는데 실패함 | 연결이 이미 끊겼거나 이 이후 연결을 끊는다. | drx_link.cpp | ||
warning | Error while making init conversation between remote drx: {실패유형} | 원격 DRX로부터 초기화 실패를 받음 | 연결을 끊는다. | drx_link.cpp | ||
error | Accept exception. [{로컬 DRX IP}:{로컬 DRX Port}] ({오류번호}:{오류내용}) | Acceptor의 연결 및 초기화 과정에서 예외가 발생 | drx_link.cpp | |||
error | Accept exception: {오류내용} | Acceptor의 연결 및 초기화 과정에서 예외가 발생 | drx_link.cpp | |||
TX BAB RX BAB | info | {용량} bytes allocated | BAB에 메모리가 할당됨 | 1GB | allocator.h | |
error | Allocating {용량} bytes failed | BAB 메모리 할당 실패 | 10GB | 메모리 부족 | allocator.h | |
info | {용량} bytes freed | BAB의 메모리가 해제됨 | 1GB | allocator.h | ||
error | TX BAB is too small. Please set it to {용량} bytes or more. | TX BAB의 가용용량이 block-size보다 작다 | block-size를 줄이거나 TX BAB의 용량을 늘려야 한다. | allocator.h | ||
error | block-size is too big. Please set it to {} bytes or less. | RX BAB의 가용용량이 block-size보다 작다 | block-size를 줄여야 한다. | allocator.h | ||
error | Failed to allocate memory. {오류내용} | BAB에 메모리 할당 실패 | 메모리 부족 | ring_buffer.cpp | ||
error | Failed to encrypt packet. buffer_size: {버퍼 길이}, encrypted_size: {암호화된 데이터 길이} | 암호화 실패 (버퍼 길이 문제) | 암호화된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다. | packet_processor.cpp | ||
error | Failed to decrypt packet. buffer_size: {버퍼 길이}, decrypted_size: {복호화된 데이터 길이} | 복호화 실패 (버퍼 길이 문제) | 복호화된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다. | packet_processor.cpp | ||
error | Failed to decompress packet. buffer_size: {버퍼 길이}, decompressed_size: {해제된 데이터 길이} | 압축 해제 실패 (버퍼 길이 문제) | 압축 해제된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다. | packet_processor.cpp | ||
error | Failed to decompress at {인덱스} sizes: {원본 데이터 길이}, {버퍼 길이} | 압축 해제 실패 (기타) | 잘못된 데이터이거나 압축 알고리즘을 지원하지 않아 압축 해제 실패. | packet_processor.cpp | ||
error | Compress stream error. ({오류 번호}) | 압축 실패 | 데이터 압축 실패. 오류 번호가 없을 수도 있다. | packet_processor.cpp | ||
error | Decompress stream error. ({오류 번호}) | 압축 해제 실패 | 데이터 압축 해제 실패. 오류 번호가 없을 수도 있다. | packet_processor.cpp | ||
error | Encrypt stream error. ({오류 번호}) | 암호화 실패 | 데이터 암호화 실패. 오류 번호가 없을 수도 있다. | packet_processor.cpp | ||
error | Decrypt stream error. ({오류 번호}) | 복호화 실패 | 데이터 복호화 실패. 오류 번호가 없을 수도 있다. | packet_processor.cpp |
IPC
태그 | 레벨 | 내용 | 설명 | 비고 | 소스 파일 |
---|---|---|---|---|---|
error | Error on accept. ({오류번호}: {오류내용}) | IPC 서비스의 accept 과정에서 오류가 발생함 | ipc_server.cpp | ||
events | info | Notification start | 이벤트 전송 기능 시작 | ipc_event_notifier.cpp | |
info | Notification stopped | 이벤트 전송 기능 중지 | ipc_event_notifier.cpp | ||
warning | Failed to get client endpoint. ({오류번호}: {오류내용}) | IPC 클라이언트의 IP/Port 조회 실패 | 연결 직후 끊긴 경우 | ipc_event_notifier.cpp | |
info | client removed {IP}:{Port} | IPC 이벤트 조회 클라이언트의 연결이 종료됨 | ipc_event_notifier.cpp | ||
info | client added {IP}:{Port} | IPC 이벤트 조회 클라이언트가 연결됨 | ipc_event_notifier.cpp | ||
{IP}:{Port} | warning | Data transfer failed. ({오류번호}: {오류내용}) | IPC 클라이언트로 데이터 전송 실패 | ipc_server.cpp | |
error | Error on payload. ({오류내용}) | IPC 서비스의 처리과정에서 오류가 발생함 | ipc_server.cpp |
crash_handler
레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
---|---|---|---|---|---|
info | Signal: {시그널유형} | IPC 서비스의 accept 과정에서 오류가 발생함 | SIGINT 또는 SIGTERM | 실행중 Ctrl+C를 입력한 경우 SIGINT, 외부에서 프로세스를 종료하는 경우 SIGTERM이 발생한다. 이 메시지 이후 프로그램을 정상 종료한다. | handler.cpp |
warning | Failed to register signal handler for {시그널유형} | 해당 시그널 핸들러의 등록에 실패함 | SIGABRT, SIGFPE, SIGILL, SIGSEGV | 비정상 종료시 호출 스택을 출력하기 위한 시그널 등록에 실패함. | handler.cpp |
critical | Signal handling | 비정상 종료 시그널 발생 (Linux) | 프로그램 시그널 핸들링 방식으로 비정상 종료 상황을 핸들링함. | handler.cpp | |
critical | Exception handling (Unhandled) | 비정상 종료 시그널 발생 (Windows) | Windows API를 사용하여 비정상 종료 상황을 핸들링함. | handler.cpp | |
critical | Exception handling (Vectored) | 비정상 종료 시그널 발생 (Windows) | Windows API를 사용하여 비정상 종료 상황을 핸들링함. | handler.cpp | |
critical | Fatal exception: {예외유형} stackdump [프레임] {심볼주소} {함수명 } ({파일명:라인번호}) | 발생한 예외 출력 | 발생한 예외 종류와 호출 스택 출력 | stacktrace_linux.cpp stacktrace_windows.cpp |