데이터 전송¶
장기 보관이 필요하지만 업데이트 빈도가 낮은 데이터(예: 로그)는 데이터 전송 기능을 통해 자동으로 오브젝트 스토리지에 저장하거나 Kafka와 같은 외부 시스템으로 실시간 전송할 수 있습니다. 이 기능은 규칙에 따라 사용자에게 필요한 데이터를 필터링하여 저비용 장기 아카이빙을 실현하고, 이후 추가적인 2차 가공 처리도 지원합니다.
규칙이 적용된 후 데이터 전송 페이지에서 조회 기간과 규칙을 설정하면 저장된 데이터를 빠르게 검색할 수 있습니다.
기능 원리¶
데이터가 오브젝트 스토리지로 전송될 때의 워크플로는 다음과 같습니다. 규칙에 맞는 사용자 업로드 데이터는 먼저 서버 로컬 디스크의 임시 파일에 한 줄씩 기록됩니다. 이 임시 파일의 크기가 사전 설정된 값(예: 256MB)에 도달하거나 지속적인 쓰기 시간이 설정된 시간(예: 1시간)을 초과하면 시스템은 자동으로 현재 파일을 닫고 새 임시 파일을 생성하여 계속 데이터를 수신합니다.
동시에 백그라운드 서비스는 닫힌 임시 파일들을 지속적으로 스캔하여 gzip 형식으로 압축하여 크기를 줄인 후, 미리 정의된 경로 규칙에 따라 지정된 오브젝트 스토리지 위치에 업로드합니다. 저장된 데이터를 검색해야 할 때 시스템은 동일한 경로 규칙에 따라 오브젝트 스토리지에서 관련 파일을 찾아 다운로드, 압축 해제한 후 입력한 검색 조건과 한 줄씩 매칭합니다.
파일 형식 설명¶
오브젝트 스토리지에 최종 저장되는 파일 형식은 gzip으로 압축되어 있습니다. 압축을 풀면 파일 내용은 여러 줄의 텍스트로 표시되며, 각 줄은 하나의 원본 데이터 레코드에 해당하고 데이터는 JSON 형식으로 완전하게 저장됩니다. 파일의 빈 줄은 시스템에서 자동으로 무시됩니다.
일반적인 로그 유형의 데이터 전송 파일 예시는 다음과 같습니다.
date는 필수 필드로, 해당 데이터의 시간을 나타내며 밀리초 단위의 Unix 타임스탬프이고, message 필드는 실제 로그 내용입니다.
{"__docid":"L_1750649205520_d1cciupkac7k1683bhq0","__namespace":"backup_log","date":1750649205520,"date_ns":168000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/gin.log","host":"X.local","log_read_lines":2,"message":"[GIN] 2025/06/23 - 11:26:43 | 200 | 1.012923708s | 127.0.0.1 | GET \"/metrics\"","message_length":87,"service":"default","source":"default","status":"unknown"}
{"__docid":"L_1750649205516_d1cciupkac7k1683bhqg","__namespace":"backup_log","date":1750649205516,"date_ns":897000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/gin.log","host":"X.local","log_read_lines":1,"message":"[GIN] 2025/06/23 - 11:26:38 | 200 | 1.012696542s | 127.0.0.1 | GET \"/metrics\"","message_length":87,"service":"default","source":"default","status":"unknown"}
{"__docid":"L_1750649206520_d1cciupkac7k1683bhr0","__namespace":"backup_log","date":1750649206520,"date_ns":948000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/log","host":"X.local","log_read_lines":150,"message":"2025-06-23T11:26:46.520+0800\tWARN\thost_processes\tprocess/input.go:332\tprocess: {\"pid\":411}, proc.PageFaults(): not implemented yet","message_length":130,"service":"default","source":"default","status":"unknown"}
{"__docid":"L_1750649205520_d1cciupkac7k1683bhrg","__namespace":"backup_log","date":1750649205520,"date_ns":419000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/log","host":"X.local","log_read_lines":9,"message":"2025-06-23T11:26:43.876+0800\tWARN\tcontainer\tcontainer/impl.go:254\tendpoint unix:///var/run/crio/crio.sock does not exist, maybe it is not running, skip","message_length":151,"service":"default","source":"default","status":"unknown"}
{"__docid":"L_1750649205517_d1cciupkac7k1683bhs0","__namespace":"backup_log","date":1750649205517,"date_ns":79000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/log","host":"X.local","log_read_lines":1,"message":"2025-06-23T11:26:38.365+0800\tWARN\thttp\thttpapi/http.go:494\tlistener.Close failed: close tcp [::]:9529: use of closed network connection","message_length":135,"service":"default","source":"default","status":"unknown"}
{"__docid":"L_1750649205517_d1cciupkac7k1683bhsg","__namespace":"backup_log","date":1750649205517,"date_ns":80000,"df_metering_size":-9223372036854775808,"filepath":"/var/log/datakit/log","host":"X.local","log_read_lines":2,"message":"2025-06-23T11:26:38.365+0800\tWARN\thttp\thttpapi/http.go:494\tlistener.Close failed: close tcp [::]:9529: use of closed network connection","message_length":135,"service":"default","source":"default","status":"unknown"}
파일 이름 및 저장 경로¶
[{$path_prefix}/]{$workspace_uuid}/[{$data_type}/]
{$rule_name}/{$year}/{$month}/{$day}/{$hour}/{$time}-{$hostname}.gz
[]로 묶인 부분은 "선택 사항"을 의미합니다. 자세한 내용은 아래 설명을 참조하세요.
변수 |
설명 |
예시 | 비고 |
|---|---|---|---|
$path_prefix |
경로 접두사 | path/to/backup |
선택 사항, 새 백업 규칙 생성 시 저장 경로 옵션에 해당 오브젝트 스토리지는 /로 시작하는 key를 지원하지 않으므로 /로 시작하지 마세요 |
$workspace_uuid |
워크스페이스 ID | wksp_d9a1851859e040469d290409bc17cceb |
|
$data_type |
백업 데이터 유형, 가능한 값:logging : 로그rum : 실제 사용자 모니터링(RUM)tracing : 분산 추적event : 이벤트audit_event : 감사 이벤트 |
tracing |
로그는 기본 데이터 유형이므로 로그 유형 데이터의 경우 {$data_type}/ (즉 logging/) 부분은 생략합니다 |
$rule_name |
규칙 이름 | backup_logging_for_test |
새 규칙 생성 시 규칙 이름 옵션에 해당 영문 사용 권장 |
$year |
로그 발생 시간의 연도, 4자리 | 2025 |
UTC 시간대 |
$month |
로그 발생 시간의 월, 2자리 | 03 |
UTC 시간대 |
$day |
로그 발생 시간의 일, 2자리 | 01 |
UTC 시간대 |
$hour |
로그 발생 시간의 시, 2자리 | 22 |
UTC 시간대 |
$time |
파일 내 마지막 로그의 발생 시간 형식: 시시분분초초 + 3자리 밀리초 |
220607889 |
UTC 시간대 |
$hostname |
호스트 이름을 MD5로 계산한 후 앞 16자리 | c6a92aafa992599c |
파일을 직접 구성하는 경우 현재 파일의 crc64를 사용하거나 64비트 난수를 생성하여 16진수로 변환하여 사용할 수 있습니다 |
경로 예시:
wksp_d9a1851859e040469d290409bc17cceb/backup_logging_for_test/2025/05/06/17/175950000-c6a92aafa992599c.gz
path/to/backup/wksp_d9a1851859e040469d290409bc17cceb/tracing/test-minio/2025/05/06/17/175950000-c6a92aafa992599c.gz
파일 분할 규칙
- 시간 기준: 단일 파일은 동일한 시간 내의 로그만 포함하며, 시간을 넘지 않습니다
- 크기 기준: 압축되지 않은 원본 파일은 256MB ~ 512MB 사이로 제어되며, gzip 압축 후 일반적으로 수십 MB ~ 수백 MB입니다. 너무 크거나 작으면 검색 효율이 저하됩니다
외부 파일을 데이터 전송 규칙에 따라 생성된 형식 및 경로 규칙에 맞춰 오브젝트 스토리지에 업로드하면 콘솔에서 동일한 방식으로 검색하고 표시합니다.
시작하기¶
전송 규칙 생성¶
다양한 전송 대상 유형에 따라 비즈니스 요구 사항에 맞는 데이터 전송 규칙을 생성합니다.
| 유형 | 전송 대상 |
|---|---|
| 내장 스토리지 | Guance |
| 오브젝트 스토리지 | AWS S3, Huawei Cloud OBS, Alibaba Cloud OSS, Volcengine TOS, Google Cloud GCS |
| 분석 플랫폼 | Apache Doris, TiDB Cloud Lake |
| 메시지 큐 | Kafka |
전송 규칙 관리¶
데이터 전송 규칙 목록에서 일련의 작업을 통해 관리할 수 있습니다.