rsdatakit
rsdatakit は Rust 製の軽量コレクターで、Linux ホストと Kubernetes ノードを対象とし、 DataKit/Guance Point v2 形式でデータを Dataway に送信します。
機能概要¶
| モジュール | 既定の状態 | 収集内容 |
|---|---|---|
| ホスト | 有効 | cpu、mem、disk、diskio、net、system メトリクスと HOST オブジェクト。 |
| ログ | 無効 | ファイルログ、systemd journal、読み取り再開、複数行の結合、ファイルローテーション。 |
| OpenTelemetry | 無効 | OTLP/HTTP または OTLP/gRPC で Trace を受信。 |
| Kubernetes | 無効 | ローカルノードの Pod/コンテナのメトリクス、オブジェクト、ログ、Kubernetes メタデータの付加。 |
| Prometheus | 無効 | ノードローカルのターゲット検出と Prometheus/OpenMetrics のスクレイピング。 |
現在 Linux amd64 と arm64 に対応しています。Windows、macOS、OTLP Metrics、OTLP Logs、
eBPF、外形監視、リモート設定、DataKit プラグインシステムには対応していません。
DataKit との互換性
実装済みデータでは DataKit 互換のメトリクスセット、オブジェクト分類、主要フィールド名を使用するため、 これらに依存するビューを再利用できます。本書に記載のない DataKit 固有のフィールドは生成されず、対応するグラフが空になる場合があります。
実行要件¶
- Linux ホストから
/procと/sysにアクセスできる必要があります。journald 収集には systemd journal ランタイムも必要です。 - インストールスクリプトで
rsdatakitを管理するには systemd とsystemctlが必要です。 - Kubernetes 収集は対象ノードで DaemonSet として実行し、Pod メタデータ、Kubelet Summary、 ホストのコンテナログディレクトリを読み取れる必要があります。
- 有効な Dataway アドレスと token が必要です。設定ファイルと状態ディレクトリへのアクセスは実行ユーザーのみに制限してください。
インストール¶
インストールスクリプトは Linux amd64 と arm64 に対応し、root または sudo が必要です。systemd で
サービスを管理します。最新版のインストール:
RSDATAKIT_DATAWAY_URL="https://openway.guance.com" \
RSDATAKIT_DATAWAY_TOKEN="<DATAWAY_TOKEN>" \
sh -c "$(curl -fsSL https://static.guance.com/rsdatakit/install.sh)"
特定のバージョンでは <VERSION> を完全なバージョン番号に置き換えます:
RSDATAKIT_DATAWAY_URL="https://openway.guance.com" \
RSDATAKIT_DATAWAY_TOKEN="<DATAWAY_TOKEN>" \
sh -c "$(curl -fsSL https://static.guance.com/rsdatakit/install-<VERSION>.sh)"
スクリプトはアーキテクチャの選択、パッケージ検証、バイナリと systemd unit のインストールを行い、
rsdatakit.service を起動します。既定の設定ファイルは /etc/rsdatakit/rsdatakit.toml です。
最新版への更新では RSDATAKIT_UPGRADE=1 を設定します:
更新ではバイナリを置き換えてサービスを再起動し、/etc/rsdatakit/rsdatakit.toml と
/var/lib/rsdatakit 内の WAL と収集状態を保持します。Dataway も変更する場合は、更新コマンドに
新しい RSDATAKIT_DATAWAY_URL と RSDATAKIT_DATAWAY_TOKEN を渡します。特定のバージョンに更新する場合は、
install-<VERSION>.sh を使用します。
RSDATAKIT_INSTALL_ONLY=1 でサービスを起動せずにインストール・更新できます。完了後に確認します:
RustDataKit は DaemonSet として各 Linux ノードに 1 インスタンスを配置します。マニフェストは、
linux/amd64 と linux/arm64 対応のマルチアーキテクチャイメージを使用します。
まず最新版の rsdatakit.yaml をダウンロードします:
特定のバージョンをインストールするには <VERSION> を完全なバージョン番号に置き換えます:
マニフェストの Dataway URL、ワークスペース token、OTLP token は Kubernetes Secret で指定します。 名前空間を作成して実際の設定を登録します:
kubectl create namespace rsdatakit-system --dry-run=client -o yaml | kubectl apply -f -
kubectl -n rsdatakit-system create secret generic rsdatakit-secrets \
--from-literal=dataway-url='https://openway.guance.com' \
--from-literal=dataway-token='<DATAWAY_TOKEN>' \
--from-literal=otlp-token='<OTLP_TOKEN>' \
--dry-run=client -o yaml | kubectl apply -f -
別の Dataway ノードを使う場合は dataway-url を実際のアドレスに変更します。OTLP 受信を使わない場合、
otlp-token は空文字列にできます。
YAML を適用します:
インストール後に DaemonSet と Pod の状態を確認します:
kubectl -n rsdatakit-system rollout status daemonset/rsdatakit
kubectl -n rsdatakit-system get pods -l app.kubernetes.io/name=rsdatakit
実行ログを確認します:
設定¶
既定の設定パスは /etc/rsdatakit/rsdatakit.toml です。--config <path> または
RSDATAKIT_CONFIG で別のファイルを指定できます。設定は起動時のみ読み込むため、変更後は再起動してください。
最小構成:
[agent]
# Local state directory for the WAL and file-log read positions. Must be absolute.
state_dir = "/var/lib/rsdatakit"
# Optional standalone health-listener address. Leave empty to disable it.
health_addr = ""
[dataway]
# Workspace Dataway endpoint.
url = "https://openway.example.com"
# Workspace token.
token = "<DATAWAY_TOKEN>"
# Per-request Dataway timeout in seconds. Valid range: 1–60.
timeout_secs = 15
# Tags added to all reported data.
global_tags = { env = "prod" }
# Target index. Uses the workspace default index when empty.
storage_index = ""
[metrics]
# Host metrics collection interval in seconds. Valid range: 5–300.
interval_secs = 15
# Mount points whose capacity is collected. Maximum: 32. Each must be absolute.
mounts = ["/"]
# Also collect virtual interfaces such as veth, docker0, and cni.
enable_virtual_interfaces = false
[hostobject]
# HOST object reporting interval in seconds. Valid range: 60–3600.
interval_secs = 300
[wal]
# Local write-ahead log directory. Must be absolute.
dir = "/var/lib/rsdatakit/wal"
# Total WAL capacity in bytes. Valid range: 4 MiB–256 MiB; the oldest unsent data is evicted when full.
max_bytes = 268435456
agent.state_dir、logs.state_dir、wal.dir は絶対パスにしてください。WAL の既定容量は
256 MiB です。許容する Dataway 停止時間とログ/Trace の書き込み量に応じて wal.max_bytes を調整してください。
起動時の RSDATAKIT_DATAWAY_URL と RSDATAKIT_DATAWAY_TOKEN で設定のアドレスと token を上書きできます。RSDATAKIT_HEALTH_ADDR は独立したヘルスチェックのアドレスを上書きします。
ホスト収集¶
ホストメトリクスと HOST オブジェクトは既定で有効です。追加の enabled 設定は不要です。
| データ | measurement / object | 既定の頻度 | 説明 |
|---|---|---|---|
| CPU | cpu |
15 秒 | CPU 使用率の集計。 |
| メモリ | mem |
15 秒 | 容量、キャッシュ、使用量、割合。 |
| ディスク容量 | disk |
15 秒 | [metrics].mounts に指定したマウントのみ収集。既定は /。 |
| ディスク I/O | diskio |
15 秒 | ブロックデバイスの累積値、読み書き速度、await。 |
| ネットワーク | net |
15 秒 | 既定では UP 状態の非仮想インターフェースのみ。 |
| システム | system |
15 秒 | 負荷、CPU/メモリ使用率、プロセス数、稼働時間。 |
| ホストオブジェクト | HOST |
300 秒 | ホスト識別情報、OS、基本リソース情報。 |
ホストメトリクスの間隔は 5~300 秒、HOST は 60~3600 秒です。CPU、ネットワーク、ディスク I/O の速度は
前後 2 回のサンプルに依存するため、起動直後の初回は速度フィールドがない場合があります。
メトリクス¶
以下は rsdatakit が実際に送信するフィールドのみです。名前は DataKit の同名メトリクスセットと互換性がありますが、 DataKit コレクターのすべての拡張フィールドを実装しているわけではありません。
cpu¶
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| cpu ( tag) |
CPU 識別子。現在は全 CPU の集計を示す cpu-total に固定。 |
| usage_user | CPU 時間に占めるユーザーモードの割合。 Type: float | (gauge) Unit: percent |
| usage_nice | CPU 時間に占める低優先度ユーザーモードの割合。 Type: float | (gauge) Unit: percent |
| usage_system | CPU 時間に占めるカーネルモードの割合。 Type: float | (gauge) Unit: percent |
| usage_idle | CPU 時間に占めるアイドルの割合。 Type: float | (gauge) Unit: percent |
| usage_iowait | CPU 時間に占めるI/O 待機の割合。 Type: float | (gauge) Unit: percent |
| usage_irq | CPU 時間に占めるハードウェア割り込み処理の割合。 Type: float | (gauge) Unit: percent |
| usage_softirq | CPU 時間に占めるソフトウェア割り込み処理の割合。 Type: float | (gauge) Unit: percent |
| usage_steal | CPU 時間に占める仮想環境で他システムに使用される時間の割合。 Type: float | (gauge) Unit: percent |
| usage_guest | CPU 時間に占めるゲスト仮想 CPU の実行の割合。 Type: float | (gauge) Unit: percent |
| usage_guest_nice | CPU 時間に占める低優先度ゲスト仮想 CPU の実行の割合。 Type: float | (gauge) Unit: percent |
| usage_total | CPU 使用率の集計。 Type: float | (gauge) Unit: percent |
mem¶
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| total | 物理メモリの総バイト数。 Type: int | (gauge) Unit: digital,B |
| available | カーネルが推定する現在の使用可能メモリのバイト数。 Type: int | (gauge) Unit: digital,B |
| used | 使用メモリ。total - free - buffered - cached で計算。Type: int | (gauge) Unit: digital,B |
| free | 未使用メモリのバイト数。 Type: int | (gauge) Unit: digital,B |
| buffered | カーネル buffer の使用バイト数。 Type: int | (gauge) Unit: digital,B |
| cached | page cache と回収可能な slab の使用バイト数。 Type: int | (gauge) Unit: digital,B |
| used_percent | 総メモリに対する使用メモリの割合。 Type: float | (gauge) Unit: percent |
| available_percent | 総メモリに対する使用可能メモリの割合。 Type: float | (gauge) Unit: percent |
disk¶
[metrics].mounts のマウントごとに 1 Point を生成。
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| device ( tag) |
マウントのデバイス名。不明なら unknown。 |
| fstype ( tag) |
ファイルシステムの種類。不明なら unknown。 |
| mount_point ( tag) |
マウントパス。 |
| total | ファイルシステムの総容量。 Type: int | (gauge) Unit: digital,B |
| free | ファイルシステムの使用可能容量。 Type: int | (gauge) Unit: digital,B |
| used | ファイルシステムの使用容量。 Type: int | (gauge) Unit: digital,B |
| used_percent | ファイルシステムの使用率。 Type: float | (gauge) Unit: percent |
| inodes_total | inode 総数。ファイルシステムから情報が得られない場合は生成しません。 Type: int | (gauge) Unit: count |
| inodes_free | 空き inode 数。 Type: int | (gauge) Unit: count |
| inodes_used | 使用中の inode 数。 Type: int | (gauge) Unit: count |
| inodes_total_mb | inodes_total / 1,000,000 の互換フィールド。Type: int | (gauge) |
| inodes_free_mb | inodes_free / 1,000,000 の互換フィールド。Type: int | (gauge) |
| inodes_used_mb | inodes_used / 1,000,000 の互換フィールド。Type: int | (gauge) |
| inodes_used_percent | inode 使用率。 Type: float | (gauge) Unit: percent |
diskio¶
I/O カウンターを持つ Linux ブロックデバイスごとに 1 Point を生成。
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| name ( tag) |
ブロックデバイスのパス(例:/dev/vda)。 |
| serial ( tag) |
udev のデバイスシリアル番号。不明なら unknown。 |
| reads | 起動後に完了した読み取り要求数。 Type: int | (count) Unit: count |
| writes | 起動後に完了した書き込み要求数。 Type: int | (count) Unit: count |
| merged_reads | 結合された読み取り要求の累積数。 Type: int | (count) Unit: count |
| merged_writes | 結合された書き込み要求の累積数。 Type: int | (count) Unit: count |
| read_bytes | 累積読み取りバイト数。 Type: int | (count) Unit: digital,B |
| write_bytes | 累積書き込みバイト数。 Type: int | (count) Unit: digital,B |
| read_time | 累積読み取り時間。 Type: int | (count) Unit: ms |
| write_time | 累積書き込み時間。 Type: int | (count) Unit: ms |
| io_time | デバイスの累積 I/O 実行時間。 Type: int | (count) Unit: ms |
| weighted_io_time | 重み付き累積 I/O 時間。 Type: int | (count) Unit: ms |
| iops_in_progress | 処理中の I/O 要求数。 Type: int | (gauge) Unit: count |
| read_bytes/sec | 収集期間の平均読み取り速度。初回は生成しません。 Type: int | (gauge) Unit: traffic,B/s |
| write_bytes/sec | 収集期間の平均書き込み速度。初回は生成しません。 Type: int | (gauge) Unit: traffic,B/s |
| await | 収集期間内の読み書き要求ごとの平均待機時間。初回は生成しません。 Type: float | (gauge) Unit: ms |
net¶
フィルター条件を満たし、前回のサンプルがあるネットワークインターフェースごとに 1 Point を生成。
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| interface ( tag) |
ネットワークインターフェース名。 |
| bytes_sent | インターフェースの累積送信バイト数。 Type: int | (count) Unit: digital,B |
| bytes_recv | インターフェースの累積受信バイト数。 Type: int | (count) Unit: digital,B |
| packets_sent | インターフェースの累積送信パケット数。 Type: int | (count) Unit: count |
| packets_recv | インターフェースの累積受信パケット数。 Type: int | (count) Unit: count |
| err_in | インターフェースの累積受信エラー数。 Type: int | (count) Unit: count |
| err_out | インターフェースの累積送信エラー数。 Type: int | (count) Unit: count |
| drop_in | インターフェースの累積受信破棄パケット数。 Type: int | (count) Unit: count |
| drop_out | インターフェースの累積送信破棄パケット数。 Type: int | (count) Unit: count |
| bytes_sent/sec | 収集期間の毎秒送信バイト数。 Type: int | (gauge) Unit: traffic,B/s |
| bytes_recv/sec | 収集期間の毎秒受信バイト数。 Type: int | (gauge) Unit: traffic,B/s |
| packets_sent/sec | 収集期間の毎秒送信パケット数。 Type: int | (gauge) Unit: count/s |
| packets_recv/sec | 収集期間の毎秒受信パケット数。 Type: int | (gauge) Unit: count/s |
system¶
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| load1 | 直近 1 分間のシステム負荷。 Type: float | (gauge) |
| load1_per_core | 直近 1 分間の負荷を論理 CPU 数で割った値。 Type: float | (gauge) |
| load5 | 直近 5 分間のシステム負荷。 Type: float | (gauge) |
| load5_per_core | 直近 5 分間の負荷を論理 CPU 数で割った値。 Type: float | (gauge) |
| load15 | 直近 15 分間のシステム負荷。 Type: float | (gauge) |
| load15_per_core | 直近 15 分間の負荷を論理 CPU 数で割った値。 Type: float | (gauge) |
| n_cpus | プロセスから見える論理 CPU 数。 Type: int | (gauge) Unit: count |
| uptime | ホスト起動後の稼働時間。 Type: int | (gauge) Unit: s |
| cpu_total_usage | 今回の cpu.usage_total と同じホスト CPU 総使用率。CPU サンプルが無効なら生成しません。Type: float | (gauge) Unit: percent |
| memory_usage | 今回の mem.used_percent と同じメモリ使用率。メモリサンプルが無効なら生成しません。Type: float | (gauge) Unit: percent |
| process_count | /proc 内の現在のプロセスディレクトリ数。Type: int | (gauge) Unit: count |
オブジェクト¶
HOST¶
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ホスト名。 |
| name ( tag) |
オブジェクト名。現在は host と同じ。 |
| os ( tag) |
OS。現在は linux。 |
| arch ( tag) |
CPU アーキテクチャ(例:x86_64、aarch64)。 |
| unicast_ip ( tag) |
ホストのユニキャスト IP。不明なら生成しません。 |
| message | ホストの CPU、メモリ、ネットワーク、ディスク、システムのメタデータを含む JSON。 Type: string |
| rs_datakit_ver | rsdatakit のバージョン。 Type: string |
| cpu_usage | オブジェクト収集期間の CPU 使用率。 Type: float Unit: percent |
| num_cpu | 論理 CPU 数。 Type: int Unit: count |
| mem_used_percent | メモリ使用率。 Type: float Unit: percent |
| load | 直近 5 分間のシステム負荷。 Type: float |
| disk_total | 設定したマウントの総容量。 Type: int Unit: digital,B |
| disk_used_percent | 設定したマウントの集計使用率。 Type: float Unit: percent |
| diskio_read_bytes_per_sec | オブジェクト収集期間のディスク読み取り速度。 Type: int Unit: traffic,B/s |
| diskio_write_bytes_per_sec | オブジェクト収集期間のディスク書き込み速度。 Type: int Unit: traffic,B/s |
| net_recv_bytes_per_sec | オブジェクト収集期間のネットワーク受信速度。 Type: int Unit: traffic,B/s |
| net_send_bytes_per_sec | オブジェクト収集期間のネットワーク送信速度。 Type: int Unit: traffic,B/s |
| logging_level | 現在の RUST_LOG 値。未設定なら info。Type: string |
| is_docker | コンテナ内で動作しているか。1 ははい、0 はいいえ。Type: int |
| start_time | ホストの起動時刻(Unix ミリ秒)。不明なら生成しません。 Type: int Unit: ms |
ログ収集¶
ログは既定で無効です。paths が空ならファイルを収集しません。必要なパスのみ指定し、広すぎるグローバル glob は避けてください。
[logs]
# Enables file-log collection.
enabled = true
# Absolute path globs for log files to collect.
paths = ["/var/log/my-service/*.log"]
# Log data source name.
source = "my-service"
# service tag added to logs.
service = "my-service"
# Reports first-level members of a top-level JSON object as log fields.
json_as_fields = false
# Maximum number of active files read simultaneously.
max_files = 32
# Interval for rediscovering matching files in seconds.
discovery_secs = 5
# copytruncate log-rotation detection strategy.
copytruncate_mode = "auto"
# Local directory that stores file read positions. Must be absolute.
state_dir = "/var/lib/rsdatakit"
# Effective only when built with the journald feature and libsystemd is available.
journald_enabled = false
# Collects only this systemd unit. Leave empty for all accessible journal entries.
journald_unit = "my-service.service"
[logs.multiline]
# Continuation pattern. Leave empty to report one log point per line.
continuation_regex = "^\\s+"
# Maximum wait time for continuation lines in milliseconds.
flush_timeout_ms = 1000
# Maximum bytes in a merged log entry.
max_bytes = 262144
ログ位置、journald cursor、WAL は状態ディレクトリに保存します。再起動後は確認済み位置から読み取りを再開し、 WAL への書き込みまたは Dataway の受信完了後にのみ位置を進めます。継続行に一致する複数行は 1 ログに結合します。
json_as_fields は既定で無効です。有効にすると、最上位がオブジェクトの JSON ログの第 1 階層をフィールドとして送信します:
文字列、真偽値、int64、有限の float64 は型を維持し、オブジェクトと配列はコンパクトな JSON 文字列に変換します。
null と範囲外の数値は無視します。解析失敗、最上位がオブジェクトでない、または有効なフィールドがない場合は、元の
message を保持します。JSON フィールドは同名の収集フィールドを上書きし、名前は Point の規則で正規化して 256 バイトに制限します。
1 Point のフィールドは最大 1024 個です。time、source、date、storage_index はそれぞれ
json_* に改名し、Point の時刻、ログ source、保存インデックスは変更しません。また、
RSDATAKIT_LOG_JSON_AS_FIELDS=true でも有効にできます。従来の json_extract と
RSDATAKIT_LOG_JSON_EXTRACT は互換エイリアスとして維持します。
journald_enabled = true で systemd journal の読み取りを追加します。ファイルログの収集には影響しません。
リリースパッケージでは journald を有効にしています。ソースから手動ビルドする場合:
ログデータ¶
ログの measurement は [logs].source です。Kubernetes コンテナログの初期 source は通常、
kubernetes です。メタデータの照合後はコンテナ名に変更します。
| Tags & Fields | Description |
|---|---|
| host ( tag) |
収集ノードのホスト名。 |
| service ( tag) |
[logs].service。journald は _SYSTEMD_UNIT を優先。 |
| filepath ( tag) |
ログファイルの絶対パス。journald は journald 固定。 |
| status ( tag) |
現在は info 固定。ログ本文のレベルは自動解析しません。 |
| stream ( tag) |
CRI/Docker コンテナログの stdout または stderr。通常のファイルログと journald では生成しません。 |
| message | json_as_fields が無効、または JSON 変換に失敗した場合の元の 1 行または結合済み複数行の本文。Type: string |
<json_key> |
json_as_fields が有効で変換に成功した場合の第 1 階層 JSON フィールド。Type: string, bool, int, float |
メタデータが利用可能な場合、Kubernetes コンテナログには以下の tag も追加します:
| Tags & Fields | Description |
|---|---|
| cluster_name_k8s ( tag) |
Kubernetes クラスター名。 |
| node_name ( tag) |
Pod のノード。 |
| namespace ( tag) |
Pod の名前空間。 |
| pod_namespace ( tag) |
Pod 名前空間の互換フィールド。 |
| pod_name ( tag) |
Pod 名。 |
| pod_uid ( tag) |
Pod UID。 |
| pod_ip ( tag) |
Pod IP。存在する場合に生成。 |
| container_name ( tag) |
コンテナ名。 |
| container_id ( tag) |
ランタイム接頭辞を除くコンテナ ID。識別できる場合に生成。 |
| image ( tag) |
コンテナイメージ。識別できる場合に生成。 |
| deployment ( tag) |
Deployment 名。存在する場合に生成。 |
| daemonset ( tag) |
DaemonSet 名。存在する場合に生成。 |
| statefulset ( tag) |
StatefulSet 名。存在する場合に生成。 |
| replica_set ( tag) |
ReplicaSet 名。存在する場合に生成。 |
| job ( tag) |
Job 名。存在する場合に生成。 |
<label_key>( tag) |
[kubernetes].label_tags 許可リスト内の Pod label の正規化キー(. は _ に変換、/ は保持)。 |
OpenTelemetry Trace¶
OTLP は既定で無効です。有効にすると OTLP Trace を受信し、tracing 分類へ転送します:
[otlp]
# Starts OTLP HTTP and gRPC receivers.
enabled = true
# OTLP/HTTP listen address.
http_addr = "127.0.0.1:4318"
# OTLP/gRPC listen address. Must differ from http_addr.
grpc_addr = "127.0.0.1:4317"
# Bearer token required for non-local listen addresses. It may be empty for local listening.
bearer_token = ""
# Maximum bytes per OTLP request.
max_request_bytes = 4194304
# Maximum number of concurrent OTLP requests.
max_concurrent_requests = 8
# Total memory budget in bytes for admitted OTLP requests.
max_inflight_bytes = 16777216
| プロトコル | アドレス / パス |
|---|---|
| OTLP/HTTP | http://<host>:4318/otel/v1/traces |
| OTLP/gRPC | <host>:4317、サービスは opentelemetry.proto.collector.trace.v1.TraceService/Export |
| ヘルスチェック | http://<health-host>:<health-port>/health。OTLP 有効時は http://<host>:4318/health も使用可能 |
HTTP または gRPC を loopback 以外にバインドする場合は bearer_token が必須です。クライアントは
Authorization: Bearer <token> を使用します。現在は Trace のみ対応し、OTLP Metrics と OTLP Logs は未対応です。
/health は agent.health_addr で独立して提供できます。OTLP 無効時は 4317/4318 をバインドしません。
接続のアイドル期限は 30 秒です。HTTP header/body、gRPC 接続開始、本文の受信・デコードにはそれぞれ
65 秒の絶対期限があります。gRPC メッセージと trailers のデコード完了後は本文期限を解除し、以後のマッピング、キュー投入、
Dataway/WAL receipt の待機には handler 全体のタイムアウトはありません。処理中の要求は接続アイドル期限でも中断しません。gRPC
本文が受信期限を超えると DeadlineExceeded を返し、グローバル受付予算を解放します。
Trace データ¶
OTLP Span は tracing 分類に出力し、measurement は opentelemetry 固定です。時刻フィールド start と
duration はマイクロ秒です。Point のタイムスタンプは Span の開始時刻(ナノ秒)を使用します。
| Tags & Fields | Description |
|---|---|
| service ( tag) |
サービス名。Span の DB、RPC、メッセージシステム名を優先し、なければ Resource の service.name。 |
| source ( tag) |
opentelemetry 固定。 |
| span_type ( tag) |
現在の要求の Trace ツリーにおける Span の構造型:entry、local、exit。 |
| span_kind ( tag) |
internal、server、client、producer、consumer、unspecified のいずれか。 |
| source_type ( tag) |
db、message_queue、web、custom のいずれか。 |
| status ( tag) |
ok、error、info のいずれか。 |
| dk_fingerprint ( tag) |
DataKit/Guance の Trace 集計互換性のためのフィンガープリント。 |
| host ( tag) |
Trace を受信した rsdatakit のホスト名。Kubernetes ノード識別情報は node_name に別途保存。 |
| base_service ( tag) |
DB/RPC/メッセージシステムが service を上書きした場合の元のサービス名。 |
| collector_source_ip ( tag) |
OTLP クライアントの送信元 IP。取得可能な場合のみ。 |
| trace_id | 32 桁の 16 進 Trace ID。 Type: string |
| span_id | 16 桁の 16 進 Span ID。 Type: string |
| parent_id | 親 Span ID。ルート Span は文字列 0。Type: string |
| resource | Span 名。 Type: string |
| start | Span 開始時刻(Unix マイクロ秒)。 Type: int Unit: us |
| duration | Span の継続時間。 Type: int Unit: us |
| runtime_id | Runtime ID。存在する場合に生成。 Type: string |
| message | 主要な ID/時刻フィールドを除いた Span JSON。最上位フィールドに未変換の属性とイベントを含みます。 Type: string |
| error_type | exception.type から抽出する例外型。exception イベントがある場合のみ。Type: string |
| error_message | exception.message から抽出する例外メッセージ。exception イベントがある場合のみ。Type: string |
| error_stack | exception.stacktrace から抽出する例外スタック。exception イベントがある場合のみ。Type: string |
一般的な OTel Resource/Span 属性はフラットなフィールドに変換します。例:db.system → db_system、
db.operation.name → db_operation、http.request.method → http_method、
http.response.status_code → http_status_code、rpc.system → rpc_system、
messaging.system → messaging_system。文字列、真偽値、整数、浮動小数点は型を維持し、配列とオブジェクトは JSON に変換します。
属性ソースごとに最大 256 属性を処理します。意味マッピングの許可リスト外の属性は最上位フィールドにはせず、
message JSON 内に保持します。
セマンティック属性フィールド¶
以下は現在の許可リスト内の OTel 属性マッピングです。http_status_code 以外は入力属性の型を維持し、
string、bool、int、float とします。配列と key/value オブジェクトは JSON 文字列に変換します。
| Tags & Fields | Description |
|---|---|
| db_system | 入力 db.system または db.system.name。Type: string | bool | int | float |
| db_operation | 入力 db.operation または db.operation.name。Type: string | bool | int | float |
| db_operation_batch_size | 入力 db.operation.batch.size。Type: string | bool | int | float |
| db_name | 入力 db.name または db.namespace。Type: string | bool | int | float |
| db_statement | 入力 db.statement または db.query.text。Type: string | bool | int | float |
| db_collection | 入力 db.collection.name。Type: string | bool | int | float |
| db_host ( tag) |
DB 呼び出しの Span では server.address、次に net.peer.name を使用。 |
| server_address | 入力 server.address。Type: string | bool | int | float |
| server_port | 入力 server.port。Type: string | bool | int | float |
| net_host_name | 入力 net.host.name。Type: string | bool | int | float |
| net_host_port | 入力 net.host.port。Type: string | bool | int | float |
| network_peer_address | 入力 network.peer.address。Type: string | bool | int | float |
| network_peer_port | 入力 network.peer.port。Type: string | bool | int | float |
| network_transport | 入力 network.transport。Type: string | bool | int | float |
| net_protocol_name | 入力 network.protocol.name。Type: string | bool | int | float |
| net_protocol_version | 入力 network.protocol.version。Type: string | bool | int | float |
| network_type | 入力 network.type。Type: string | bool | int | float |
| network_local_address | 入力 network.local.address。Type: string | bool | int | float |
| network_local_port | 入力 network.local.port。Type: string | bool | int | float |
| http_method | 入力 http.request.method または互換属性 http.method。Type: string | bool | int | float |
| http_status_code ( tag) |
入力 http.response.status_code または互換属性 http.status_code。文字列 tag に統一。 |
| http_route | 入力 http.route。Type: string | bool | int | float |
| http_target | 入力 http.target。Type: string | bool | int | float |
| http_scheme | 入力 http.scheme。Type: string | bool | int | float |
| http_url | 入力 http.url。Type: string | bool | int | float |
| url_full | 入力 url.full。Type: string | bool | int | float |
| url_scheme | 入力 url.scheme。Type: string | bool | int | float |
| url_path | 入力 url.path。Type: string | bool | int | float |
| url_query | 入力 url.query。Type: string | bool | int | float |
| client_address | 入力 client.address。Type: string | bool | int | float |
| client_port | 入力 client.port。Type: string | bool | int | float |
| user_agent_original | 入力 user_agent.original。Type: string | bool | int | float |
| error_type | 入力 error.type。exception イベントから取得する場合もあります。Type: string | bool | int | float |
| messaging_system | 入力 messaging.system。Type: string | bool | int | float |
| messaging_operation | 入力 messaging.operation または messaging.operation.name。Type: string | bool | int | float |
| messaging_operation_type | 入力 messaging.operation.type。Type: string | bool | int | float |
| messaging_destination_name | 入力 messaging.destination.name。Type: string | bool | int | float |
| messaging_message_id | 入力 messaging.message.id。Type: string | bool | int | float |
| rpc_service | 入力 rpc.service。Type: string | bool | int | float |
| rpc_system | 入力 rpc.system または rpc.system.name。Type: string | bool | int | float |
| rpc_method | 入力 rpc.method。Type: string | bool | int | float |
| rpc_grpc_status_code | 入力 rpc.grpc.status_code。Type: string | bool | int | float |
| exception | 入力 exception。Type: string | bool | int | float |
| exception_type | 入力 exception.type。Type: string | bool | int | float |
| exception_message | 入力 exception.message。Type: string | bool | int | float |
| exception_stacktrace | 入力 exception.stacktrace。Type: string | bool | int | float |
| container_name | 属性 container.name から取得。Kubernetes モードでは同名の tag にも正規化します。Type: string | bool | int | float |
| container_id | 属性 container.id から取得。Kubernetes モードでは同名の tag にも正規化します。Type: string | bool | int | float |
| image | 属性 container.image.name から取得。Kubernetes モードでは同名の tag にも正規化します。Type: string | bool | int | float |
| k8s_cluster_name | 入力 k8s.cluster.name。Type: string | bool | int | float |
| k8s_namespace_name | 入力 k8s.namespace.name。Type: string | bool | int | float |
| k8s_node_name | 入力 k8s.node.name。Type: string | bool | int | float |
| k8s_pod_name | 入力 k8s.pod.name。Type: string | bool | int | float |
| k8s_pod_uid | 入力 k8s.pod.uid。Type: string | bool | int | float |
| k8s_container_name | 入力 k8s.container.name。Type: string | bool | int | float |
| k8s_deployment_name | 入力 k8s.deployment.name。Type: string | bool | int | float |
| k8s_replicaset_name | 入力 k8s.replicaset.name。Type: string | bool | int | float |
| k8s_statefulset_name | 入力 k8s.statefulset.name。Type: string | bool | int | float |
| k8s_daemonset_name | 入力 k8s.daemonset.name。Type: string | bool | int | float |
| k8s_job_name | 入力 k8s.job.name。Type: string | bool | int | float |
| k8s_cronjob_name | 入力 k8s.cronjob.name。Type: string | bool | int | float |
| process_pid | 入力 process.pid。Type: string | bool | int | float |
| project | 入力 project。Type: string | bool | int | float |
| version | 入力 version。Type: string | bool | int | float |
| env | 入力 env。Type: string | bool | int | float |
| pod_name | 属性 pod_name から取得。Kubernetes モードでは同名の tag にも正規化します。Type: string | bool | int | float |
| pod_namespace | 属性 pod_namespace から取得。Kubernetes モードでは同名の tag にも正規化します。Type: string | bool | int | float |
| sdk_language | 入力 telemetry.sdk.language。Type: string | bool | int | float |
| sdk_name | 入力 telemetry.sdk.name。Type: string | bool | int | float |
| sdk_version | 入力 telemetry.sdk.version。Type: string | bool | int | float |
Kubernetes モードでは Trace にもコンテナログと同じクラスター、Node、Pod、Container、workload、 許可リスト内の label tag を追加できます。OTel Resource の識別情報を優先し、不足分のみローカル Pod キャッシュから補います。
Kubernetes 収集¶
[kubernetes].enabled = true で Kubernetes モードを有効にします。DaemonSet はローカル Pod メタデータ、
Kubelet /stats/summary、ホストの /var/log/pods から収集します:
| データ | 出力 |
|---|---|
| Pod メトリクス | kube_pod |
| コンテナメトリクス | docker_containers |
| Pod オブジェクト | kubelet_pod |
| コンテナオブジェクト | docker_containers |
| コンテナログ | logging。Pod、コンテナ、イメージ、namespace、workload などの情報を自動付加。 |
[kubernetes]
# Enables Kubernetes collection.
enabled = true
# Reports Pod and container metrics.
metrics_enabled = true
# Reports Pod and container objects.
objects_enabled = true
# Kubernetes cluster name.
cluster_name = "default"
# Local Pod metadata refresh interval in seconds.
refresh_secs = 60
# Pod and container object reporting interval in seconds.
object_interval_secs = 300
# Allowlist of Pod labels added to reported data.
label_tags = ["app.kubernetes.io/name"]
metrics_enabled と objects_enabled は個別に制御できます。メトリクスは既定で 60 秒ごと、オブジェクトは起動時に即時送信し、
その後は既定で 5 分ごとに送信します。label_tags はタグのカーディナリティを制御する Pod label の許可リストです。
Kubelet には HTTPS と自動マウントされた ServiceAccount bearer token で接続し、
nodes/stats RBAC 権限で認可します。ノードの自己署名証明書と Node IP SAN のないクラスターに対応するため、
Kubelet 接続のサーバー証明書は検証しません。Kubernetes API は独立したクライアントを使用し、ServiceAccount CA で
証明書を厳密に検証します。
プロジェクトの DaemonSet 例は /var/log/pods、/var/lib/docker/containers、
/var/lib/rsdatakit もマウントします。コンテナログはローカルファイルから読み、ログごとに Kubernetes API は呼び出しません。Pod メタデータは
共有のローカルノードキャッシュで補完します。
メトリクス¶
Kubelet Summary にない任意フィールドは生成しません。CPU、メモリ、ファイルシステム、ネットワーク累積値はローカルの
Kubelet /stats/summary から、request、limit、ready、restart、workload tag は Pod API メタデータから取得します。
kube_pod¶
ローカル Pod ごとに 1 Point を生成。
| Tags & Fields | Description |
|---|---|
| cluster_name_k8s ( tag) |
Kubernetes クラスター名。 |
| node_name ( tag) |
Pod のノード。 |
| namespace ( tag) |
Pod の名前空間。 |
| pod_namespace ( tag) |
DataKit 互換の Pod 名前空間フィールド。Pod API メタデータが利用可能な場合に生成。 |
| pod ( tag) |
Kubelet Summary 内の Pod 名。 |
| pod_name ( tag) |
Pod 名。 |
| uid ( tag) |
Kubelet Summary 内の Pod UID。 |
| pod_uid ( tag) |
Pod UID。 |
| pod_ip ( tag) |
Pod IP。メタデータが利用可能な場合に生成。 |
| deployment ( tag) |
Deployment 名。ReplicaSet 管理の Pod で pod-template-hash から推定可能な場合に生成。 |
| daemonset ( tag) |
Pod を管理する DaemonSet 名。存在する場合に生成。 |
| statefulset ( tag) |
Pod を管理する StatefulSet 名。存在する場合に生成。 |
| replica_set ( tag) |
Pod を管理する ReplicaSet 名。存在する場合に生成。 |
| job ( tag) |
Pod を管理する Job 名。存在する場合に生成。 |
<label_key>( tag) |
[kubernetes].label_tags 許可リスト内の Pod label の正規化キー(. は _ に変換、/ は保持)。 |
| cpu_usage_millicores | 現在の CPU 使用量。 Type: float | (gauge) Unit: mCPU |
| cpu_usage | 現在の CPU 使用量。1 コアは 100%、複数コアでは 100% を超える場合があります。 Type: float | (gauge) Unit: percent |
| cpu_usage_base100 | 現在の CPU 使用量を Node CPU 容量で割った値。容量が取得可能な場合に生成。 Type: float | (gauge) Unit: percent |
| cpu_usage_core_nano_seconds | 累積 CPU 使用時間。 Type: int | (count) Unit: ns |
| cpu_limit_millicores | Pod 内の通常コンテナの CPU limit の合計。未設定なら生成しません。 Type: float | (gauge) Unit: mCPU |
| cpu_request_millicores | Pod 内の通常コンテナの CPU request の合計。未設定なら生成しません。 Type: float | (gauge) Unit: mCPU |
| cpu_usage_base_limit | CPU limit に対する CPU 使用量の割合。limit が設定され、使用量がある場合に生成。 Type: float | (gauge) Unit: percent |
| cpu_usage_base_request | CPU request に対する CPU 使用量の割合。request が設定され、使用量がある場合に生成。 Type: float | (gauge) Unit: percent |
| mem_available | 現在の使用可能メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_usage | 現在の working set メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_working_set | 現在の working set メモリ。mem_usage と同じ。Type: int | (gauge) Unit: digital,B |
| memory_usage_bytes | 現在の working set メモリの互換フィールド。mem_usage と同じ。Type: int | (gauge) Unit: digital,B |
| mem_rss | 常駐メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_capacity | Node メモリ容量。Node 容量が取得可能な場合に生成。 Type: int | (gauge) Unit: digital,B |
| memory_capacity | Node メモリ容量の互換フィールド。mem_capacity と同じ。Type: int | (gauge) Unit: digital,B |
| mem_used_percent | Node メモリ容量に対する working set の割合。 Type: float | (gauge) Unit: percent |
| memory_used_percent | mem_used_percent の互換フィールド。Type: float | (gauge) Unit: percent |
| mem_limit | Pod 内の通常コンテナの メモリ limit の合計。未設定なら生成しません。 Type: float | (gauge) Unit: digital,B |
| mem_request | Pod 内の通常コンテナの メモリ request の合計。未設定なら生成しません。 Type: float | (gauge) Unit: digital,B |
| mem_used_percent_base_limit | メモリ limit に対する メモリ 使用量の割合。limit が設定され、使用量がある場合に生成。 Type: float | (gauge) Unit: percent |
| mem_used_percent_base_request | メモリ request に対する メモリ 使用量の割合。request が設定され、使用量がある場合に生成。 Type: float | (gauge) Unit: percent |
| network_bytes_rcvd | Pod の累積受信バイト数。 Type: int | (count) Unit: digital,B |
| network_bytes_sent | Pod の累積送信バイト数。 Type: int | (count) Unit: digital,B |
| network_errors_rcvd | Pod の累積ネットワーク受信エラー数。 Type: int | (count) Unit: count |
| network_errors_sent | Pod の累積ネットワーク送信エラー数。 Type: int | (count) Unit: count |
| ephemeral_storage_available_bytes | Pod の一時ストレージの使用可能容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_capacity_bytes | Pod の一時ストレージの総容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_used_bytes | Pod の一時ストレージの使用容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_inodes | Pod の一時ストレージのinode 総数。 Type: int | (gauge) Unit: count |
| ephemeral_storage_inodes_free | Pod の一時ストレージの空き inode 数。 Type: int | (gauge) Unit: count |
| ephemeral_storage_inodes_used | Pod の一時ストレージの使用中 inode 数。 Type: int | (gauge) Unit: count |
| ready | 現在 running の通常コンテナ数。 Type: float | (gauge) Unit: count |
| restarts | 通常コンテナの最大再起動回数。 Type: float | (gauge) Unit: count |
docker_containers(Kubernetes メトリクス)¶
ローカルコンテナごとに 1 Point を生成。ネットワークは Pod 単位で kube_pod が送信するため、ここにはネットワークフィールドがありません。
| Tags & Fields | Description |
|---|---|
| cluster_name_k8s ( tag) |
Kubernetes クラスター名。 |
| host ( tag) |
コンテナのノード。node_name と同じ。 |
| node_name ( tag) |
コンテナのノード。 |
| namespace ( tag) |
Pod の名前空間。 |
| pod_namespace ( tag) |
Pod 名前空間の互換フィールド。メタデータが利用可能な場合に生成。 |
| pod_name ( tag) |
Pod 名。 |
| pod_uid ( tag) |
Pod UID。 |
| pod_ip ( tag) |
Pod IP。メタデータが利用可能な場合に生成。 |
| container_name ( tag) |
コンテナ名。 |
| container_id ( tag) |
ランタイム接頭辞を除くコンテナ ID。メタデータが利用可能な場合に生成。 |
| container_runtime ( tag) |
コンテナランタイム(例:containerd)。 |
| container_type ( tag) |
kubernetes 固定。 |
| image ( tag) |
コンテナイメージ。 |
| state ( tag) |
Kubelet Summary にあるコンテナは現在 running 固定。 |
| deployment ( tag) |
Deployment 名。存在する場合に生成。 |
| daemonset ( tag) |
DaemonSet 名。存在する場合に生成。 |
| statefulset ( tag) |
StatefulSet 名。存在する場合に生成。 |
| replica_set ( tag) |
ReplicaSet 名。存在する場合に生成。 |
| job ( tag) |
Job 名。存在する場合に生成。 |
<label_key>( tag) |
[kubernetes].label_tags 許可リスト内の Pod label の正規化キー。 |
| cpu_usage_millicores | 現在のコンテナ CPU 使用量。 Type: float | (gauge) Unit: mCPU |
| cpu_usage | 現在のコンテナ CPU 使用量。1 コアは 100%。 Type: float | (gauge) Unit: percent |
| cpu_usage_base100 | コンテナ CPU 使用量を Node CPU 容量で割った値。容量が取得可能な場合に生成。 Type: float | (gauge) Unit: percent |
| cpu_usage_core_nano_seconds | コンテナの累積 CPU 使用時間。 Type: int | (count) Unit: ns |
| cpu_limit_millicores | コンテナの CPU limit。未設定なら生成しません。 Type: float | (gauge) Unit: mCPU |
| cpu_request_millicores | コンテナの CPU request。未設定なら生成しません。 Type: float | (gauge) Unit: mCPU |
| cpu_usage_base_limit | コンテナの CPU limit に対する CPU 使用量の割合。 Type: float | (gauge) Unit: percent |
| cpu_usage_base_request | コンテナの CPU request に対する CPU 使用量の割合。 Type: float | (gauge) Unit: percent |
| mem_available | 現在のコンテナ使用可能メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_usage | コンテナの working set メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_working_set | コンテナの working set メモリ。mem_usage と同じ。Type: int | (gauge) Unit: digital,B |
| memory_usage_bytes | mem_usage の互換フィールド。Type: int | (gauge) Unit: digital,B |
| mem_rss | コンテナの常駐メモリ。 Type: int | (gauge) Unit: digital,B |
| mem_capacity | Node メモリ容量。取得可能な場合に生成。 Type: int | (gauge) Unit: digital,B |
| memory_capacity | mem_capacity の互換フィールド。Type: int | (gauge) Unit: digital,B |
| mem_used_percent | Node メモリ容量に対するコンテナ working set の割合。 Type: float | (gauge) Unit: percent |
| memory_used_percent | mem_used_percent の互換フィールド。Type: float | (gauge) Unit: percent |
| mem_limit | コンテナの メモリ limit。未設定なら生成しません。 Type: float | (gauge) Unit: digital,B |
| mem_request | コンテナの メモリ request。未設定なら生成しません。 Type: float | (gauge) Unit: digital,B |
| mem_used_percent_base_limit | コンテナの メモリ limit に対する メモリ 使用量の割合。 Type: float | (gauge) Unit: percent |
| mem_used_percent_base_request | コンテナの メモリ request に対する メモリ 使用量の割合。 Type: float | (gauge) Unit: percent |
| ephemeral_storage_available_bytes | コンテナ rootfsの使用可能容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_capacity_bytes | コンテナ rootfsの総容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_used_bytes | コンテナ rootfsの使用容量。 Type: int | (gauge) Unit: digital,B |
| ephemeral_storage_inodes | コンテナ rootfsのinode 総数。 Type: int | (gauge) Unit: count |
| ephemeral_storage_inodes_free | コンテナ rootfsの空き inode 数。 Type: int | (gauge) Unit: count |
| ephemeral_storage_inodes_used | コンテナ rootfsの使用中 inode 数。 Type: int | (gauge) Unit: count |
| log_available_bytes | コンテナログのファイルシステムの使用可能容量。 Type: int | (gauge) Unit: digital,B |
| log_capacity_bytes | コンテナログのファイルシステムの総容量。 Type: int | (gauge) Unit: digital,B |
| log_used_bytes | コンテナログのファイルシステムの使用容量。 Type: int | (gauge) Unit: digital,B |
| log_inodes | コンテナログのファイルシステムのinode 総数。 Type: int | (gauge) Unit: count |
| log_inodes_free | コンテナログのファイルシステムの空き inode 数。 Type: int | (gauge) Unit: count |
| log_inodes_used | コンテナログのファイルシステムの使用中 inode 数。 Type: int | (gauge) Unit: count |
オブジェクト¶
オブジェクト分類は DataKit ページと互換です。message は現在のオブジェクトフィールドの JSON スナップショットです。
今回 Kubelet Summary が利用可能なら、同じ Pod/コンテナのリソースフィールドも付加します。以下に各フィールドを示します。
kubelet_pod オブジェクト¶
| Tags & Fields | Description |
|---|---|
| name ( tag) |
オブジェクト名。Pod UID 固定。 |
| uid ( tag) |
Pod UID。 |
| pod_name ( tag) |
Pod 名。 |
| namespace ( tag) |
Pod の名前空間。 |
| pod_namespace ( tag) |
Pod 名前空間の互換フィールド。 |
| cluster_name_k8s ( tag) |
Kubernetes クラスター名。 |
| node_name ( tag) |
Pod のノード。未スケジュールの場合は生成しません。 |
| host ( tag) |
Pod のノード。node_name と同じ。 |
| pod ( tag) |
Kubelet Summary の Pod 名。Summary が利用可能な場合に生成。 |
| phase ( tag) |
Pod phase(例:Running、Pending)。 |
| status ( tag) |
現在の Pod 状態。コンテナの waiting reason を優先し、なければ Pod phase。 |
| pod_ip ( tag) |
Pod IP。存在する場合に生成。 |
| qos_class ( tag) |
Pod QoS class。存在する場合に生成。 |
| workload_name ( tag) |
正規化したワークロード名。Deployment を優先し、なければ最初に識別した owner。 |
| deployment ( tag) |
Deployment 名。存在する場合に生成。 |
| daemonset ( tag) |
DaemonSet 名。存在する場合に生成。 |
| statefulset ( tag) |
StatefulSet 名。存在する場合に生成。 |
| replica_set ( tag) |
ReplicaSet 名。存在する場合に生成。 |
| job ( tag) |
Job 名。存在する場合に生成。 |
<label_key>( tag) |
[kubernetes].label_tags 許可リスト内の Pod label の正規化キー。 |
| available | Pod 内の通常コンテナ総数。 Type: int Unit: count |
| ready | 現在 running の通常コンテナ数。 Type: int Unit: count |
| restarts | 通常コンテナの最大再起動回数。 Type: int Unit: count |
| age | Pod 作成からの秒数。 Type: int Unit: s |
| cpu_usage_millicores | 現在の Pod CPU 使用量。Kubelet Summary が利用可能な場合に生成。 Type: float Unit: mCPU |
| cpu_usage | 現在の Pod CPU 使用量。1 コアは 100%。 Type: float Unit: percent |
| cpu_usage_base100 | Pod CPU 使用量を Node CPU 容量で割った値。 Type: float Unit: percent |
| cpu_usage_core_nano_seconds | Pod の累積 CPU 使用時間。 Type: int Unit: ns |
| cpu_limit_millicores | Pod 内の通常コンテナの CPU limit の合計。 Type: float Unit: mCPU |
| cpu_request_millicores | Pod 内の通常コンテナの CPU request の合計。 Type: float Unit: mCPU |
| cpu_usage_base_limit | Podの CPU limit に対する CPU 使用量の割合。 Type: float Unit: percent |
| cpu_usage_base_request | Podの CPU request に対する CPU 使用量の割合。 Type: float Unit: percent |
| mem_available | 現在の Pod 使用可能メモリ。 Type: int Unit: digital,B |
| mem_usage | Pod の working set メモリ。 Type: int Unit: digital,B |
| mem_working_set | Pod の working set メモリ。mem_usage と同じ。Type: int Unit: digital,B |
| memory_usage_bytes | mem_usage の互換フィールド。Type: int Unit: digital,B |
| mem_rss | Pod の常駐メモリ。 Type: int Unit: digital,B |
| mem_capacity | Node メモリ容量。 Type: int Unit: digital,B |
| memory_capacity | mem_capacity の互換フィールド。Type: int Unit: digital,B |
| mem_used_percent | Node メモリ容量に対する Pod working set の割合。 Type: float Unit: percent |
| memory_used_percent | mem_used_percent の互換フィールド。Type: float Unit: percent |
| mem_limit | Pod 内の通常コンテナの メモリ limit の合計。 Type: float Unit: digital,B |
| mem_request | Pod 内の通常コンテナの メモリ request の合計。 Type: float Unit: digital,B |
| mem_used_percent_base_limit | Podの メモリ limit に対する メモリ 使用量の割合。 Type: float Unit: percent |
| mem_used_percent_base_request | Podの メモリ request に対する メモリ 使用量の割合。 Type: float Unit: percent |
| network_bytes_rcvd | Pod の累積受信バイト数。 Type: int Unit: digital,B |
| network_bytes_sent | Pod の累積送信バイト数。 Type: int Unit: digital,B |
| network_errors_rcvd | Pod の累積ネットワーク受信エラー数。 Type: int Unit: count |
| network_errors_sent | Pod の累積ネットワーク送信エラー数。 Type: int Unit: count |
| ephemeral_storage_available_bytes | Pod の一時ストレージの使用可能容量。 Type: int Unit: digital,B |
| ephemeral_storage_capacity_bytes | Pod の一時ストレージの総容量。 Type: int Unit: digital,B |
| ephemeral_storage_used_bytes | Pod の一時ストレージの使用容量。 Type: int Unit: digital,B |
| ephemeral_storage_inodes | Pod の一時ストレージのinode 総数。 Type: int Unit: count |
| ephemeral_storage_inodes_free | Pod の一時ストレージの空き inode 数。 Type: int Unit: count |
| ephemeral_storage_inodes_used | Pod の一時ストレージの使用中 inode 数。 Type: int Unit: count |
| message | オブジェクトの JSON スナップショット。 Type: string |
docker_containers オブジェクト¶
| Tags & Fields | Description |
|---|---|
| name ( tag) |
オブジェクト名。コンテナ ID 固定。 |
| container_id ( tag) |
ランタイム接頭辞を除くコンテナ ID。 |
| container_name ( tag) |
コンテナ名。 |
| container_runtime ( tag) |
コンテナランタイム(例:containerd)。取得可能な場合に生成。 |
| image ( tag) |
コンテナイメージ。取得可能な場合に生成。 |
| container_type ( tag) |
kubernetes 固定。 |
| state ( tag) |
現在は running 固定。 |
| cluster_name_k8s ( tag) |
Kubernetes クラスター名。 |
| host ( tag) |
コンテナのノード。 |
| node_name ( tag) |
コンテナのノード。 |
| namespace ( tag) |
Pod の名前空間。 |
| pod_namespace ( tag) |
Pod 名前空間の互換フィールド。元メトリクスに tag がある場合に保持。 |
| pod_name ( tag) |
Pod 名。 |
| pod_uid ( tag) |
Pod UID。 |
| pod_ip ( tag) |
Pod IP。元メトリクスに tag がある場合に保持。 |
| workload_name ( tag) |
正規化したワークロード名。存在する場合に生成。 |
| deployment ( tag) |
Deployment 名。存在する場合に生成。 |
| daemonset ( tag) |
DaemonSet 名。存在する場合に生成。 |
| statefulset ( tag) |
StatefulSet 名。存在する場合に生成。 |
| replica_set ( tag) |
ReplicaSet 名。存在する場合に生成。 |
| job ( tag) |
Job 名。存在する場合に生成。 |
<label_key>( tag) |
[kubernetes].label_tags 許可リスト内の Pod label の正規化キー。 |
| age | コンテナ起動からの秒数。起動時刻が取得可能な場合に生成。 Type: int Unit: s |
| cpu_usage_millicores | 現在のコンテナ CPU 使用量。 Type: float Unit: mCPU |
| cpu_usage | 現在のコンテナ CPU 使用量。 Type: float Unit: percent |
| cpu_usage_base100 | コンテナ CPU 使用量を Node CPU 容量で割った値。 Type: float Unit: percent |
| cpu_usage_core_nano_seconds | コンテナの累積 CPU 使用時間。 Type: int Unit: ns |
| cpu_limit_millicores | コンテナの CPU limit。 Type: float Unit: mCPU |
| cpu_request_millicores | コンテナの CPU request。 Type: float Unit: mCPU |
| cpu_usage_base_limit | コンテナの CPU limit に対する CPU 使用量の割合。 Type: float Unit: percent |
| cpu_usage_base_request | コンテナの CPU request に対する CPU 使用量の割合。 Type: float Unit: percent |
| mem_available | 現在のコンテナ使用可能メモリ。 Type: int Unit: digital,B |
| mem_usage | コンテナの working set メモリ。 Type: int Unit: digital,B |
| mem_working_set | コンテナの working set メモリ。mem_usage と同じ。Type: int Unit: digital,B |
| memory_usage_bytes | mem_usage の互換フィールド。Type: int Unit: digital,B |
| mem_rss | コンテナの常駐メモリ。 Type: int Unit: digital,B |
| mem_capacity | Node メモリ容量。 Type: int Unit: digital,B |
| memory_capacity | mem_capacity の互換フィールド。Type: int Unit: digital,B |
| mem_used_percent | Node メモリ容量に対するコンテナ working set の割合。 Type: float Unit: percent |
| memory_used_percent | mem_used_percent の互換フィールド。Type: float Unit: percent |
| mem_limit | コンテナの メモリ limit。 Type: float Unit: digital,B |
| mem_request | コンテナの メモリ request。 Type: float Unit: digital,B |
| mem_used_percent_base_limit | コンテナの メモリ limit に対する メモリ 使用量の割合。 Type: float Unit: percent |
| mem_used_percent_base_request | コンテナの メモリ request に対する メモリ 使用量の割合。 Type: float Unit: percent |
| ephemeral_storage_available_bytes | コンテナ rootfsの使用可能容量。 Type: int Unit: digital,B |
| ephemeral_storage_capacity_bytes | コンテナ rootfsの総容量。 Type: int Unit: digital,B |
| ephemeral_storage_used_bytes | コンテナ rootfsの使用容量。 Type: int Unit: digital,B |
| ephemeral_storage_inodes | コンテナ rootfsのinode 総数。 Type: int Unit: count |
| ephemeral_storage_inodes_free | コンテナ rootfsの空き inode 数。 Type: int Unit: count |
| ephemeral_storage_inodes_used | コンテナ rootfsの使用中 inode 数。 Type: int Unit: count |
| log_available_bytes | コンテナログのファイルシステムの使用可能容量。 Type: int Unit: digital,B |
| log_capacity_bytes | コンテナログのファイルシステムの総容量。 Type: int Unit: digital,B |
| log_used_bytes | コンテナログのファイルシステムの使用容量。 Type: int Unit: digital,B |
| log_inodes | コンテナログのファイルシステムのinode 総数。 Type: int Unit: count |
| log_inodes_free | コンテナログのファイルシステムの空き inode 数。 Type: int Unit: count |
| log_inodes_used | コンテナログのファイルシステムの使用中 inode 数。 Type: int Unit: count |
| message | オブジェクトの JSON スナップショット。 Type: string |
Prometheus 収集¶
Prometheus スクレイピングは Kubernetes モードの一部です。単独バイナリでは既定で無効、DaemonSet 例では有効です:
[kubernetes.prometheus]
# Enables local Prometheus target discovery and scraping.
enabled = true
# Scrape interval per target in seconds.
scrape_interval_secs = 30
# Timeout per scrape in seconds.
scrape_timeout_secs = 10
# Keeps the full exporter metric name as the field name.
keep_exist_metric_name = true
# Discovers Pods annotated with prometheus.io/scrape.
discover_pod_annotations = true
# Discovers Services annotated with prometheus.io/scrape.
discover_service_annotations = true
# Discovers Prometheus Operator PodMonitors.
discover_pod_monitors = true
# Discovers Prometheus Operator ServiceMonitors.
discover_service_monitors = true
自動検出に加えて、信頼できるターゲットを明示的に設定できます:
[[kubernetes.prometheus.instances]]
# Target source type.
role = "pod" # node | pod | service | endpoints
# Namespaces containing the targets.
namespaces = ["default"]
# Kubernetes label selector。
selector = "app=nginx"
# Scrape scheme.
scheme = "http"
# Numeric or named port.
port = "metrics"
# HTTP metrics path.
path = "/metrics"
# Measurement name. Derived automatically when empty.
measurement = ""
# Tags added to all metrics from this target.
tags = { team = "platform" }
対応するターゲットソース:
- Pod/Service の
prometheus.io/scrape、port、scheme、pathなどの annotations。 - Prometheus Operator の PodMonitor と ServiceMonitor。
- 信頼できる静的設定の
node、pod、service、endpointsインスタンス。
ローカルノードに属すると確認できるターゲットのみ収集し、各 DaemonSet レプリカによるクラスター全体の重複収集を防ぎます。
measurement は exporter のメトリクス名または静的な measurement 設定で決まり、collector.up が各ターゲットの収集結果を示します。
不要な検出機能は対応する discover_* を無効にしてください。Service annotation、ServiceMonitor が無効で、
明示的な service/endpoints インスタンスもなければ、グローバルな Service と EndpointSlice は購読しません。
メトリクス変換規則¶
Prometheus exporter の measurement と field はメトリクス名から動的に生成するため、固定ホストメトリクスのように列挙できません:
| 設定 / 入力 | 出力規則 |
|---|---|
measurement 未設定、メトリクス名に _ あり |
最初の _ より前を measurement とします。例:http_requests_total → measurement http。 |
keep_exist_metric_name = true |
field は完全なメトリクス名を保持します。requests_total または http_requests_total など、measurement の明示設定によって異なります。 |
keep_exist_metric_name = false |
measurement 未指定なら最初の _ までの接頭辞を除去。例:http_requests_total → measurement http、field requests_total。 |
measurement を明示的に設定 |
すべてのサンプルをその measurement に書き込み、field は完全名または上記の保持規則を使用します。 |
| Prometheus label | tag に変換。ターゲットの Kubernetes 識別 tag を exporter の同名識別 label より優先します。 |
| Counter | 累積和として送信。名前に _total がなければ付加します。 |
| Histogram / Summary | _sum、_count、_bucket と le/quantile tag に展開。 |
| Info / StateSet | Info は値 1 の gauge、StateSet は各状態の 0 または 1 に変換。 |
各スクレイピングではコレクター状態のメトリクスも生成します:
collector¶
| Tags & Fields | Description |
|---|---|
| host ( tag) |
ターゲットの非 loopback IP。不明なら空文字列。 |
| job ( tag) |
検出または明示設定された Prometheus job。 |
| ターゲット tags ( tag) |
ターゲットが持つ Pod、Service、Node、namespace、instance などの tag。 |
| up | 今回のターゲット収集と解析が成功なら 1、失敗なら 0。Type: float | (gauge) |
実行と検証¶
フォアグラウンドで実行:
systemd インストール後に使用できます:
起動ログに rsdatakit started が表示されたら、管理画面で以下を確認します:
| 機能 | 確認内容 |
|---|---|
| ホスト | cpu、mem、disk、diskio、net、system メトリクスと HOST オブジェクト。 |
| ログ | [logs].source のデータソース、収集 tag、元の message または json_as_fields の JSON フィールド。 |
| Trace | opentelemetry データソース内のサービス、Span 階層、Trace ID。 |
| Kubernetes | kube_pod、docker_containers メトリクスと Pod/コンテナオブジェクト。 |
| Prometheus | exporter メトリクスと collector.up。 |
独立したヘルスアドレスを設定するか OTLP HTTP を有効にして状態を確認できます。例:
degraded は Dataway、WAL、収集モジュールのいずれかに障害があることを示します。HTTP 503 はキュー、
WAL、バックグラウンドタスクが不健全な状態であることを示します。
注意事項¶
- ログと Trace はネットワークエラー、HTTP 5xx、429 で WAL に書き込み再試行します。他の 4xx は再試行しません。 メトリクスとオブジェクトは周期スナップショットで、WAL には書き込みません。
- ログ/Trace 量と許容 Dataway 停止時間に合わせて
wal.max_bytesを調整してください。 - Dataway token と OTLP bearer token は Secret またはアクセス制限した設定ファイルで渡し、リポジトリには登録しないでください。
- 高カーディナリティを避けるため、
kubernetes.label_tagsには必要な Pod label のみ追加してください。 RUST_LOG=rsdatakit=debugは大量のログを生成します。短時間の調査のみに使用してください。