콘텐츠로 이동

데이터 전송


장기 보관이 필요하지만 업데이트 빈도가 낮은 데이터(예: 로그)는 데이터 전송 기능을 통해 자동으로 오브젝트 스토리지에 저장하거나 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

    전송 규칙 관리

    데이터 전송 규칙 목록에서 일련의 작업을 통해 관리할 수 있습니다.

    문서 평가

    이 페이지가 도움이 되었나요?