データ転送¶
更新頻度が低く長期間保存が必要なデータ(ログなど)は、データ転送機能を使用してオブジェクトストレージに自動保存したり、Kafka などの外部システムにリアルタイム転送したりできます。この機能はルールに従って必要なデータをフィルタリングし、低コストでの長期アーカイブを実現すると同時に、その後の二次加工処理もサポートします。
ルールが有効になると、データ転送ページでクエリ期間とルールを設定することで、保存済みデータをすばやく検索できます。
機能の仕組み¶
データがオブジェクトストレージに転送される際のワークフローは次のとおりです。ルールに一致するユーザーが報告したデータは、まずサーバーのローカルディスクにある一時ファイルに行単位で書き込まれます。この一時ファイルのサイズがプリセット値(例:256MB)に達するか、または継続書き込み時間が設定時間(例:1時間)を超えると、システムは自動的に現在のファイルを閉じて新しい一時ファイルを作成し、データの受信を続行します。
同時に、バックグラウンドサービスがこれらの閉じられた一時ファイルを継続的にスキャンし、gzip 形式で圧縮してサイズを縮小した後、事前に定義されたパスルールに従って、指定されたオブジェクトストレージの場所にアップロードします。保存されたデータを検索する必要がある場合、システムは同じパスルールに従ってオブジェクトストレージ内の関連ファイルを特定し、それらをダウンロード、解凍し、入力された検索条件に1行ずつマッチングします。
ファイル形式の説明¶
オブジェクトストレージに最終的に保存されるファイル形式は、gzip 圧縮されています。解凍後、ファイルの内容は複数行のテキストとして表示され、各行は元のデータレコード1件に対応し、データは 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 |
オプション。バックアップルール作成時のストレージパスオプションに対応します。 オブジェクトストレージは / で始まるキーをサポートしていないため、/ で始めないでください。 |
$workspace_uuid |
ワークスペース ID | wksp_d9a1851859e040469d290409bc17cceb |
|
$data_type |
バックアップデータタイプ。指定可能な値:logging:ログrum:リアルユーザーモニタリング(RUM)tracing:分散型トレーシング(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
ファイル分割ルール
- 時間境界:単一ファイルには同じ時間内のログのみが含まれ、時間をまたぐことはありません。
- サイズ境界:未圧縮の元のファイルは 256 MB~512 MB に制御され、gzip 圧縮後は通常数十 MB~数百 MB になります。大きすぎたり小さすぎたりすると、検索効率が低下します。
外部ファイルをデータ転送ルールで生成された形式とパスルールに従ってオブジェクトストレージにアップロードすると、コンソールは同じ方法で検索および表示を行います。
はじめに¶
転送ルールを作成¶
転送先の種類に基づいて、ビジネスニーズに合ったデータ転送ルールを確立します。
| 種類 | 転送先 |
|---|---|
| 内蔵ストレージ | Guance |
| オブジェクトストレージ | AWS S3、Huawei Cloud OBS、Alibaba Cloud OSS、Volcengine TOS、Google Cloud GCS |
| 分析プラットフォーム | Apache Doris、TiDB Cloud Lake |
| メッセージキュー | Kafka |
転送ルールを管理¶
データ転送ルール一覧では、一連の操作を通じて管理を行うことができます。