로그

개요

DRX의 로그는 동일한 로그를 다음의 두 경로로 출력한다.

  • 표준 출력
  • 로그 파일

표준 출력의 경우 서비스 상태로 동작시에는 출력되지 않고, 파일 출력의 경우는 메인 로그와 리소스 로그로 분산 저장된다.

파일저장 위치내용
메인 로그 파일{DRX 설치 경로}/logs/main.logDRX 자체 동작. 리소스별 동작 내용 제외
리소스별 로그 파일{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
C0928

로그 레벨과 날짜를 붙여서 출력한다.
로그 레벨은 아래에서 별도로 설명한다.

시간시:분:초.마이크로초16:44:13.790530-
쓰레드t{쓰레드ID}t3056해당 로그가 생성된 쓰레드 ID
로거로거 이름main로그의 카테고리를 나누기 위한 로거명
태그태그명license
c-:o
로거의 하위 범위를 나타내거나 채널의 상세 정보를 나타내는 역할

로그 레벨

약어로그 레벨범위예시
Ttrace아주 자세한 동작 단계별 로그함수 수준의 실행 단계 출력, 객체의 생성/파괴 등
Ddebug문제가 발생하지 않으면 확인할 필요가 없는 수준의 내용내부적으로 사용되는 값의 변화, 통신 내용 등
Iinfo상태 변화나 동작에 관한 일반적인 내용접속 이벤트, 채널 상태 변화 등
Wwarning의도하지 않은 문제가 발생하였지만 동작을 다시 시작하거나 지속하는데 문제가 없는 상황타임아웃, 연결 실패 등
Eerror의도하지 않은 문제가 발생하여 해당 동작을 지속할 수 없는 상황잘못된 프로토콜 헤더, 라이선스 오류 등
Ccritical프로그램의 실행을 지속할 수 없는 심각한 오류예외가 발생하여 프로그램을 종료할 때

로그 목록

trace와 debug 레벨의 경우에는 개발 과정에서 수시로 변화할 수 있으므로, 이 문서에서는 info~critical 까지의 레벨에 대해서만 정리한다.

main

태그레벨내용설명값의 예비고소스 파일





















infoCompiled at {날짜} {시간}DRX가 컴파일된 시간Oct 4 2018 09:04:38
drx.cpp
infoSystem Locale: {locale}현재 시스템 로케일 값en_US.windows-1252
drx.cpp
infoDRX path: {DRX 설치경로}DRX가 설치된 경로C:\Program Files\DRX환경변수 'DRX_PATH'에 정의된 값.drx.cpp
infoEXE path: {실행파일경로}현재 실행한 DRX가 위치한 경로C:\Program Files\DRX\bin
drx.cpp
infoStarting in foreground modeForeground 모드로 실행-설정을 모두 읽어 프로그램 초기화가 완료된 상태.drx.cpp
infoStarting in daemonize modeDaemonize 모드로 실행-설정을 모두 읽어 프로그램 초기화가 완료된 상태.drx.cpp
errorInitialization failed초기화 실패-환경 설정을 읽는데 실패했다.drx.cpp
warningEnvironment variable 'DRX_PATH' is not exists환경변수 DRX_PATH가 설정되지 않음

instance.cpp
infoClosing drxDRX 종료 중-DRX를 종료하는 과정에서의 마지막 로그.core.cpp
errorSystem error at quit. ({오류번호}: {오류내용})DRX 종료 중에 시스템 오류 발생-DRX 종료 과정에서 오류가 발생함.core.cpp
infoRead resources configuration success리소스별 세션 정보를 읽는데 성공함-BSR 환경 설정으로부터 리소스별 설정을 읽음.core.cpp
warningRead resources configuration failed리소스별 세션 정보를 읽는데 실패함-리소스가 없을 경우 발생할 수 있다.core.cpp
infoLicense is available정상적인 라이선스로 확인됨-
core.cpp
errorLicense is not available라이선스를 사용할 수 없음-프로그램을 종료한다.core.cpp
infoResource create complete모든 리소스 생성 완료-설정된 리소스를 모두 생성함. IPC 서비스를 사용할 수 있다.core.cpp
info

Create resource [리소스명]

리소스 생성 시작
해당 리소스의 생성을 시작함.drx_manager.cpp
errorResource name [리소스명] is already exists같은 리소스가 이미 존재함
리소스 설정이 잘못되어 동일 이름의 리소스가 두 개 이상 존재하거나, IPC를 통해 이미 존재하는 리소스를 다시 추가한 경우.drx_manager.cpp
errorFailed to create resource [리소스명]. {오류내용}리소스 생성에 실패함
리소스 생성 도중에 오류가 발생함. 프로그램을 종료한다.drx_manager.cpp
infoResource [리소스명] deleted리소스가 삭제됨
IPC를 통해 리소스를 삭제한 경우.drx_manager.cpp
infoIPC service startedIPC 서비스가 시작됨-IPC 서버가 생성됨.drx_manager.cpp
errorFailed to start IPC serviceIPC 서비스 시작에 실패함-메모리 부족 이외에는 발생 가능성이 거의 없다.drx_manager.cpp
errorSystem error while stopping. ({오류번호}: {오류내용})리소스, IPC, 패킷 처리 중단중 오류 발생
프로그램 종료 과정중 오류가 발생함.drx_manager.cpp
licenseinfoVerify license is available라이선스 확인 시작-라이선스 확인 과정이 시작됨.drx_manager.cpp
infoLicense applied라이선스가 적용됨-set license 명령으로 라이선스를 적용하면 출력됨.drx_manager.cpp
errorFailed to get drx pathDRX 설치 경로를 얻는데 실패함-환경변수 'DRX_PATH'가 없는 경우일 수 있다.drx_manager.cpp
infoChecking license for [라이선스파일]라이선스 파일의 확인 시작C:\Program Files\DRX\drx.lic해당 경로의 라이선스 파일을 확인한다.drx_manager.cpp
errorFailed to initializing license system. {오류내용}라이선스 초기화에 실패함
라이선스를 읽는데 실패함. 오류 내용은 RLM에서 출력된 내용이다.drx_manager.cpp
errorLicense file not found at [라이선스파일]라이선스 파일을 찾지 못함
지정한 경로에 파일이 존재하지 않음. set license 명령사용시 출력됨.drx_manager.cpp
errorInvalid License {제품명}({오류번호})잘못된 라이선스drx(-40)라이선스가 잘못되었거나 만료됨. 오류번호는 RLM의 오류번호이다.drx_manager.cpp
errorLicense Expired {제품명}라이선스 기간초과drx기간이 초과되어 사용할 수 없다. 라이선스 교체 필요.drx_manager.cpp
infoLicense Status: {라이선스상태}정상적인 라이선스로 인식됨Permanent
drx_manager.cpp
plugins



infoAll plugin loaded모든 플러그인 적재 과정 완료

plugin_manager.cpp
criticalFailed to load crypto {플러그인}. {오류내용}암호화 플러그인 적재 실패
프로그램을 종료한다.plugin_manager.cpp
infoCrypto plugins loaded: {플러그인 목록}
Crypto algorithms: {사용가능한 알고리즘 목록}
암호화 플러그인 적재 완료OPENSSL
PLAIN, AES128(OPENSSL)

plugin_manager.cpp
criticalFailed to load compressor {플러그인}. {오류내용}압축 플러그인 적재 실패
프로그램을 종료한다.plugin_manager.cpp
infoCompressor plugins loaded: {플러그인 목록}
Compressor algorithms: {사용가능한 알고리즘 목록}
압축 플러그인 적재 완료ZLIB, LZ4
PLAIN, GZIP(ZLIB), LZ4(LZ4)

plugin_manager.cpp
resourceinfoLoading language: [파일명]언어팩 파일 적재 시작C:\Program Files\DRX\lang\english.inidrx.conf의 lang 항목.lang.cpp
warningLanguage file [파일명] not found언어팩 파일을 찾을 수 없음C:\Program Files\DRX\lang\english.ini실행에는 문제가 없다.lang.cpp

config

태그레벨내용설명값의 예비고소스 파일




infoConfiguration loaded. [파일명]설정 파일을 읽는데 성공함. 이 이후에 설정을 적용한다.

instance.cpp
errorFailed to load [파일명]. {오류내용}설정 파일을 읽는데 실패함. 프로그램을 종료한다.[/opt/DRX/drx.conf]. /opt/DRX/drx.conf: cannot open file
instance.cpp
infoConfiguration file is not exists. [파일명]설정 파일이 존재하지 않는다.
기본설정으로 동작한다.instance.cpp
error

Failed to get drbd configuration: {오류내용}
Output: {출력내용}

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
infoDRBD configuration output: {명령 내용}drbdadm proxy-up all -d 명령의 출력 내용.
이 내용을 통해 리소스가 생성된다.config.h
infoDRBD '{리소스}' configuration update
DRBD configuration tokens: {설정 내용}
리소스의 설정을 갱신한다.
adjust 명령시 수행된다.config.h
globalwarningFailed to parse connection timeout: {입력값} ({오류내용})연결 타임아웃 시간이 잘못 지정됨.
drx.conf의 connect-timeout 항목config.h
warningUnknown console log level value: {입력값}콘솔 로그 레벨이 잘못 지정됨.
drx.conf의 loglevel-stdout 항목config.h
warningUnknown file log level value: {입력값}파일 로그 레벨이 잘못 지정됨.
drx.conf의 loglevel-file 항목config.h
warningFailed to parse log file max size: {입력값}로그 파일당 최대 용량이 잘못 지정됨.
drx.conf의 logfile-max-size 항목config.h
warningFailed to parse log file max count: {입력값} ({오류내용})로그 파일 최대 개수가 잘못 지정됨.
drx.conf의 logfile-max-count 항목config.h
warningUnknown performance log value: {입력값}성능 로그 설정이 잘못 지정됨.
drx.conf의 performance-log 항목config.h
warningFailed to parse process thread count: {입력값} ({오류내용})패킷 처리 쓰레드 개수가 잘못 지정됨.
drx.conf의 process-thread-count 항목config.h
warningUnknown ip verification value: {입력값}IP 확인 기능의 값이 잘못 지정됨.
drx.conf의 ip-verification 항목config.h
warningFailed to parse init timeout: {} ({})초기화 패킷 교환 타임아웃 값이 잘못 지정됨.
drx.conf의 init-timeout 항목config.h
infoSet base dir: {경로}DRX 베이스 경로가 지정됨./opt/DRXdrx.conf의 base-dir 항목config.h
infoSet DRBD path: {경로}DRBD 환경설정의 경로가 지정됨./etc/drbd.d/drbd.confdrx.conf의 drbd-conf 항목config.h
infoSet connection timeout: {시간(초)}연결 타임아웃 시간이 지정됨.10drx.conf의 connect-timeout 항목config.h
infoSet init timeout: {시간(초)}초기화 패킷 교환 타임아웃 값이 지정됨.10drx.conf의 init-timeout 항목config.h
infoSet console log level: {로그 레벨}표준 출력의 로그 레벨이 지정됨.infodrx.conf의 loglevel-stdout 항목config.h
infoSet file log level: {로그 레벨}파일 로그의 로그 레벨이 지정됨.infodrx.conf의 loglevel-file 항목config.h
infoSet log file max size: {파일 크기}로그 파일당 최대 용량이 지정됨.10Mdrx.conf의 logfile-max-size 항목config.h
infoSet log file max count: {파일 개수}로그 파일 최대 개수가 지정됨.10drx.conf의 logfile-max-count 항목config.h
infoSet performance log: {on/off}성능 로그 설정이 지정됨.offdrx.conf의 performance-log 항목config.h
infoSet process thread count: {쓰레드 개수}패킷 처리 쓰레드 개수가 지정됨.8drx.conf의 process-thread-count 항목config.h
infoSet IP verification: {on/off}소켓 통신시 IP 확인 기능 설정이 지정됨.ondrx.conf의 ip-verification 항목config.h

packet_process_pool

레벨내용설명값의 예비고소스 파일
infoStarted (concurrency: {쓰레드 수})패킷 처리 쓰레드가 시작됨auto -> 8drx.conf의 process-thread-count 항목.
멀티쓰레드를 사용하지 않는 설정인 경우 이 로그가 출력되지 않는다.
packet_process_pool.cpp
infoResized to {쓰레드 수}쓰레드 수가 변경됨
set process-thread-count 사용기 출력된다.packet_process_pool.cpp
infoStopped패킷 처리 쓰레드가 중지됨-프로그램 종료중에 출력된다.packet_process_pool.cpp
errorLoad compressor - inconsistency between threads쓰레드별 압축 플러그인 적재중 오�� 발생-

하나의 플러그인을 쓰레드별로 적재 또는 해제중에 쓰레드별 차이가 발생함.

이 오류가 발생하면 알고리즘 상에 문제가 있는 것으로 판단된다.
수정 후 패치를 발행해야 한다.

packet_process_pool.cpp
errorUnload compressor - inconsistency between threads쓰레드별 압축 플러그인 해제중 오류 발생-packet_process_pool.cpp
errorLoad decompressor - inconsistency between threads쓰레드별 압축해제 플러그인 적재중 오류 발생-packet_process_pool.cpp
errorUnload decompressor - inconsistency between threads쓰레드별 압축해제 플러그인 해제중 오류 발생-packet_process_pool.cpp
errorLoad encrypto - inconsistency between threads쓰레드별 암호화 플러그인 적재중 오류 발생-packet_process_pool.cpp
errorUnload encrypto - inconsistency between threads쓰레드별 암호화 플러그인 해제중 오류 발생-packet_process_pool.cpp
errorLoad decrypto - inconsistency between threads쓰레드별 복호화 플러그인 적재중 오류 발생-packet_process_pool.cpp
errorUnload decrypto - inconsistency between threads쓰레드별 복호화 플러그인 해재중 오류 발생-packet_process_pool.cpp
errorCompressor ({플러그인}) is not available해당 압축 플러그인을 사용할 수 없음
해당 플러그인이 적재되지 않은 경우packet_processor.cpp
errorCompressor algorithm ({알고리즘}) is not available해당 압축 알고리즘을 사용할 수 없음
해당 알고리즘의 플러그인이 적재되지 않은 경우packet_processor.cpp
errorCrypto ({플러그인}) is not available해당 암호화 플러그인을 사용할 수 없음
해당 플러그인이 적재되지 않은 경우packet_processor.cpp
errorFailed to initialize {플러그인} encrypto stream. ({오류 내용})암호화 플러그인 스트림 초기화 실패
쓰레드별 암호화 플러그인의 스트림 초기화중 오류가 발생함. 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp
errorCrypto algorithm ({알고리즘}) is not available해당 암호화 알고리즘을 사용할 수 없음
해당 알고리즘의 플러그인이 적재되지 않은 경우packet_processor.cpp
errorFailed to initialize {플러그인} decrypto stream. ({오류 내용})복호화 플러그인 스트림 초기화 실패
쓰레드별 복호화 플러그인의 스트림 초기화중 오류가 발생함. 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp
errorCompress stream error. ({오류 번호})압축 실패
데이터 압축 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp
errorDecompress stream error. ({오류 번호})압축 해제 실패
데이터 압축 해제 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp
errorEncrypt stream error. ({오류 번호})암호화 실패
데이터 암호화 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp
errorDecrypt stream error. ({오류 번호})복호화 실패
데이터 복호화 실패. 오류 번호가 없을 수도 있다. 데이터나 플러그인 파일이 손상되었을 수 있다.packet_processor.cpp

리소스별 로거

리소스별 로거는 리소스의 이름이 로거의 이름으로 할당된다.

각각의 리소스는 두개의 채널로 이루어져 있으므로 다음과 같은 태그를 지닌다.

{연결 방향}{채널 유형}

또한, 각각의 채널은 두개의 프록시 연결로 구성되어 있으므로 각 연결의 세부 태그는 다음과 같다.

{연결 방향}{채널 유형}:{프록시 위치}

태그 항목별 상세

각각의 항목

항목설명
​연결 방향a​Acceptor. 각 리소스의 첫번째 채널. 상대의 연결을 승인하는 채널​. (Local DRBD → Local DRX ← Remote DRX)
cConnector. 각 리소스의 두번째 채널. 상대측으로 연결하는 채널. (Local DRBD ← Local DRX → Remote DRX)
채널 유형-미정. DRBD와 연결된 후 정해진다.
mmeta
ddata
프록시 위치iInside. DRBD와의 접속.
oOutside. DRX와의 접속.

리소스명이 'r0'라고 가정할 경우, 다음과 같은 구성의 로거가 존재하게 된다.

리소스채널프록시태그
​r0





-

-r0​
Acceptor

-r0:a
Inside​r0:a-:i
Outsider0:a-:o
Connector

-r0:c
Insider0:c-:i
Outsider0:c-:o

로그 목록

태그레벨내용설명값의 예비고소스 파일










infoStart resource
 Inside  local({IP:Port}) <-> drbd({IP:Port})
 Outside local({IP:Port}) <-> remote({IP:Port})
리소스 동작 시작

drx_manager.cpp
errorCrypto ({암호화 플러그인}) is not available지정한 암호화 플러그인을 사용할 수 없다
리소스에 지정된 플러그인이 적재되지 않은 경우drx_packet.cpp
errorEncrypto plugin ({암호화 플러그인}) initialization failed. (error_id: {오류번호})암호화 플러그인의 암호화 인스턴스 초기화 실패
해당 플러그인 파일에 문제가 있을 가능성이 높다drx_packet.cpp
errorDecrypto plugin ({암호화 플러그인}) initialization failed. (error_id: {오류번호})암호화 플러그인의 복호화 인스턴스 초기화 실패
해당 플러그인 파일에 문제가 있을 가능성이 높다drx_packet.cpp
errorFailed to encrypt stream. (error_id: {오류번호})패킷의 암호화 실패

drx_packet.cpp
errorFailed to decrypt stream. (error_id: {오류번호})패킷의 복호화 실패

drx_packet.cpp
errorCompressor ({압축 플러그인}) is not available지정한 압축 플러그인을 사용할 수 없다
리소스에 지정된 플러그인이 적재되지 않은 경우drx_packet.cpp
errorCompressor algorithm ({압축 알고리즘}) is not available원격 DRX의 압축 알고리즘에 대응할 플러그인이 없다
일부 플러그인이 적재되지 않았을 가능성이 높다drx_packet.cpp
errorFailed to compress stream. (error_id: {오류번호})패킷 압축 실패

drx_packet.cpp
errorFailed to decompress stream. (error_id: {오류번호})패킷 압축 해제 실패

drx_packet.cpp

전체 채널 태그

a-
am
ad

c-
cm
cd

infoConnector createdInside 프록시가 생성됨-
drx_channel.cpp
errorFailed to create connectorInside 프록시 생성 실패-메모리 부족이외에는 가능성이 거의 없다.drx_channel.cpp
infoLinker createdOutside 프록시가 생성됨-
drx_channel.cpp
errorFailed to create linkerOutside 프록시 생성 실패-메모리 부족이외에는 가능성이 거의 없다.drx_channel.cpp
infoChannel state changed to ({채널 상태})채널 접속 상태가 변경됨bridging, bridged, established 등
drx_channel.cpp
infoChannel type changed to ({채널 유형})채널 유형이 변경됨meta 또는 dataDRBD접속에 의해 채널의 유형이 변경됨.drx_channel.cpp
infoConnector & Linker initializedInside & Outside의 프록시가 모두 초기화됨-채널의 실행 준비가 완료됨.drx_channel.cpp
errorLinker initialization failedInside 프록시 초기화에 실패함-발생하지 않음.drx_channel.cpp
errorConnector initialization failedOutside 프록시 초기화에 실패함-발생하지 않음.drx_channel.cpp
infoStart channel채널의 동작이 시작됨-채널의 쓰레드가 실행되었다.drx_channel.cpp
infoChannel type duplicated. ({채널유형} channel)채널 유형이 중복됨meta 또는 data같은 채널이 중복 설정되었으므로 연결을 끊는다.drx_channel.cpp
infoSet memory limit: {BAB크기}BAB의 크기가 변경됨100M발생하지 않음.channel_info.cpp
infoSet bandwidth limit: {전송량제한값}전송량 제한값이 변경됨10M
channel_info.cpp
infoSet outbound inside connection: {IP}:{Port}채널의 연결설정이 변경됨
발생하지 않음.channel_info.cpp
infoSet outbound outside connection: {IP}:{Port}채널의 연결설정이 변경됨
발생하지 않음.channel_info.cpp
infoSet inbound inside connection: {IP}:{Port}채널의 연결설정이 변경됨
발생하지 않음.channel_info.cpp
infoSet inbound outside connection: {IP}:{Port}채널의 연결설정이 변경됨
발생하지 않음.channel_info.cpp
infoSet compressor: {압축 플러그인}채널의 압축 설정이 변경됨NONE, ZLIB, IQA, LZ4
channel_info.cpp
infoSet compressor level: {압축 레벨}채널의 압축 설정이 변경됨0~9
channel_info.cpp
infoSet crypto: {암호화 플러그인}채널의 암호화 설정이 변경됨NONE, OPENSSL
channel_info.cpp
infoSet crypto key file: {키 파일}채널의 암호화 키 파일이 변경됨
발생하지 않음.channel_info.cpp
infoSet block size: {블럭사이즈}채널의 block-size가 변경됨

channel_info.cpp
infoSet minimum raw block size: {블럭사이즈}채널의 min-raw-block-size가 변경됨

channel_info.cpp
a-:i
a-:o
infoStart acceptInside 또는 Outside 프록시의 Acceptor 동작을 시작함-
drx_session_impl.cpp
c-:i
c-:o
infoStart connectInside 또는 Outside 프록시의 Connector 동작을 시작함-
drx_session_impl.cpp

전체 프록시

[ac][-md]:i
[ac][-md]:o

warningSystem error while disconnect. ({오류번호}: {오류내용})연결 종료중에 오류가 발생함
이미 연결이 종료되어 발생하는 경우가 대부분이다.drx_session_impl.cpp
warningInitialization timeout. ({설정값} seconds)초기화 시간 초과10접속 후에 초기화 패킷을 주고 받다가 타임아웃이 발생함. 네트워크 문제일 가능성이 높다.drx_session_impl.cpp

Inside 전체

[ac][-md]:i

warningSend to drbd failed. ({오류번호}: {오류내용})DRBD로 데이터 전송중 실패
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_connector.cpp
infoStart RX BAB senderRX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 시작

drx_connector.cpp
infoFlushing RX BABRX BAB의 남은 데이터를 모두 DRBD로 전송중
연결이 종료되었을 때 RX BAB의 남은 데이터를 전송하는 과정drx_connector.cpp
infoStopping RX BAB senderRX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 종료

drx_connector.cpp
errorFailed to pop all datas from RX BABRX BAB를 비우는 작업에 실패
RX BAB를 비우는 도중에 프로그램이 종료되는 경우drx_connector.cpp
warningFailed to receive. ({오류번호}: {오류내용})DRBD로부터 데이터를 읽는데 실패
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_connector.cpp
infoStart TX BAB receiverDRBD로부터 읽은 데이터를 TX BAB에 쓰는 작업을 시작

drx_connector.cpp
warnnot yet bridgedTX BAB receiver를 시작하는 도중에 원격 DRX와의 연결이 끊김

drx_connector.cpp
warnFailed to receive from drbd. ({오류번호}: {오류내용})DRBD로부터 데이터를 읽는데 실패

drx_connector.cpp
infoTX BAB receiver stoppedDRBD로부터 읽은 데이터를 TX BAB에 쓰는 작업을 종료

drx_connector.cpp
warningReceive timeoutDRBD로부터 데이터를 읽는 도중 타임아웃 발생
원격 DRX와의 연결상태를 확인하고 연결이 끊긴 경우 로컬 DRBD와의 연결을 종료한다.drx_connector.cpp

Inside Acceptor

a[-md]:i

errorAccept failed. ({오류번호}: {오류내용})DRBD의 연결을 기다리는 작업에 실패
포트가 다른곳에서 이미 사용중인 경우가 많다.drx_connector.cpp
errorGet remote endpoint failed. ({오류번호}: {오류내용})DRBD의 IP/Port를 조회하는데 실패
접속 직후 연결이 끊긴 경우이다.drx_connector.cpp
infoAccepted. (client: {DRBD IP}:{DRBD Port})DRBD가 DRX로 연결됨
connected 상태로 전환되고 채널 타입을 기다린다.drx_connector.cpp
warnReceive magic packet failed. ({오류번호}: {오류내용})DRBD의 magic 패킷을 읽는 도중 오류가 발생함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_connector.cpp
errorUnknown channel receivedDRBD로부터 알수 없는 채널을 받음
상대가 DRBD가 아니거나 호환되지 않는 버전일 가능성이 높다.drx_connector.cpp
infoBuddy channel got the same type. ({채널유형})DRBD로부터 이미 연결되어있는 채널 타입을 받음meta 또는 data채널 유형이 중복되었으므로 연결을 끊는다.drx_connector.cpp
errorAccept exception. [{DRX IP}:{DRX Port}] ({오류번호}: {오류내용})Acceptor의 연결 및 초기화 과정에서 예외가 발생

drx_connector.cpp
errorAccept exception. ({오류내용})Acceptor의 연결 및 초기화 과정에서 예외가 발생

drx_connector.cpp

Inside Connector

c[-md]:i

errorSet buffer size failed. ({오류내용})DRBD와 연결하는 소켓의 버퍼 크기 설정에 실패
이 이후 연결을 끊는다.drx_connector.cpp
warningConnect to drbd failed. [{DRBD IP}:{DRBD Port}] ({오류번호}: {오류내용})DRBD에 연결하는데 실패함
DRBD 리소스의 상태, 방화벽을 점검해야 한다.drx_connector.cpp
infoConnected at [{DRBD IP}:{DRBD Port}]DRBD에 연결됨

drx_connector.cpp
infoThis is not active channel. Reject사용할 수 없는 채널이므로 연결을 끊는다
DRBD와 연결도중 원격 DRX와 원격 DRBD의 연결이 끊기는 경우 발생한다.drx_connector.cpp

Outside 전체

[ac][-md]:o

info

Local configuration:
 block-size: {블럭사이즈}
 compressor selected: {선택된 압축 플러그인}
 crypto selected: {선택된 암호화 플러그인}
 compressors available: {사용가능한 압축 플러그인}
 cryptos available: {사용가능한 암호화 플러그인}

로컬 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
infoLocal configuration:
 block-size: {블럭사이즈}
 compressor selected: {선택된 압축 플러그인}
 crypto selected: {선택된 암호화 플러그인}
 compressors available: {사용가능한 압축 플러그인}
 cryptos available: {사용가능한 암호화 플러그인}
원격 DRX의 통신 설정을 출력
원격 DRX와 연결된 후, 원격 DRX와 통신이 가능한것이 판별되면 출력된다.drx_link.cpp
errorUnknown initialize packet received. (type: {채널유형값})원격 DRX에서 알 수 없는 초기화 패킷을 받음채널 유형에 해당하는 숫자 값상대가 DRX가 아니거나 버전이 다르다.drx_link.cpp
errorRemote crypto configuration not available. (remote: {원격설정})원격 DRX의 암호화 설정을 로컬 DRX에서 사용할 수 없다.OPENSSL연결을 끊는다. (플러그인이 일부 적재되지 않았다.)drx_link.cpp
errorRemote compressor configuration not available. (remote: {원격설정})원격 DRX의 압축 설정을 로컬 DRX에서 사용할 수 없다.LZ4 level 1연결을 끊는다. (플러그인이 일부 적재되지 않았다.)drx_link.cpp
warningWrong size header received. (read: {읽은길이}, requested: {요청한길이}, payload: {데이터길이}, error: {오류내용})원격 DRX로부터 잘못된 길이의 헤더를 받음
연결을 끊는다. (전송중 연결이 끊겨도 발생할 수 있다.)drx_link.cpp
warningReceive header failed. ({오류번호}: {오류내용})원격 DRX로부터 헤더를 읽는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningWrong size payload received. (read: {읽은길이}, requested: {요청한길이}, error: {오류내용})원격 DRX로부터 잘못된 길이의 데이터를 받음
연결을 끊는다. (전송중 연결이 끊겨도 발생할 수 있다.)drx_link.cpp
warningReceive payload failed. ({오류번호}: {오류내용})원격 DRX로부터 데이터를 읽는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
errorRX BAB not configuredRX BAB 미설정 상태에서 RX BAB 사용 루틴이 실행됨
연결을 끊는다.drx_link.cpp
infoChannel type received. ({채널유형})원격 DRX로부터 채널 유형을 받음drbd_meta 또는 drbd_data이미 연결된 채널인 경우 연결을 끊는다.drx_link.cpp
warnEvent received ({이벤트유형})원격 DRX로부터 이벤트를 받음
연결을 끊는다.drx_link.cpp
errorUnhandled header received ({이벤트유형값})원격 DRX로부터 알 수 없는 이벤트 유형을 받음
원격 DRX와의 버전이 맞지 않을 가능성이 높다.drx_link.cpp
infoStart TX BAB sender (memlimit: {}, bwlimit: {}, blocksize: {}, min-raw-block-size: {})TX BAB의 데이터를 원격 DRX로 전송하는 작업 시작
압축 또는 암호화 사용시의 시작 메시지drx_link.cpp
infoStart TX BAB sender (memlimit: {}, bwlimit: {}, blocksize: {})TX BAB의 데이터를 원격 DRX로 전송하는 작업 시작
압축/암호화 미사용시의 시작 메시지drx_link.cpp
infoFlushing TX BABTX BAB의 남은 데이터를 모두 DRBD로 전송중
연결이 종료되었을 때 TX BAB의 남은 데이터를 전송하는 과정drx_link.cpp
infoStopping TX BAB senderTX BAB의 데이터를 로컬 DRBD로 전송하는 작업을 종료

drx_link.cpp
errorFailed to pop all datas from TX BABTX BAB를 비우는 작업에 실패
TX BAB를 비우는 도중에 프로그램이 종료되는 경우drx_link.cpp
warningSend event {이벤트유형} failed. ({오류번호}: {오류내용})원격 DRX로 이벤트를 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningSend stream failed. ({오류번호}: {오류내용})원격 DRX로 데이터 스트림을 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp





drx_link.cpp

Outside Connector

c[-md]:o

warningConnect to remote drx failed. [{원격 DRX IP}:{원격 DRX Port}] ({오류번호}: {오류내용})원격 DRX에 접속하는데 실패함
원격 DRX의 가동 상태와 방화벽을 점검해야 한다.drx_link.cpp
infoConnected at [{원격 DRX IP}:{원격 DRX Port}]원격 DRX에 접속됨
소켓 설정과 초기화 패킷 전달을 시작한다.drx_link.cpp
errorSet socket options failed. ({오류내용})원격 DRX와의 소켓 옵션 설정에 실패함
버퍼 크기와 nodelay 설정을 적용하는데 실패함. 연결을 끊는다.drx_link.cpp
warningSend init packet failed. ({오류번호}:{오류내용})원격 DRX로 초기화 패킷을 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningReceive response packet failed. ({오류번호}: {오류내용})원격 DRX로부터 초기화 응답 패킷을 받는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningError while making init conversation between remote drx: {실패유형}원격 DRX로부터 초기화 실패를 받음
연결을 끊는다.drx_link.cpp
warningFailed to receive init packet failed. ({오류번호}: {오류내용})원격 DRX로부터 초기화 패킷을 받는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningSend response packet failed. ({오류번호}: {오류내용})원격 DRX로 초기화 응답 패킷을 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp

Outside Acceptor

a[-md]:o

errorAccept failed. ({오류번호}: {오류내용})DRX의 연결을 기다리는 작업에 실패
포트가 다른곳에서 이미 사용중인 경우가 많다.drx_link.cpp
errorGet remote endpoint failed. ({오류번호}: {오류내용})원격 DRX의 IP/Port를 조회하는데 실패
접속 직후 연결이 끊긴 경우이다.drx_link.cpp
infoAccepted. (client: {원격 DRX IP}:{원격 DRX Port})원격 DRX가 로컬 DRX로 연결됨
소켓 설정과 초기화 패킷 전달을 시작한다.drx_link.cpp
warningReceive init packet failed. ({오류번호}: {오류내용})원격 DRX로부터 초기화 패킷을 받는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningSend response packet failed. ({오류번호}: {오류내용})원격 DRX로 초기화 응답 패킷을 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningSend init packet failed. ({오류번호}: {오류내용})원격 DRX로 초기화 패킷을 전송하는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningReceive response packet failed. ({오류번호}: {오류내용})원격 DRX로부터 초기화 응답 패킷을 받는데 실패함
연결이 이미 끊겼거나 이 이후 연결을 끊는다.drx_link.cpp
warningError while making init conversation between remote drx: {실패유형}원격 DRX로부터 초기화 실패를 받음
연결을 끊는다.drx_link.cpp
errorAccept exception. [{로컬 DRX IP}:{로컬 DRX Port}] ({오류번호}:{오류내용})Acceptor의 연결 및 초기화 과정에서 예외가 발생

drx_link.cpp
errorAccept exception: {오류내용}Acceptor의 연결 및 초기화 과정에서 예외가 발생

drx_link.cpp

TX BAB

RX BAB

info{용량} bytes allocatedBAB에 메모리가 할당됨1GB
allocator.h
errorAllocating {용량} bytes failedBAB 메모리 할당 실패10GB메모리 부족allocator.h
info{용량} bytes freedBAB의 메모리가 해제됨1GB
allocator.h
errorTX BAB is too small. Please set it to {용량} bytes or more.TX BAB의 가용용량이 block-size보다 작다
block-size를 줄이거나 TX BAB의 용량을 늘려야 한다.allocator.h
errorblock-size is too big. Please set it to {} bytes or less.RX BAB의 가용용량이 block-size보다 작다
block-size를 줄여야 한다.allocator.h
errorFailed to allocate memory. {오류내용}BAB에 메모리 할당 실패
메모리 부족ring_buffer.cpp
errorFailed to encrypt packet. buffer_size: {버퍼 길이}, encrypted_size: {암호화된 데이터 길이}암호화 실패 (버퍼 길이 문제)
암호화된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다.packet_processor.cpp
errorFailed to decrypt packet. buffer_size: {버퍼 길이}, decrypted_size: {복호화된 데이터 길이}복호화 실패 (버퍼 길이 문제)
복호화된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다.packet_processor.cpp
errorFailed to decompress packet. buffer_size: {버퍼 길이}, decompressed_size: {해제된 데이터 길이}압축 해제 실패 (버퍼 길이 문제)
압축 해제된 데이터의 길이가 버퍼 길이보다 길어서 버퍼에 담을 수 없다.packet_processor.cpp
errorFailed to decompress at {인덱스} sizes: {원본 데이터 길이}, {버퍼 길이}압축 해제 실패 (기타)
잘못된 데이터이거나 압축 알고리즘을 지원하지 않아 압축 해제 실패.packet_processor.cpp
errorCompress stream error. ({오류 번호})압축 실패
데이터 압축 실패. 오류 번호가 없을 수도 있다.packet_processor.cpp
errorDecompress stream error. ({오류 번호})압축 해제 실패
데이터 압축 해제 실패. 오류 번호가 없을 수도 있다.packet_processor.cpp
errorEncrypt stream error. ({오류 번호})암호화 실패
데이터 암호화 실패. 오류 번호가 없을 수도 있다.packet_processor.cpp
errorDecrypt stream error. ({오류 번호})복호화 실패
데이터 복호화 실패. 오류 번호가 없을 수도 있다.packet_processor.cpp

IPC

태그레벨내용설명비고소스 파일

errorError on accept. ({오류번호}: {오류내용})IPC 서비스의 accept 과정에서 오류가 발생함
ipc_server.cpp
eventsinfoNotification start이벤트 전송 기능 시작
ipc_event_notifier.cpp
infoNotification stopped이벤트 전송 기능 중지
ipc_event_notifier.cpp
warningFailed to get client endpoint. ({오류번호}: {오류내용})IPC 클라이언트의 IP/Port 조회 실패연결 직후 끊긴 경우ipc_event_notifier.cpp
infoclient removed {IP}:{Port}IPC 이벤트 조회 클라이언트의 연결이 종료됨
ipc_event_notifier.cpp
infoclient added {IP}:{Port}IPC 이벤트 조회 클라이언트가 연결됨
ipc_event_notifier.cpp
{IP}:{Port}warningData transfer failed. ({오류번호}: {오류내용})IPC 클라이언트로 데이터 전송 실패
ipc_server.cpp
errorError on payload. ({오류내용})IPC 서비스의 처리과정에서 오류가 발생함
ipc_server.cpp

crash_handler

레벨내용설명값의 예비고소스 파일
infoSignal: {시그널유형}IPC 서비스의 accept 과정에서 오류가 발생함SIGINT 또는 SIGTERM실행중 Ctrl+C를 입력한 경우 SIGINT, 외부에서 프로세스를 종료하는 경우 SIGTERM이 발생한다. 이 메시지 이후 프로그램을 정상 종료한다.handler.cpp
warningFailed to register signal handler for {시그널유형}해당 시그널 핸들러의 등록에 실패함SIGABRT, SIGFPE, SIGILL, SIGSEGV비정상 종료시 호출 스택을 출력하기 위한 시그널 등록에 실패함.handler.cpp
criticalSignal handling비정상 종료 시그널 발생 (Linux)
프로그램 시그널 핸들링 방식으로 비정상 종료 상황을 핸들링함.handler.cpp
criticalException handling (Unhandled)비정상 종료 시그널 발생 (Windows)
Windows API를 사용하여 비정상 종료 상황을 핸들링함.handler.cpp
criticalException handling (Vectored)비정상 종료 시그널 발생 (Windows)
Windows API를 사용하여 비정상 종료 상황을 핸들링함.handler.cpp
criticalFatal exception: {예외유형}
stackdump [프레임] {심볼주소} {함수명 } ({파일명:라인번호})
발생한 예외 출력

발생한 예외 종류와 호출 스택 출력stacktrace_linux.cpp
stacktrace_windows.cpp