Amazon Web Services ブログ

Amazon OpenSearch Ingestion 101: 主要メトリクスに対する CloudWatch アラームの設定

本記事は 2026 年 2 月 5 日 に公開された「Amazon OpenSearch Ingestion 101: Set CloudWatch alarms for key metrics」を翻訳したものです。

Amazon OpenSearch Ingestion は、Amazon OpenSearch ServiceOpenSearch Serverless コレクションへのデータ取り込みを簡素化する、フルマネージドのサーバーレスデータパイプラインです。主要な概念は以下のとおりです。

  • Source – パイプラインがデータを取り込む方法を指定する入力コンポーネントです。各パイプラインには 1 つの Source があり、プッシュベースまたはプルベースのいずれかです。
  • Processors – 配信前にレコードのフィルタリング、変換、エンリッチメントを行う中間処理ユニットです。
  • Sink – パイプラインがデータを発行する宛先を指定する出力コンポーネントです。1 つ以上の宛先にレコードを発行できます。
  • Buffer – Source と Sink の間のレイヤーです。イベントの一時的なストレージとして機能し、Source を下流の Processors や Sink から分離します。Amazon OpenSearch Ingestion では、プッシュベースの Source 向けに永続バッファオプションも提供しています。
  • Dead-letter queues (DLQs) – Sink への書き込みに失敗したレコードをキャプチャするために Amazon Simple Storage Service (Amazon S3) を設定し、エラー処理やトラブルシューティングに活用できます。

このエンドツーエンドのデータ取り込みサービスにより、インフラストラクチャを管理せずに、OpenSearch 環境へのデータ収集、処理、配信ができます。

本記事では、OpenSearch Ingestion パイプラインに対する Amazon CloudWatch アラームの設定を詳しく説明します。推奨アラームにとどまらず、パイプラインのボトルネックが Sink、データ送信先の OpenSearch クラスター、Processors、Source からの取り込み不足のいずれにあるかを特定する方法を解説します。OpenSearch Ingestion パイプラインの監視やトラブルシューティングに役立ちます。

概要

OpenSearch Ingestion パイプラインの監視は、問題の早期発見と対処に欠かせません。主要なメトリクスを理解し、適切なアラームを設定することで、データ取り込みワークフローの健全性とパフォーマンスを管理できます。以降のセクションでは、Source、Processor、Sink のアラームメトリクスを詳しく説明します。アラームに使用するしきい値、期間、アラームのデータポイント数は、個々のユースケースや要件に応じて異なります。

前提条件

OpenSearch Ingestion パイプラインの作成については、Amazon OpenSearch Ingestion パイプラインの作成を参照してください。CloudWatch アラームの作成については、静的しきい値に基づく CloudWatch アラームの作成を参照してください。

OpenSearch Ingestion パイプラインのログ記録を有効にすると、パイプラインの操作や取り込みアクティビティ中のエラー、警告、情報メッセージなどのログがキャプチャされます。パイプラインログの有効化と監視の詳細は、パイプラインログの監視を参照してください。

Sources

パイプラインのエントリポイントは、監視を開始すべき場所です。Source コンポーネントに適切なアラームを設定することで、取り込みのボトルネックや接続の問題を迅速に特定できます。以下の表に、Source ごとの主要なアラームメトリクスをまとめます。

Source アラーム 説明 推奨アクション
HTTP/ OpenTelemetry requestsTooLarge.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
クライアント (データプロデューサー) のリクエストペイロードサイズが最大リクエストペイロードサイズを超えており、HTTP 413 ステータスコードが返されます。デフォルトの最大リクエストペイロードサイズは、HTTP Source で 10 MB、OpenTelemetry Source で 4 MB です。HTTP Source の制限は、永続バッファが有効なパイプラインで引き上げることができます。 リクエストペイロードが最大サイズを超えないように、クライアントのチャンクサイズを小さくします。受信リクエストのペイロードサイズの分布は、payloadSize.sum メトリクスで確認できます。
HTTP requestsRejected.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
クライアント (データプロデューサー) から OpenSearch Ingestion パイプラインの HTTP エンドポイントにリクエストが送信されましたが、パイプラインがリクエストを受け付けず、レスポンスでステータスコード 429 を返して拒否しました。 問題が継続する場合は、パイプラインの最小 OCU を増やして、リクエスト処理に追加のリソースを割り当てることを検討してください。
Amazon S3 s3ObjectsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
パイプラインが Amazon S3 Source から一部のオブジェクトを読み取れません。 以下のリファレンスガイドの REF-003 を参照してください。
Amazon DynamoDB totalOpenShards.max と activeShardsInProcessing.value の差分

