Analytics データが Qpidd のデッドレター キューでスタックする

現在、Apigee Edge のドキュメントを表示しています。
Apigee X のドキュメントをご確認ください
情報

内容

Qpidd サーバーが分析メッセージを PostgreSQL に転送しないため、分析データが Edge UI に表示されない。Edge では、edge-qpid-server コンポーネントは Qpidd サーバーに対応します。

Qpidd は、分析グループごとに 2 つのキューを保持します。

  • ax-q-axgroup001-consumer-group-001

    このキューは、Message Processor と Router から push された分析メッセージを保持します。メッセージは、edge-qpid-server によってここから pull され、メッセージが解析されて PostgreSQL に挿入されます。メッセージが正常に処理されると、キューから削除されます。

  • ax-q-axgroup001-consumer-group-001-dl

    このキューはデッドレター キューです。これは、edge-qpid-server が処理に失敗したため受信する必要がなくなったメッセージの宛先として機能します。通常、最大配信数を超えた場合、または PostgreSQL がランタイム エラーにより新しいデータの挿入を拒否した場合に、入力されます。

エラー メッセージ

根本的な原因は、edge-qpid-server コンポーネントで発生するさまざまなランタイム エラーである可能性があります。通常、edge-qpid-server が PostgreSQL からランタイム エラーを受け取ると、デッドレター キューがまだ存在しない場合に作成され、次のメッセージを送信します。

yyyy-MM-dd HH:mm:ss,SSS ax-q-axgroup001-consumer-group-001-persistpool-thread-6 WARN c.a.a.m.MessageConsumer - MessageConsumer.process() : Sending message batch to the DLQ.

考えられる原因

原因 説明 トラブルシューティング手順の適用対象
メッセージが qpidd のデッドレター キューでスタックする edge-qpid-server が、Qpidd ブローカーから読み取ったメッセージを認識できなかったか、PostgreSQL にメッセージを保持できませんでした。 Edge Private Cloud ユーザー

一般的な診断手順

次のコマンドを実行して、Qpidd キューの統計情報を表示します。

qpid-stat -q

出力では、ブローカーに登録されているキューのセットが返されます。名前が "-dl" で終わるキューにメッセージが取り込まれている場合、デッドレター キューで停滞しているメッセージがあります。

Queues
  queue                                     dur  autoDel  excl  msg   msgIn  msgOut  bytes  bytesIn  bytesOut   cons  bind
  ========================================================================================================================
  ax-q-axgroup-001-consumer-group-001       Y                   0     185    185     0       13.8m   13.8m      6      2
  ax-q-axgroup-001-consumer-group-001-dl    Y                   0     70     70      0        3.9m    3.9m      0      2

原因: メッセージが qpidd のデッドレター キューでスタックする

診断

この状況は、次のシナリオで発生する可能性があります。

  1. 過去にアップグレードが行われていて、その間に PostgreSQL が停止していました。
  2. ネットワークの問題による PostgreSQL の一時的な停止。
  3. edge-qpid-server が PostgreSQL にメッセージを送信しようとしましたが、PostgreSQL がランタイム エラーを返しました。

解像度

  1. 一般的な診断手順にあるキューの名前をメモします。例:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. qpid-tool コマンドを実行して、インタラクティブな qpid プロンプトを入力します。

    qpid-tool

    このコマンドでは、次のものが返されます。

    Management Tool for QPID
    qpid:
  3. list broker を実行して、アクティブなブローカーのリストを取得します。

    list broker

    このコマンドでは、次のものが返されます。

    Object Summary:
    ID   Created   Destroyed  Index
    =======================================
    125  21:00:00  -          amqp-broker

    ここで、ID 列にはブローカーの ID を指定します。

  4. ブローカーの ID をメモします。この例では 125 です。

  5. 次のコマンドを実行して、メッセージをデッドレター キューから実際のキューに戻します。

    call 125 queueMoveMessages ax-q-axgroup-001-consumer-group-001-dl ax-q-axgroup-001-consumer-group-001 100000 {}

    このコマンドでは、次のものが返されます。

    OK (0) - {}

    出力がない場合は、何もする必要はありません。つまり、移動するメッセージがないことを意味します。OK(0) が表示されない場合は、Apigee Edge サポートにお問い合わせください。

  6. qpid-tool ターミナルを終了します。

    quit
  7. 5 分待ってから、一般的な診断手順の診断手順を再度実行します。実際のキューにあるメッセージが処理されていることを確認し、デッドレター メッセージ数が 0 のままであることを確認します。

問題が解決しない場合は、次のセクションに進みます。

診断情報の収集が必要な場合

上記の手順でも問題が解決しない場合は、次の診断情報を収集してください。Apigee Edge サポートに連絡し、共有してください。

  • Qpidd のログ: /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • PostgreSQL ログ: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Edge-qpid-server ログ: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Edge-postgres-server ログ:/opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Qpidd キューの統計情報:

    qpid-stat -q
  • 次の curl コマンドで返される分析グループ。

    curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax