# アクション実行失敗アラート

アクション実行失敗アラートは、過去30分間におけるデプロイメント内のデータ統合アクション実行失敗回数が設定された閾値を超えたことを示します。

これは通常、メッセージがルールエンジンを通過したものの、アクションが外部システムにデータを書き込めなかったことを意味します。主な原因としては、対象システムの要件を満たさないデータ、ユニーク性の競合、接続障害などが挙げられます。

## データ欠落またはフィールドタイプ不一致

### 症状

メッセージに必須フィールドが欠落しているか、フィールドタイプが対象システムのスキーマと一致しない場合、アクションは失敗することがあります。

**デプロイメントログ**における `error missing_field` や `invalid_text_representation` といったエラーは、フィールドの欠落やタイプ不一致を示すことが多いです。

### 主な原因

- メッセージペイロードに対象システムが要求するフィールドが欠落している。
- フィールドタイプが対象定義と一致しない（例：数値フィールドに文字列が書き込まれている）。
- メッセージのタイムスタンプ精度（秒、ミリ秒、ナノ秒など）が対象システムの要件と異なる。

### 解決策

- メッセージペイロードに必須フィールドがすべて含まれ、対象システムが期待するフィールドタイプを使用していることを確認してください。
- 任意フィールドにはデフォルト値を設定するか、ルールSQLやルールロジックに型変換やエラー処理を追加してください。
- 対象システムが要求するタイムスタンプ精度を使用してください。

## データのユニーク性競合

### 症状

アクションがデータベースに書き込む際、既存のプライマリキーやユニーク制約と競合する値があるとアクションは失敗します。

**デプロイメントログ**における `unique_violation` や `duplicate key value violates unique constraint` といったエラーは、ユニーク性競合を示すことが多いです。

### 主な原因

- 同じレコードが複数回書き込まれている。
- 上流のルールロジックやメッセージのリトライによりアクションが繰り返し実行されている。
- ユニーク制約の対象となるレコードを区別できないほどタイムスタンプ精度が低い。

### 解決策

- 上流のルールロジックやリトライ動作を確認し、重複書き込みを防止してください。
- 各レコードを確実に識別できるフィールドまたはフィールドの組み合わせをプライマリキーやユニーク制約として選択してください。
- 重複レコードがユースケース上許容される場合は、ユニーク制約の削除または緩和を検討してください。

## 外部サービスの利用不可または接続失敗

### 症状

対象システムに接続できない、または接続が失敗すると、アクションは外部サービスにデータを書き込めません。

**デプロイメントログ**における `unrecoverable_error`、`timeout`、`producer_is_still_disconnected_after_retry` といったエラーはこの状態を示すことがあります。

### 主な原因

- 対象サービスが利用不可または正常稼働していない。
- ネットワークのレイテンシ、断続、または接続タイムアウト。
- 対象システムが過負荷で接続を拒否またはタイムアウトしている。
- 設定されたアカウントに必要な権限がない、または認証情報が誤っている（例：GCP Pub/Sub）。

### 解決策

- 対象のアドレスとポートが正しく、サービスが稼働していることを確認してください。
- EMQXと対象システム間のネットワーク接続を確認してください。
- 対象システムの負荷を監視し、想定される同時実行数に対応できるリソースを確保してください。
- アカウントや認証情報が必要な操作を実行する権限を持っていることを確認してください。

## トラブルシューティング

1. **EMQX Cloud Console**にログインします。

2. **デプロイメントログ**を開き、**エラータイプ**を**データ統合**に設定します。エラーの詳細はデータベースや外部サービスによって異なるため、対象システムの文脈で解釈してください。

3. エラーメッセージには通常、影響を受けたデータベーステーブルや対象リソース、および原因が記載されています。この情報をもとに該当するルールや出力アクションを特定してください。ログの内容が不明瞭な場合は、サポートチケットを提出して支援を受けてください。

4. ルールやアクションを更新するには、**データ統合** -> **ルール一覧** または **出力アクション一覧** に移動し、該当項目を見つけて **編集** をクリックします。

   ![ルールまたは出力アクションの編集](./_assets/action_failed_edit.png)

## 監視と統計

EMQX Cloud Consoleの**データ統合**ページで、出力アクションの成功回数と失敗回数を確認し、実行状況を監視できます。

![出力アクション実行統計](./_assets/action_failed_stats.png)
