💢

🚨 OpenSearchでデータが見えない!ISMポリシー導入後 Discoverがエラーになる

に公開

OpenSearch Dashboards の Discover 画面を開くと、データが全く表示されず、エラーが発生。これは単なる設定ミスではなく、マッピングの競合、テンプレートの制約が原因で、解決策まだありません。

この複雑なトラブルシューティングの全過程を残します。


🔍 第1章:エラーの根本原因と初期の奮闘

1.1 初期診断:date型とlong型のマッピング不一致

エラー発生後、Dev Toolsで確認した結果、Discoverが時間範囲検索に利用するはずのタイムスタンプフィールド(serverTimestamp)が、意図せず long (数値) 型としてマッピングされていました。

  • Dashboardsの要件: 時間検索には date 型が必須。
  • 現状のマッピング: long 型。
  • 結果: 時間検索用のクエリが実行できず、400 Bad Request エラーが発生。

これは、ISMポリシーのローテーションで新しいインデックスが作成される際、正しいマッピングを強制する Index Template が存在しなかったため、OpenSearchがデータを見て動的マッピングで long 型と自動認識してしまったことが原因でした。

1.2 ISMテンプレートによるマッピング強制の失敗

Index Templateが管理メニューにない環境だったため、ISMポリシーの ism_template 内に date 型マッピングを記述して解決を試みました。

// 試みたが失敗したコードの一部
"ism_template": [
    {
        // ...
        "mappings": { 
            /* ... (ここに date 型マッピングを記述) ... */ 
        }
    }
]
// 発生したエラー: [illegal_argument_exception] Invalid field: [mappings] found in ISMTemplate.

ISMポリシーのバージョン制約により、ism_template内に直接 mappings を記述することはできず、この方法も失敗しました。

【解決策の修正】
最終的に、マッピングは ISMポリシーとは別に Index Template API (PUT _index_template/...) を使用して作成し、ISMポリシーは ism_template でインデックスパターンに紐付ける形に修正しました。


💥 第2章:マッピング修正後に発生した二段構えのエラー

正しい date 型マッピングを持つインデックスが作成された後、データ投入を行ったところ、さらに困難なエラーに直面しました。

2.1 データ投入時のマッピング競合(Part 2)

  • エラー: mapper [serverTimestamp] cannot be changed from type [date] to [long]
  • 状況: PythonコードでUNIXミリ秒の数値 (1764640876889) を str()文字列に変換して投入していました。
  • OpenSearchの解釈: OpenSearchは、投入された 1764640876889 がlongになり、date 型としてパースしようと試みましたが、パースに失敗。結果、この値を曖昧な longとして認識しようとしました。
  • 競合: 既存の date マッピング vs. 投入データの long 解釈 → マッピング変更不可で拒否。

マッピングで "format" : "epoch_millis" が指定されていても、数値のみの文字列はOpenSearchにとって曖昧であり、date型として確実に認識させるには不十分でした。

これまだ解決できません。

Discussion