しきい値: >0

統計: Maximum (totalOpenShards.max) および Sum (activeShardsInProcessing.value)

アラームのデータポイント: 3/3。補足: このアラームの設定の詳細は REF-004 を参照してください。
パイプラインが処理すべきオープンシャードの合計数と、現在処理中のアクティブシャード数の整合性を監視します。activeShardsInProcessing.value はシャードのクローズに伴い定期的に減少しますが、totalOpenShards.max との不整合が数分以上続くことはないはずです。 アラームがトリガーされた場合、パイプラインの停止と再起動を検討してください。この操作はパイプラインの状態をリセットし、新しいフルエクスポートで再開します。非破壊的な操作のため、インデックスや DynamoDB のデータは削除されません。再起動前に新しいインデックスを作成しない場合、エクスポートがインデックス内の現在の _version より古いドキュメントを挿入しようとするため、バージョン競合によるエラーが多数発生する可能性があります。バージョン競合エラーは安全に無視できます。不整合の根本原因分析については、AWS サポートにお問い合わせください。
Amazon DynamoDB dynamodb.changeEventsProcessingErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
DynamoDB のストリーム処理を行うパイプラインにおける、変更イベントの処理エラー数です。 メトリクスの値が増加している場合は、以下のリファレンスガイドの REF-002 を参照してください。
Amazon DocumentDB documentdb.exportJobFailure.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
Amazon S3 へのエクスポートのトリガーに失敗しました。 パイプラインログで「Received an exception during export from DocumentDB, backing off and retrying.」で始まる ERROR レベルのログを確認してください。ログには障害の根本原因を示す例外の詳細が含まれています。
Amazon DocumentDB documentdb.changeEventsProcessingErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
Amazon DocumentDB のストリーム処理を行うパイプラインにおける、変更イベントの処理エラー数です。 以下のリファレンスガイドの REF-002 を参照してください。
Kafka kafka.numberOfDeserializationErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
OpenSearch Ingestion パイプラインが Kafka からレコードを消費する際にデシリアライゼーションエラーが発生しました。 パイプラインログの WARN レベルのログを確認し、パイプライン設定で serde_format が正しく設定されていること、およびパイプラインロールが AWS Glue Schema Registry (使用している場合) にアクセスできることを確認してください。
OpenSearch opensearch.processingErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
インデックスからの読み取り中に処理エラーが発生しました。通常、OpenSearch Ingestion パイプラインは自動的にリトライしますが、不明な例外の場合は処理をスキップする可能性があります。 以下のリファレンスガイドの REF-001 または REF-002 を参照して、処理エラーの原因となった例外の詳細を確認してください。
Amazon Kinesis Data Streams kinesis_data_streams.recordProcessingErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
OpenSearch Ingestion パイプラインがレコードの処理中にエラーが発生しました。 メトリクスの値が増加している場合は、以下のリファレンスガイドの REF-002 を参照してください。原因の特定に役立ちます。
Amazon Kinesis Data Streams kinesis_data_streams.acknowledgementSetFailures.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
パイプラインがストリームの処理中にネガティブ確認応答を受け取り、ストリームの再処理が発生しました。 以下のリファレンスガイドの REF-001 または REF-002 を参照してください。
Confluence confluence.searchRequestsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
コンテンツの取得中にパイプラインで例外が発生しました。 パイプラインログで「Error while fetching content.」で始まる ERROR レベルのログを確認してください。ログには障害の根本原因を示す例外の詳細が含まれています。
Confluence confluence.authFailures.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
接続確立時に受信した UNAUTHORIZED 例外の数です。 サービスは自動的にトークンを更新しますが、メトリクスの値が増加している場合は、パイプラインログの ERROR レベルのログを確認して、トークン更新が失敗している原因を特定してください。
Jira jira.ticketRequestsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
Issue の取得中にパイプラインで例外が発生しました。 パイプラインログで「Error while fetching issue.」で始まる ERROR レベルのログを確認してください。ログには障害の根本原因を示す例外の詳細が含まれています。
Jira jira.authFailures.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
接続確立時に受信した UNAUTHORIZED 例外の数です。 サービスは自動的にトークンを更新しますが、メトリクスの値が増加している場合は、パイプラインログの ERROR レベルのログを確認して、トークン更新が失敗している原因を特定してください。

Processors

以下の表に、Processor ごとのアラームメトリクスの詳細を示します。

Processor アラーム 説明 推奨アクション
AWS Lambda aws_lambda_processor.recordsFailedToSentLambda.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
一部のレコードを Lambda に送信できませんでした。 このメトリクスの値が高い場合は、以下のリファレンスガイドの REF-002 を参照してください。
AWS Lambda aws_lambda_processor.numberOfRequestsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
パイプラインが Lambda 関数を呼び出せませんでした。 通常の状況では発生しませんが、発生した場合は Lambda のログを確認し、以下のリファレンスガイドの REF-002 を参照してください。
AWS Lambda aws_lambda_processor.requestPayloadSize.max

しきい値: >= 6292536

統計: MAXIMUM

期間: 5 分

アラームのデータポイント: 1/1
ペイロードサイズが 6 MB の制限を超えているため、Lambda 関数を呼び出せません。 パイプライン設定の aws_lambda Processor のバッチ処理しきい値を見直してください。
Grok grok.grokProcessingMismatch.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
受信データがパイプライン設定で定義された Grok パターンと一致しません。 このメトリクスの値が高い場合は、Grok Processor の設定を確認し、定義されたパターンが受信データに合致しているか確認してください。
Grok grok.grokProcessingErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
定義された Grok パターンに従って受信データから情報を抽出する際に、パイプラインで例外が発生しました。 このメトリクスの値が高い場合は、以下のリファレンスガイドの REF-002 を参照してください。
Grok grok.grokProcessingTime.max

しきい値: >= 1000

統計: MAXIMUM

期間: 5 分

アラームのデータポイント: 1/1
各レコードが match 設定オプションのパターンとマッチングするのにかかる最大時間です。 所要時間が 1 秒以上の場合は、受信データと Grok パターンを確認してください。マッチングの最大時間は 30,000 ミリ秒で、timeout_millis パラメータで制御されます。

Sink と DLQ

以下の表に、Sink と DLQ のアラームメトリクスの詳細を示します。

Sink アラーム 説明 推奨アクション
OpenSearch opensearch.bulkRequestErrors.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
バルクリクエストの送信中に発生したエラーの数です。 以下のリファレンスガイドの REF-002 を参照して、例外の詳細を確認してください。
OpenSearch opensearch.bulkRequestFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
OpenSearch ドメインへのバルクリクエスト送信後に受信したエラーの数です。 以下のリファレンスガイドの REF-001 を参照して、例外の詳細を確認してください。
Amazon S3 s3.s3SinkObjectsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
OpenSearch Ingestion パイプラインが Amazon S3 へのオブジェクト書き込み中に障害が発生しました。 パイプラインロールが指定された S3 キーにオブジェクトを書き込むために必要な権限を持っていることを確認してください。パイプラインログを確認して、障害が発生した具体的なキーを特定してください。

s3.s3SinkObjectsEventsFailed.count メトリクスを監視して、書き込み失敗の詳細を確認してください。
Amazon S3 DLQ s3.dlqS3RecordsFailed.count

しきい値: >0

統計: SUM

期間: 5 分

アラームのデータポイント: 1/1
DLQ が有効なパイプラインでは、レコードは Sink または DLQ (Sink に送信できない場合) に送信されます。このアラームは、パイプラインがエラーによりレコードを DLQ に送信できなかったことを示します。 以下のリファレンスガイドの REF-002 を参照して、例外の詳細を確認してください。

Buffer

以下の表に、Buffer のアラームメトリクスの詳細を示します。

Buffer アラーム 説明 推奨アクション
BlockingBuffer BlockingBuffer.bufferUsage.value

しきい値: >80

統計: AVERAGE

期間: 5 分

アラームのデータポイント: 1/1
バッファ内のレコード数に基づく使用率 (%) です。 詳しく調査するには、timeElapsed.max メトリクスの比較と bulkRequestLatency.max の分析により、パイプラインのボトルネックが Processor にあるか Sink にあるかを確認してください。
Persistent persistentBufferRead.recordsLagMax.value

しきい値: > 5000

統計: AVERAGE

期間: 5 分

アラームのデータポイント: 1/1
永続バッファに格納されているレコード数の最大ラグです。 bufferUsage の値が低い場合は、最大 OCU を増やしてください。bufferUsage も高い場合 (>80) は、パイプラインのボトルネックが Processor にあるか Sink にあるかを調査してください。

リファレンスガイド

パイプラインの一般的な問題を解決するためのガイダンスです。

REF-001: WARN レベルのログ確認

パイプラインログの WARN レベルのログを確認して、例外の詳細を特定してください。

REF-002: ERROR レベルのログ確認

パイプラインログの ERROR レベルのログを確認して、例外の詳細を特定してください。

REF-003: S3 オブジェクトの失敗

