sendsyslog-tcp
입력되는 데이터를 TCP 프로토콜을 통해 시스로그 메시지로 원격 서버에 전송합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 미지원 |
| 분산 실행 | 미지원 |
문법
옵션
dst=IP- 시스로그 수신 서버의 IP 주소
port=INT- 시스로그 수신 서버의 포트 번호 (기본값:
514) format={txt|json}- 시스로그 본문 형식 (기본값:
txt)
txt: 입력 레코드의line필드 값을 그대로 전송json: 입력 레코드 전체를 JSON 형식으로 변환하여 전송._id,_table,_time필드는 제외됨
pri=INT-
RFC 5424에 정의된 PRI 값. 기본값 134는
local0시설과info심각도에 해당합니다. (기본값:134) -
PRI 값은 Facility 값의 8배수에 Severity 값을 더한 값입니다.
Facility / Severity 0/Emer 1/Alert 2/Crit 3/Error 4/Warn 5/Notice 6/Info 7/Debug 0 / kern 0 1 2 3 4 5 6 7 1 / user 8 9 10 11 12 13 14 15 2 / mail 16 17 18 19 20 21 22 23 3 / daemon 24 25 26 27 28 29 30 31 4 / auth 32 33 34 35 36 37 38 39 5 / syslog 40 41 42 43 44 45 46 47 6 / lpr 48 49 50 51 52 53 54 55 7 / news 56 57 58 59 60 61 62 63 8 / uucp 64 65 66 67 68 69 70 71 9 / clock 72 73 74 75 76 77 78 79 10 / authpriv 80 81 82 83 84 85 86 87 11 / ftp 88 89 90 91 92 93 94 95 12 / ntp 96 97 98 99 100 101 102 103 13 / audit 104 105 106 107 108 109 110 111 14 / alert 112 113 114 115 116 117 118 119 15 / solaris-cron 120 121 122 123 124 125 126 127 16 / local0 128 129 130 131 132 133 134 (기본값) 135 17 / local1 136 137 138 139 140 141 142 143 18 / local2 144 145 146 147 148 149 150 151 19 / local3 152 153 154 155 156 157 158 159 20 / local4 160 161 162 163 164 165 166 167 21 / local5 168 169 170 171 172 173 174 175 22 / local6 176 177 178 179 180 181 182 183 23 / local7 184 185 186 187 188 189 190 191 framing={lf|rfc6587}-
TCP 시스로그 프레이밍 방식 (기본값:
lf)
lf: 줄바꿈(LF) 문자로 메시지를 구분rfc6587: RFC 6587에 정의된 옥텟 카운팅 방식으로 메시지를 구분
입력 필드
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
line | 문자열 | format=txt인 경우 필수 | 시스로그 본문으로 전송할 텍스트. null이면 빈 문자열을 전송합니다. |
출력 필드
입력 레코드의 필드를 그대로 전달합니다.
오류 코드
파싱 오류
| 오류 코드 | 메시지 | 설명 |
|---|---|---|
| 24100 | sendsyslog-tcp 명령어에 dst 옵션을 지정하세요. | dst 옵션이 지정되지 않은 경우 |
| 24101 | sendsyslog-tcp 명령어에 port 옵션을 지정하세요. | port 옵션이 지정되지 않은 경우 |
| 24102 | sendsyslog-tcp 명령어의 dst 옵션을 유효한 호스트 주소로 지정하세요. | dst 옵션에 유효하지 않은 호스트 주소를 지정한 경우 |
| 24103 | sendsyslog-tcp 명령어의 port 옵션 값을 1-65535 사이의 유효한 포트 값으로 지정하세요. | port 옵션에 1~65535 범위를 벗어난 값을 지정한 경우 |
| 24104 | sendsyslog-tcp 명령어의 pri 옵션에 유효한 값을 입력하세요. | pri 옵션에 정수가 아닌 값을 지정한 경우 |
| 24105 | sendsyslog-tcp 명령어의 framing 옵션은 lf 또는 rfc6587로 지정해야 합니다. | framing 옵션에 lf 또는 rfc6587 이외의 값을 지정한 경우 |
| 24106 | sendsyslog-tcp 명령어의 format 옵션은 txt 또는 json으로 지정해야 합니다. | format 옵션에 txt 또는 json 이외의 값을 지정한 경우 |
런타임 오류
해당 사항 없음
설명
sendsyslog-tcp 명령어는 입력되는 레코드마다 TCP 시스로그 메시지를 생성하여 지정한 원격 서버로 전송합니다. UDP를 사용하는 sendsyslog 명령어와 달리 TCP 프로토콜을 사용하므로 전송 신뢰성이 더 높습니다.
시스로그 메시지는 <PRI>본문 형식으로 구성됩니다. format=txt일 때는 입력 레코드의 line 필드 값을 본문으로 사용합니다. format=json일 때는 입력 레코드 전체를 JSON으로 변환하여 본문으로 사용하되, _id, _table, _time 필드는 제외합니다. RFC 3164/RFC 5424의 타임스탬프·호스트 이름 헤더는 포함되지 않으며 인코딩은 UTF-8입니다. PRI 값이 134일 때 본문 예는 다음과 같습니다.
<134>{"src_ip":"192.168.0.10","src_port":52344,"dst_ip":"10.0.0.5","dst_port":443,"protocol":"tcp","bytes":1480}
각 필드 타입은 다음 규칙으로 JSON 값으로 변환됩니다.
| 로그프레소 타입 | JSON 표현 |
|---|---|
| 문자열 | JSON 문자열 |
정수, 실수 (int, long, double 등) | JSON 숫자 |
| 불리언 | true / false |
null | null |
| 날짜 | "yyyy-MM-dd HH:mm:ssZ" 형식 문자열 (예: "2026-05-04 13:45:00+0900") |
| IP 주소 | 주소 문자열 (예: "192.168.0.10") |
| UUID | UUID 문자열 |
| 바이너리 | 소문자 16진수 문자열 |
| 배열 | JSON 배열 (각 요소를 위 규칙으로 재귀 변환) |
| 맵 | JSON 객체 (값을 위 규칙으로 재귀 변환) |
JSON 객체 내 키 순서는 보장되지 않으므로, 수신 측 파서는 키 이름을 기준으로 동작하도록 작성하세요. 수신 측에서 시간 정보가 필요하다면 eval 명령어로 _time을 별도 필드에 복사한 뒤 전달하세요.
framing 옵션으로 TCP 스트림에서 메시지를 구분하는 방식을 지정합니다. lf는 줄바꿈 문자로 메시지를 구분하고, rfc6587은 메시지 길이를 접두사로 붙여 구분합니다.
전송 성공 여부와 관계없이 입력 레코드를 그대로 다음 명령어로 전달합니다. 전송 오류가 발생하면 첫 번째 오류만 로그에 기록하고 이후 동일한 오류는 억제합니다.
TCP 연결이 끊기거나 지연이 발생하면 메시지 큐가 적체될 수 있습니다. 30초 이내에 전송되지 못한 메시지는 버립니다. 다음 JVM 옵션으로 큐 관리 동작을 조정할 수 있습니다.
| JVM 옵션 | 설명 | 값 |
|---|---|---|
-Dlogpresso.tcp_sender.idle_timeout | 서버에서 응답이 없을 때 전송을 중단할 기준 | 1~86400초 (기본값: 300) |
-Dlogpresso.tcp_sender.max_queue_time | 전송 시간이 오래 걸릴 때 전송을 중단할 기준 | 1~600초 (기본값: 30) |
-Dlogpresso.tcp_sender.max_queue_chars | 적체된 문자열이 너무 많을 때 전송을 중단할 기준 | 1,000,000~1,000,000,000 문자 (기본값: 100,000,000) |
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
텍스트 형식으로 TCP 시스로그 전송
table limit=100 WEB_APACHE_SAMPLE | sendsyslog-tcp dst=198.51.100.10WEB_APACHE_SAMPLE의line필드를 TCP 시스로그로198.51.100.10:514에 전송합니다. -
JSON 형식으로 TCP 시스로그 전송
table limit=100 WEB_APACHE_SAMPLE | sendsyslog-tcp dst=198.51.100.10 port=1514 format=jsonWEB_APACHE_SAMPLE의 모든 필드를 JSON 형식으로 변환하여198.51.100.10:1514에 TCP 시스로그로 전송합니다. -
RFC 6587 프레이밍 사용
table limit=100 WEB_APACHE_SAMPLE | sendsyslog-tcp dst=198.51.100.10 port=1514 format=json framing=rfc6587RFC 6587 옥텟 카운팅 프레이밍 방식을 사용하여 JSON 형식의 시스로그를 TCP로 전송합니다.
-
PRI 값 지정
table limit=100 WEB_APACHE_SAMPLE | search status >= 400 | sendsyslog-tcp dst=198.51.100.10 pri=165오류 응답(HTTP 400 이상)만 필터링하여 PRI 값을 165(
local4+notice)로 설정한 TCP 시스로그로 전송합니다.
호환성
sendsyslog-tcp 명령어는 소나 4.0.2404.0부터 제공되었습니다.