> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ja/self-hosted/enterprise/deployment-manager/services/event-store.md).

# Event Store

自動保持、ストレージ制限、オプションのクラウドバックアップ付きで、エッジデバイスに推論イベントを保存します。

Event Store は、デバイス上の推論パイプラインによって生成されたイベントを記録するエッジコンテナサービスです。検査結果、品質チェック、安全アラート、その他の Workflow 出力をローカルに保持し、REST API 経由で返却します。また、デバイスのディスクが容量不足にならないよう、独自にディスク使用量を管理します。

Event Store に書き込まれたイベントは、Roboflow にもバックアップできます。バックアップ先は [Vision Events](/deployment/ja/to/vision-events.md) で、長期保存および分析に利用できます。

{% hint style="info" %}
Event Store は Enterprise のお客様専用で利用できます。 [Roboflow の営業チームにお問い合わせください](https://roboflow.com/sales) 詳細はこちら。
{% endhint %}

## 接続の詳細

置き換える `<device-ip>` を、Deployment Manager のデバイスページに表示される IP アドレスに置き換えます。

<table data-search="false"><thead><tr><th>用途</th><th>アドレス</th></tr></thead><tbody><tr><td>REST API</td><td><code>http://&#x3C;device-ip>:8001</code></td></tr><tr><td>インタラクティブな Swagger ドキュメント</td><td><code>http://&#x3C;device-ip>:8001/docs</code></td></tr></tbody></table>

ポート 8001 は HTTP 経由で両方を提供します。詳細は [Event Store REST API](/deployment/ja/self-hosted/enterprise/deployment-manager/services/event-store/rest-api.md) でエンドポイントのリファレンスを確認してください。

API を呼び出さずにデバイスのライブ容量と使用履歴を確認するには、次を使用します。 [Event Store のステータスを表示](/deployment/ja/self-hosted/enterprise/deployment-manager/monitoring/view-event-store-status.md).

## ストレージ設定

これらはデバイスの［設定］タブにある Event Store カードから設定します。それぞれサービス上の環境変数に対応しています。

<table data-search="false"><thead><tr><th>設定</th><th>変数</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td>「保持日数」</td><td><code>RETENTION_DAYS</code></td><td><code>1</code></td><td>この日数より古いイベントは削除されます。</td></tr><tr><td>「最大レコード数」</td><td><code>MAX_RECORDS</code></td><td><code>1000000</code></td><td>保持するイベントの最大数です。超過すると、最も古いイベントから削除されます。</td></tr><tr><td>「最大レコードサイズ」</td><td><code>MAX_RECORD_SIZE_BYTES</code></td><td><code>524288</code> （512 KB）</td><td>単一イベントレコードの最大サイズです。これより大きいイベントは拒否されます。</td></tr><tr><td>「最大ストレージ」</td><td><code>MAX_STORAGE_BYTES</code></td><td><code>5368709120</code> （5 GB）</td><td>保存ファイルのディスク使用量上限です。使用量がこの上限に近づくと、クリーンアップによりファイルが整理されます。</td></tr><tr><td>「クリーンアップ間隔」</td><td><code>CLEANUP_INTERVAL_SECONDS</code></td><td><code>300</code></td><td>自動クリーンアップの実行頻度です。</td></tr></tbody></table>

追加の変数：

<table data-search="false"><thead><tr><th>変数</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td><code>PORT</code></td><td><code>8001</code></td><td>API 用の HTTP ポートです。</td></tr><tr><td><code>DATA_DIR</code></td><td><code>/data</code></td><td>デバイス上のデータ保存ディレクトリです。</td></tr><tr><td><code>CONSISTENCY_CHECK_INTERVAL</code></td><td><code>12</code></td><td>N 回のクリーンアップごとに整合性チェックを実行します（デフォルトのクリーンアップ間隔ではおよそ 1 時間ごと）。</td></tr><tr><td><code>API_KEY</code></td><td>なし</td><td>任意の API キーです。詳細は <a href="#authentication">認証</a>.</td></tr></tbody></table>

## 自動クリーンアップ

クリーンアップは専用のバックグラウンドスレッドで実行されるため、API リクエストをブロックしません。スケジュールされた各処理では、次の 3 ステップが順に実行されます。

1. 保持期間。この期間より古いレコードを削除します `RETENTION_DAYS`.
2. レコード上限。レコード数が次を超えた場合 `MAX_RECORDS`、上限を超えたレコードを削除します。すでにアップロード済みのレコードを優先し、次に最も古いレコードを削除します。
3. ストレージ上限。保存ファイルが次に近づくと `MAX_STORAGE_BYTES`、画像ファイルを削除します。すでにアップロード済みのファイルを優先し、次に最も古いファイルを削除します。親レコードは保持され、その `current_file_count` が減算されます。

毎 `CONSISTENCY_CHECK_INTERVAL` 回のクリーンアップごとに、サービスはデータベースとファイルシステムの照合も行います。進行中の書き込みに触れないよう 10 分間の猶予期間を設け、対応するデータベースレコードがないディスク上の孤立ファイルを削除します。また、ファイルがすでに存在しない不整合なデータベースレコードも削除します。

次を使用して、直ちに処理を実行することもできます。 `POST /admin/cleanup`。詳細は [管理](/deployment/ja/self-hosted/enterprise/deployment-manager/services/event-store/rest-api.md#administration).

### 画像の一時性

API から返される画像 ID は、本質的に短命です。1 分前に解決できた ID でも、クリーンアップ処理後には 404 になる場合があります。これは、ストレージが制約されたエッジハードウェアでは意図された動作です。

* 画像を取得する際は、次を処理してください。 `404` レスポンス
* 画像 ID を単一セッションを超えてキャッシュしないでください。
* 比較する `current_file_count` と `original_file_count` をイベント上で比較し、そのファイルがクリーンアップされたかどうかを確認します。

## ドラフトイベントと動画

パイプラインはイベントを直ちに保存し、エンコードの完了後、数秒後に動画を添付できます。イベントは次を指定して作成します。 `draft: true`。動画の準備ができたらアップロードし、その後イベントを確定します。次を指定せずに作成されたイベントは `draft` 作成時に確定されるため、既存のパイプラインには影響しません。

イベントが確定されるまでは、クラウドへのアップロード対象から除外されます。また、クリーンアップからも保護されますが、これはサービスでクラウドアップロードが有効な場合に限られます。クラウドアップロードが無効の場合、ドラフトは他のレコードと同様に削除可能です。

<table data-search="false"><thead><tr><th>設定</th><th>変数</th><th>デフォルト</th><th>説明</th></tr></thead><tbody><tr><td>「ドラフトの自動確定までの時間（秒）」</td><td><code>DRAFT_AUTO_FINALIZE_SECONDS</code></td><td><code>3600</code></td><td>動画が届かないドラフトは、この秒数の経過後に強制的に確定されます。これにより、バックアップおよびクリーンアップの対象にできます。</td></tr><tr><td>「最大動画アップロードサイズ（MB）」</td><td><code>MAX_VIDEO_UPLOAD_BYTES</code></td><td><code>1073741824</code> （1 GB、アプリでは <code>1024</code> として入力）</td><td>デバイス上のイベントに添付できる単一動画の最大サイズです。変数の単位はバイトで、アプリのフィールドの単位は MB です。</td></tr></tbody></table>

{% hint style="warning" %}
設定 `DRAFT_AUTO_FINALIZE_SECONDS` に `0` するとスイープが無効になります。その後 finalize を呼び出さないプロデューサーのドラフトが蓄積され、クラウドバックアップが有効な場合はストアを埋め尽くして HTTP 529 により新規書き込みをブロックする可能性があります。ストアをリセットするまでこの状態は続きます。
{% endhint %}

## 画像ごとのメタデータとローカル専用ファイル

パイプラインは、画像と予測以外の追加データをイベントに添付できます。

画像ごとのメタデータは、判定、シリアル番号、角度ラベルなど、個々の画像に添付されるキー/値データからなる小さな単一階層オブジェクトです。レコードと共に保存され、API から返されますが、クエリはできません。「レコードとファイル」バックアップでは、各画像と共にアップロードされます。 `METADATA_MAX_VALUE_LENGTH` （デフォルト `1000`）は文字列値の長さを制限します。

ローカル専用ファイルは、検査 Blob、サムネイル、JSON など、イベントに添付される任意のファイルです。これらはデバイス上に保持され、アップロードされることはありません。コンテンツタイプの制限はなく、 `MAX_LOCAL_ONLY_FILE_UPLOAD_BYTES` （デフォルト `104857600`（100 MB）は各アップロードのサイズを制限します。ファイルを添付できるのはイベントがまだドラフトである間だけなので、パイプラインは次を指定してイベントを作成する必要があります。 `draft: true`、ファイルを添付してから確定します。

どちらについても、以下で詳しく説明しています。 [REST API リファレンス](/deployment/ja/self-hosted/enterprise/deployment-manager/services/event-store/rest-api.md).

## クラウドバックアップ

デバイスで Vision Events のバックアップが有効になっている場合、確定済みイベントは Roboflow にアップロードされます。2 つのモードを利用できます。

* 「レコードとファイル」は、関連する画像ファイル、画像ごとのメタデータ、動画クリップとともにイベントメタデータをアップロードします。
* 「レコードのみ」はイベントメタデータをアップロードし、画像と動画はデバイス上に残します。これにより帯域幅の使用量が少なくなります。

ローカル専用ファイルは、どちらのモードでもアップロードされません。

「レコードとファイル」モードでは、MP4 および MOV クリップがイベントごとに最大 4 本までアップロードされ、Vision Events ダッシュボードで再生できます。他の形式のクリップ（例：MKV、AVI）、5 本目以降のクリップ、および 3 GB（クラウド上限）を超えるクリップはデバイス上に残ります。デバイス上限（「最大動画アップロードサイズ（MB）」）は別個で、デフォルトは 1 GB です。そのため、デバイス上に保持するクリップに限り、3 GB を超える値に引き上げてください。

クリップのアップロードに失敗すると、イベント全体のアップロードは次の期間保留されます。 `UPLOAD_RETRY_DELAY_SECONDS` （デフォルト `3600`（1 時間）の後に次回の試行が行われます。次の回数の後、 `VIDEO_UPLOAD_MAX_ATTEMPTS` 回失敗した場合（デフォルト `3`）、クリップはスキップされ、イベントはクリップなしでアップロードされます。そのため、そのイベントが Roboflow に到達するのは約 3 時間遅くなる可能性があります。

詳細は [イベントの送信](/deployment/ja/to/vision-events/send-events.md) で、バックアップの有効化と Roboflow での結果のクエリについて確認してください。

### アップロードの信頼性

失敗したアップロードは再試行されます。「アップロード放棄ポリシー」は、サーバーが繰り返し拒否するレコードをどう扱うかを制御します。

<table data-search="false"><thead><tr><th>ポリシー</th><th>変数値</th><th>動作</th></tr></thead><tbody><tr><td>放棄しない</td><td><code>NEVER_ABANDON</code> （デフォルト）</td><td>レコードは成功するまで永久に再試行されます。データにとっては最も安全ですが、停止したレコードでデバイスが埋まり始めると、未アップロードのレコードを破棄する代わりに HTTP 529 で新規書き込みを拒否し始めます。</td></tr><tr><td>最大試行回数後に放棄</td><td><code>ABANDON_AFTER_MAX_ATTEMPTS</code></td><td>次の回数の後、 <code>UPLOAD_MAX_ATTEMPTS</code> 回のコンテンツエラー試行後（デフォルト <code>10</code>）、レコードは放棄済みとしてマークされ、ストレージクリーンアップの優先候補になります。継続的に失敗するレコードを失うほうが、新規書き込みをブロックするより望ましい場合に使用してください。</td></tr></tbody></table>

サーバーからのコンテンツ形式の 4xx レスポンス（例：400、413、422）のみが試行回数を進めます。すべての 5xx レスポンス、タイムアウト、ネットワークエラー、および 401、403、404、408、429 は一時的なものとして扱われ、ポリシーにかかわらず再試行されます。

`MIN_UPLOAD_IMAGE_BYTES` （デフォルト `1`）は、アップロード前に指定サイズ未満の画像をスキップします。破損していても空ではない画像は現在サーバーから 5xx として返されるため、どちらのポリシーでも永久に再試行されます。この値を一般的な破損サイズより大きくすることが回避策です。

## 認証

API キー認証は任意で、デフォルトでは無効です。次を設定してください。 `API_KEY` をサービスで有効にすると、その後は次を除くすべてのエンドポイントで `/health` 次のヘッダーが必要になります。 `X-API-Key` ヘッダー。

```yaml
環境：
  - API_KEY=your-secret-api-key-here
```

```bash
curl -H "X-API-Key: your-secret-api-key-here" \
  http://<device-ip>:8001/v2/events/latest/query
```

`/health` は認証なしでも到達可能なままなので、監視システムやロードバランサーでポーリングできます。
