ここに表示されているのは Apigee Edge のドキュメントです。
Go to the
Apigee X のドキュメントに移動します。 info
症状
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 ユーザー |
共通の診断手順
Qpid ノードで次のコマンドを実行して、Qpidd キューの統計情報を表示します。
/opt/apigee/apigee-qpidd/bin/qpid-stat -q
出力には、ブローカーに登録されているキューのセットが返されます。名前が -dl で終わるキューにメッセージが入力されている場合(Edge for Private Cloud 4.53.00 以降では Q-Depth(Messages)、Edge for Private Cloud 4.52.x 以前では msg)、メッセージはデッドレター キューでスタックしています。
Edge for Private Cloud 4.53.00 以降(4.54.00、Apache Qpid Broker-J を含む)の出力例:
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+ | Queue Name | Messages Enqueued | Total Enqueued(B) | Messages Dequeued | Total Dequeued(B) | Consumers | Bindings | Q-Depth(Messages) | Q-Depth(B) | +---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+ | ax-q-axgroup001-consumer-group-001 | 185 | 13800000 | 185 | 13800000 | 6 | 1 | 0 | 0 | +---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+ | ax-q-axgroup001-consumer-group-001-dl | 70 | 3900000 | 0 | 0 | 0 | 1 | 70 | 3900000 | +---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+
Edge for Private Cloud 4.52.x 以前(従来の C++
qpidd ブローカー)の出力例:
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 のデッドレター キューでスタックしている
診断
この状態は、次のような場合に発生することがあります。
- 過去にアップグレードが行われ、その際に PostgreSQL がダウンしていた。
- ネットワークの問題により、PostgreSQL が一時的に停止した。
edge-qpid-serverが PostgreSQL にメッセージを送信しようとしたが、PostgreSQL がランタイム エラーを返した。
解決策
Edge for Private Cloud のバージョンに応じて、デッドレター キューからメインの分析キューにスタックしたメッセージを移動する手順を行います。
Edge for Private Cloud 4.53.00 以降(4.54.00 を含む)
Edge for Private Cloud 4.53.00 以降(4.54.00 を含む)では、Apache Qpid Broker-J(4.54.00 では 10.0.1、4.53.x では 8.0.6)を使用します。従来の qpid-tool CLI は Edge for Private Cloud 4.53.00 以降で削除され、使用できません。
代わりに、Apache Qpid Broker-J HTTP Management REST API(moveMessages)または Qpid Web Management Console を使用して、デッドレター キューからメインの分析キューにメッセージを移動します。
共通の診断手順の出力から、メインキューとデッドレター キューの正確な名前をメモします(例:
ax-q-axgroup001-consumer-group-001とax-q-axgroup001-consumer-group-001-dl、またはax-q-axgroup-001-consumer-group-001とax-q-axgroup-001-consumer-group-001-dl)。Qpid ノードで次の
curlコマンドを実行して、Qpid Broker-J HTTP Management API(デフォルトではポート8090)を介してデッドレター キューでmoveMessagesオペレーションを呼び出します。curl -u QPID_USER:QPID_PASSWORD -X POST \ -H "Content-Type: application/json" \ -d '{"destination": "ax-q-axgroup001-consumer-group-001"}' \ http://127.0.0.1:8090/api/latest/queue/default/default/ax-q-axgroup001-consumer-group-001-dl/moveMessagesここで
QPID_USERとQPID_PASSWORDは、/opt/apigee/customer/application/qpidd.propertiesまたは/opt/apigee/token/application/qpidd.propertiesで構成された Qpid 管理認証情報です(デフォルトはguest:guest)。- `qpid-stat -q` の分析キュー名が異なる場合は、
ax-q-axgroup001-consumer-group-001とax-q-axgroup001-consumer-group-001-dlqpid-stat -qを置き換えます。 - メッセージをバッチで移動するには、JSON リクエストの本文に
"limit"を含めます (例:"limit": 100000)。 - Qpid Management API で SSL/TLS が有効になっている場合(
conf_qpidd_qpid_management.https.enabled=true)、https://を使用して、curlに--cacert(または-k)を渡します。
コマンド出力を確認します。呼び出しが成功すると、移動された内部メッセージ ID の JSON 配列が返されます。
[ 3, 4, 5 ]
返された配列が空の場合(
[])、移動するデッドレター キューにメッセージはありませんでした。5 分待ってから、 共通の診断手順から
/opt/apigee/apigee-qpidd/bin/qpid-stat -qを実行します。メインキュー(ax-q-axgroup001-consumer-group-001)のメッセージ が処理され、デッドレター キュー (ax-q-axgroup001-consumer-group-001-dl)のQ-Depth(Messages)が0のままになっていることを確認します。
Edge for Private Cloud 4.52.x 以前
共通の診断手順でキューの名前をメモします。次に例を示します。
ax-q-axgroup-001-consumer-group-001ax-q-axgroup-001-consumer-group-001-dl
qpid-toolコマンドを実行して、インタラクティブなqpidプロンプトを入力します。qpid-tool
このコマンドを実行すると、次のようなフィード レスポンスが返されます。
Management Tool for QPID qpid:
list brokerを実行して、アクティブなブローカーのリストを取得します。list broker
このコマンドを実行すると、次のようなフィード レスポンスが返されます。
Object Summary: ID Created Destroyed Index ======================================= 125 21:00:00 - amqp-broker
ここで、
ID列はブローカーの ID を指定します。ブローカーの ID をメモします。この例では
125です。次のコマンドを実行して、デッドレター キューから実際のキューにメッセージを移動します。
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 サポートにお問い合わせください。qpid-toolターミナルを終了します。quit
5 分待ってから、 共通の診断手順で診断手順を再度実行します。実際のキューのメッセージが処理されていることを確認し、デッドレターの
msgカウントが0のままになっていることを確認します。
問題が解決しない場合は、次のセクションに進みます。
診断情報の収集が必要な場合
上記の手順を行っても問題が解決しない場合は、次の診断情報を収集して Apigee Edge サポートにご提供ください。
- Qpidd ログ:
/opt/apigee/var/log/apigee-qpidd/qpidd.log(Edge for Private Cloud 4.53.00 以降)と/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 キューの統計情報:
/opt/apigee/apigee-qpidd/bin/qpid-stat -q
次の curl コマンドで返される分析グループ:
curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax