> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sambanova.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# PDU エクスポーター

PDU エクスポーターは、Vertiv/Geist 製のラック用電源分配ユニット (Power Distribution Unit; PDU) の電力メトリクスを公開します。1 つのエクスポーターインスタンスで任意の台数の PDU に対応します。Prometheus は PDU ごとに 1 回、`/probe?target=<address>` をスクレイプします。

| 項目 | 値 |
| :- | :- |
| ポート | デフォルトは 9820。`pdu-exporter.port` で設定します。 |
| 実行形態 | `sambanova-hardware-monitoring` チャートがデプロイする Deployment |
| デバイスプロトコル | PDU の HTTP API |
| 認証 | なし。エクスポーターはゲストとして PDU を読み取ります。 |
| ネットワーク | クラスターノードから管理ネットワーク上の PDU への経路が必要です |
| イメージバージョン | 1.0.0 (チャート 1.0.0 のデフォルト)。 |

## エンドポイント

| エンドポイント | 返す内容 |
| :- | :- |
| `/probe?target=<address>` | 1 台の PDU のメトリクス |
| `/metrics` | エクスポーター自身のプロセスメトリクスと、プローブおよびキャッシュのカウンター。PDU のデータは含まれません。 |
| `/healthz` | エクスポーターの稼働中は `ok` |

`/probe` は任意パラメータを 1 つ受け付けます。`outlets=true` を指定すると、アウトレットごとの測定値が追加されます。アウトレット 1 つにつき系列が 1 本増えるため、デフォルトでは無効です。

## メトリクス

| メトリクス | 型 | ラベル | 説明 |
| :- | :- | :- | :- |
| `pdu_power_watts` | gauge | `device`, `level`, `entity`, `label` | 有効電力 (ワット単位) |
| `pdu_measurement_unavailable` | gauge | `device`, `level`, `entity`, `type` | PDU が測定値を古い (stale) または解析不能と報告したとき `1`。そのとき、その測定値自体は出力されません。 |
| `pdu_info` | gauge | `device`, `label`, `state`, `model`, `firmware`, `serial`, `part` | PDU の識別情報。常に `1`。 |
| `pdu_up` | gauge | なし | PDU が応答したとき `1`、応答しなかったとき `0` |
| `pdu_scrape_duration_seconds` | gauge | なし | PDU の読み取りにかかった時間 |

> [!NOTE]
>
> これがサポート対象の完全なセットです。PDU 自体ははるかに多くの項目を測定しており、エクスポーターもそれらを読み取りますが、公開されるのはこれらの系列だけです。古いエクスポーターイメージで追加の系列が見える場合でも、それらに基づいてダッシュボードやアラートを作成しないでください。現行のイメージでは削除されています。

`pdu_measurement_unavailable` は、すべての測定値が正常な間はサンプルを持ちません。そのため、正常に動作するハードウェアに対して検証したインストールではこのメトリクスは現れません。PDU が測定値を失ったと報告したときにのみ現れます。

## ラベル

| ラベル | 値 | 説明 |
| :- | :- | :- |
| `pdu` | ターゲットの `name`、またはそのアドレス | PDU を識別します。エクスポーターではなく Prometheus が付与します。 |
| `rack` | 宣言した任意の値 | ターゲットの `labels` で宣言します。エクスポーターは PDU がどのラックにあるかを判別できないため、ラック別のパネルにはこのラベルが必要です。 |
| `device` | 16 文字の識別子 | PDU 自身のデバイス ID |
| `level` | `total`、`phase`、`line`、`breaker`、`outlet` | その測定値の集計ポイント。`pdu_power_watts` と `pdu_measurement_unavailable` に付きます。 |
| `entity` | `phase0`、`breaker3`、`total0`、アウトレット番号 | そのポイントに対する PDU 自身の名前。スクレイプをまたいで安定しています。 |
| `label` | `Phase A`、または空 | 運用担当者が PDU 上で設定した名前。`pdu_power_watts` と `pdu_info` に付きます。 |
| `type` | `voltage`、`current`、`realPower`、`apparentPower`、`powerFactor`、`energy` | 取得できなくなった測定項目 (公開対象外の項目を含む)。`pdu_measurement_unavailable` に付きます。 |
| `state` | `normal` ほか、PDU が報告する状態 | `pdu_info` に付きます |
| `model`、`firmware`、`serial`、`part` | ハードウェアの識別情報 | `pdu_info` に付きます |

> [!WARNING]
>
> 電力は必ず `level="total"` でフィルタしてください。PDU は同じ電力を複数のレベルで計測するため、フィルタなしの `sum(pdu_power_watts)` は同じワット数を複数回数えることになり、一見もっともらしい値のまま実際の約 3 倍になります。

```promql theme={}
# Whole-device draw, per PDU
pdu_power_watts{level="total"}

# Draw per rack
sum by (rack) (pdu_power_watts{level="total"})
```

## 動作