s3ObjectsFailed.count の値が増加している場合のトラブルシューティングでは、以下のメトリクスを監視して根本原因を絞り込んでください。

  • s3ObjectsAccessDenied.count – パイプラインが S3 オブジェクトの読み取り時に Access Denied または Forbidden エラーが発生した場合にインクリメントされます。一般的な原因は以下のとおりです。
  • パイプラインロールの権限不足。
  • パイプラインロールのアクセスを許可しない制限的な S3 バケットポリシー。
  • クロスアカウントの S3 バケットの場合、bucket_owners マッピングの設定が正しくない。
  • s3ObjectsNotFound.count – パイプラインが S3 オブジェクトの読み取りを試みた際に Not Found エラーを受信した場合にインクリメントされます。

推奨アクションについてさらにサポートが必要な場合は、AWS サポートにお問い合わせください。

REF-004: Amazon DynamoDB Source の totalOpenShards.max と activeShardsInProcessing.value の差分アラームの設定

  1. https://console.aws.amazon.com/cloudwatch/ で CloudWatch コンソールを開きます。
  2. ナビゲーションペインで AlarmsAll alarms を選択します。
  3. Create alarm を選択します。
  4. Select Metric を選択します。
  5. Source を選択します。
  6. Source で、<sub-pipeline-name>、<pipeline-name>、<region> を更新した以下の JSON を使用できます。
    {
        "metrics": [
            [ { "expression": "m1-e1", "label": "Expression2", "id": "e2", "period": 900 } ],
            [ { "expression": "FLOOR((m2/15)+0.5)", "label": "Expression1", "id": "activeShardsInProcessing", "visible": false, "period": 900 } ],
            [ "AWS/OSIS", "<sub-pipeline-name>.dynamodb.totalOpenShards.max", "PipelineName", "<pipeline-name>", { "stat": "Maximum", "id": "m1", "visible": false } ],
            [ ".", "<sub-pipeline name>.dynamodb.activeShardsInProcessing.value", ".", ".", { "stat": "Average", "id": "m2", "visible": false } ]
        ],
        "view": "timeSeries",
        "stacked": false,
        "period": 900,
        "region": "<region>"
    }

上記のメトリクスに基づくいくつかのシナリオを見てみましょう。

シナリオ 1 – パイプラインレイテンシーの理解と低減

パイプライン内のレイテンシーは、主に 3 つの要素で構成されます。

  • バルクリクエストで OpenSearch にドキュメントを送信するのにかかる時間
  • データがパイプラインの Processor を通過するのにかかる時間
  • データがパイプラインバッファに滞留する時間

バルクリクエストと Processor (上記リストの最初の 2 つ) が、バッファの蓄積とレイテンシーの根本原因です。

バッファに格納されているデータ量を監視するには、bufferUsage.value メトリクスを監視します。バッファ内のレイテンシーを低減する唯一の方法は、ボトルネックの所在に応じて、パイプラインの Processor と Sink のバルクリクエストレイテンシーを最適化することです。

bulkRequestLatency メトリクスは、リトライを含むバルクリクエストの実行時間を測定し、OpenSearch Sink への書き込みパフォーマンスの監視に使用できます。このメトリクスが異常に高い値を示す場合、OpenSearch Sink が過負荷状態にあり、処理時間が増加していることを示します。さらに調査するには、bulkRequestNumberOfRetries.count メトリクスを確認して、高レイテンシーがスロットリング (429 エラー) などによる OpenSearch からのリジェクトに起因するリトライによるものかどうかを確認してください。ドキュメントエラーがある場合は、設定済みの DLQ を調べて、失敗したドキュメントの詳細を確認してください。また、パイプライン設定で max_retries パラメータを設定してリトライ回数を制限できます。ただし、documentErrors メトリクスがゼロ、bulkRequestNumberOfRetries.count もゼロで、bulkRequestLatency が高いままの場合は、OpenSearch Sink が過負荷状態である可能性が高いです。この場合は、宛先のメトリクスを確認して詳細を調べてください。

bulkRequestLatency メトリクスが低く (例: 1.5 秒未満)、bulkRequestNumberOfRetries メトリクスが 0 の場合、ボトルネックはパイプラインの Processor にある可能性が高いです。Processor のパフォーマンスを監視するには、<processorName>.timeElapsed.avg メトリクスを確認してください。このメトリクスは、Processor がレコードのバッチ処理を完了するのにかかった時間を報告します。例えば、Grok Processor が他の Processor よりも timeElapsed の値が大幅に高い場合、Grok パターンが遅いことが原因である可能性があり、ユースケースに応じてパターンの最適化やより高性能な Processor への置き換えを検討できます。

シナリオ 2 – OpenSearch へのドキュメントエラーの理解と解決

documentErrors.count メトリクスは、バルクリクエストで送信に失敗したドキュメントの数を追跡します。失敗は、マッピングの競合、無効なデータ形式、スキーマの不一致など、さまざまな原因で発生する可能性があります。このメトリクスがゼロ以外の値を報告する場合、一部のドキュメントが OpenSearch によって拒否されていることを示します。根本原因を特定するには、設定済みの Dead Letter Queue (DLQ) を調べてください。DLQ には、失敗したドキュメントとエラーの詳細がキャプチャされています。DLQ は、不正なフィールドタイプ、必須フィールドの欠落、サイズ制限を超えるデータなどのパターンを特定するための情報を提供します。例えば、一般的な問題のサンプル DLQ オブジェクトを以下に示します。

Mapper parsing exception:

{"dlqObjects": [{
        "pluginId": "opensearch",
        "pluginName": "opensearch",
        "pipelineName": "<PipelineName>",
        "failedData": {
            "index": "<IndexName>",
            "indexId": null,
            "status": 400,
            "message": "failed to parse field [<fieldname>] of type [integer] in document with id '<DocumentId>'. Preview of field's value: 'N/A' caused by For input string: \"N/A\"",
            "document": {<OriginalDocument>}
        },
        "timestamp": "…"
    }]}

ここでは、OpenSearch が数値専用のフィールドにテキスト文字列「N/A」を格納できないため、ドキュメントを拒否して DLQ に格納しています。

Limit of total fields exceeded:

{"dlqObjects": [{
        "pluginId": "opensearch",
        "pluginName": "opensearch",
        "pipelineName": "<PipelineName>",
        "failedData": {
            "index": "<IndexName>",
            "indexId": null,
            "status": 400,
            "message": "Limit of total fields [<field limit>] has been exceeded",
            "document": {<OriginalDocument>}
        },
        "timestamp": "…"
    }]}

index.mapping.total_fields.limit 設定は、インデックスマッピングで許可されるフィールドの最大数を制御するパラメータで、この制限を超えるとインデックス操作が失敗します。すべてのフィールドが必要かどうかを確認するか、OpenSearch Ingestion が提供するさまざまな Processor を活用してデータを変換してください。

問題を特定したら、ソースデータを修正するか、パイプライン設定を調整してデータを適切に変換するか、OpenSearch のインデックスマッピングを変更して受信データの形式に対応してください。

クリーンアップ

OpenSearch Ingestion パイプラインの監視用アラームを設定する際は、発生する可能性のあるコストに注意してください。設定する各アラームには、CloudWatch の料金モデルに基づいて料金が発生します。

不要な費用を避けるため、アラームの要件を慎重に評価して適切に設定してください。ユースケースに不可欠なアラームのみを設定し、アラーム設定を定期的に見直して、未使用または冗長なアラームを特定して削除してください。

まとめ

本記事では、CloudWatch アラームによる OpenSearch Ingestion パイプラインの監視について、Source、Processor、Sink の主要なメトリクスを取り上げて解説しました。本記事では最も重要なメトリクスを取り上げましたが、さらに詳しい情報については以下のリソースを参照してください。

CloudWatch アラームで取り込みパイプラインの健全性を維持し、最適なデータフローを確保しましょう。

著者について

Utkarsh Agarwal

Utkarsh Agarwal

Utkarsh は、AWS の Support Engineering チームのクラウドサポートエンジニアです。お客様にガイダンスと技術支援を提供し、AWS クラウドでスケーラブルで可用性が高く安全なソリューションの構築を支援しています。趣味は映画やテレビシリーズの鑑賞、そしてもちろんクリケット観戦です。最近はフーズボールの上達にも挑戦しています。

Ramesh Chirumamilla

Ramesh Chirumamilla

Ramesh は、Amazon Web Services のテクニカルマネージャーです。お客様の AWS サービスの導入と活用を推進する戦略の策定と実行をプロアクティブに支援しています。Amazon OpenSearch Service の経験を活かし、お客様の OpenSearch ドメインのコスト最適化、適切なサイジング、ベストプラクティスの実装を支援しています。

Taylor Gray

Taylor Gray

Taylor は、Amazon Web Services の Amazon OpenSearch Ingestion チームのソフトウェアエンジニアです。Data Prepper と OpenSearch Ingestion の両方で多くの機能を開発し、お客様向けのスケーラブルなソリューションを実現してきました。趣味はピックルボール、読書、Rocket League です。


この記事は Kiro が翻訳を担当し、Solutions Architect の 榎本 貴之 がレビューしました。