| 動作 | 詳細 |
| :- | :- |
| 到達できない PDU に対しては、HTTP 200 と `pdu_up 0` を返します | 200 以外の応答を返すと、Prometheus は `up` サンプルを含むスクレイプ全体を破棄します。アラートは `pdu_up == 0` に設定してください。 |
| 失われた測定値はゼロではなく欠損になります | エクスポーターは代わりに `pdu_measurement_unavailable` を `1` に設定します。アラートは、値の欠損ではなくこのメトリクスに設定してください。 |
| スクレイプは 30 秒間隔より速くしないでください | PDU の応答には 2.2〜2.8 秒かかります。エクスポーターはスクレイプタイムアウトの最小値として 5 秒を強制し、それ未満の設定では起動しません。各 PDU の読み取り結果は 15 秒間キャッシュします。 |
| レプリカを増やすと PDU への負荷がその分増加します | レプリカ間でキャッシュは共有されません。`replicaCount` は `1` のままにしてください。 |

## 設定

### Helm values

| キー | デフォルト値 | 説明 |
| :- | :- | :- |
| `pdu-exporter.enabled` | `true` | エクスポーターをデプロイします |
| `pdu-exporter.probe.enabled` | `true` | PDU をスクレイプする `Probe` を作成します。これがないと、PDU は何からもスクレイプされません。 |
| `pdu-exporter.probe.interval` | `30s` | スクレイプ間隔。短くしないでください。 |
| `pdu-exporter.probe.scrapeTimeout` | `15s` | Prometheus 側のスクレイプタイムアウト。`pdu-exporter.scrapeTimeout` より長くする必要があります。 |
| `pdu-exporter.probe.labels` | `{}` | お使いの Prometheus の `probeSelector` と一致させる必要があります |
| `pdu-exporter.targets` | `[]` | 有効化時は必須。[ターゲット](#ターゲット) をご参照ください。 |
| `pdu-exporter.outlets` | `false` | すべての PDU でアウトレットの測定値を報告します。ターゲットごとの `outlets` 値が優先されます。 |
| `pdu-exporter.cacheTTL` | `15s` | 1 台の PDU の読み取り結果を再利用する時間 |
| `pdu-exporter.scrapeTimeout` | `10s` | エクスポーター側のタイムアウト。最小 `5s`。 |
| `pdu-exporter.withSystem` | `true` | `pdu_info` 用の識別情報ブロックを読み取ります |
| `pdu-exporter.logLevel` | `info` | `debug`、`info`、`warn`、`error` のいずれか |
| `pdu-exporter.serviceMonitor.enabled` | `false` | エクスポーター自身の `/metrics` をスクレイプします |
| `pdu-exporter.serviceMonitor.interval` | `60s` | エクスポーター自身のエンドポイントにのみ適用されます。PDU の読み取り頻度は `probe.interval` が決めます。 |
| `pdu-exporter.serviceMonitor.scrapeTimeout` | `10s` | スクレイプ間隔を超えない値にする必要があります |
| `pdu-exporter.replicaCount` | `1` | エクスポーター Pod の数 |
| `pdu-exporter.port` | `9820` | エクスポーターが待ち受けるポート |
| `pdu-exporter.resources` | 50m / 64Mi、リミット 256Mi | Pod のリクエストとリミット |
| `pdu-exporter.nodeSelector` / `.tolerations` / `.affinity` | `{}` / `[]` / `{}` | 管理ネットワークに到達できるノードに Pod を固定します |
| `pdu-exporter.podSecurityContext` / `.securityContext` | 非 root、読み取り専用 rootfs、drop ALL | デフォルトで堅牢化済み |

### ターゲット

各ターゲットに必須なのは `address` のみです。文字列を直接指定した場合は `{address: <string>}` と等価です。

```yaml theme={}
pdu-exporter:
  enabled: true
  probe:
    enabled: true
  targets:
    - address: <pdu-1-ip>
      name: <rack-id>-pdu1
      labels:
        rack: "<rack-id>"
    - <pdu-2-ip>                    # no rack label: excluded from per-rack panels
    - address: <pdu-3-ip>
      outlets: true
```

| フィールド | 説明 |
| :- | :- |
| `address` | 必須。記述したとおりに `?target=` へ渡されます。ホスト名または IP アドレスを指定し、必要に応じて `:port` を付けられます。スキーム・パス・空白は使用できません。 |
| `name` | `pdu` ラベルの値として、アドレスの代わりに使われます |
| `labels` | 各キーが、この PDU のすべての系列のラベルになります |
| `outlets` | この PDU に限ってアウトレットの測定値を報告します |

## 次のステップ

* [監視のインストール](https://docs.sambanova.ai/docs/ja/v2.2.6/sambastack/hardware-admin/sambarack-manager/monitoring/monitoring-install.md)
* [リファレンスダッシュボード](https://docs.sambanova.ai/docs/ja/v2.2.6/sambastack/hardware-admin/sambarack-manager/monitoring/monitoring-reference-dashboards.md)
* [トラブルシューティング](https://docs.sambanova.ai/docs/ja/v2.2.6/sambastack/hardware-admin/sambarack-manager/monitoring/monitoring-troubleshooting.md)
