Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
Qpidd 서버가 분석 메시지를 PostgreSQL로 전송하지 않기 때문에 새 Edge UI에 분석 데이터가 누락됩니다. Edge에서 edge-qpid-server 구성요소는 Qpidd 서버에 해당합니다.
Qpidd는 각 분석 그룹에 대해 두 개의 큐를 유지합니다.
ax-q-axgroup001-consumer-group-001
이 큐는 메시지 프로세서와 라우터에서 푸시된 분석 메시지를 보관합니다. 메시지는
edge-qpid-server에 의해 여기에서 가져와 메시지를 파싱하고 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 (10.0.1 in 4.54.00 및 8.0.6 in 4.53.x)를 사용합니다. 기존 qpid-tool CLI는 Edge for Private Cloud 4.53.00 이상에서 삭제되며 사용할 수 없습니다.
대신 Apache Qpid Broker-J HTTP 관리 REST API (moveMessages) 또는 Qpid 웹 관리 콘솔을 사용하여 메시지를 데드 레터 큐에서 기본 분석 큐로 다시 이동합니다.
일반적인 진단 단계 출력에서 기본 큐와 데드 레터 큐의 정확한 이름을 기록합니다 (예:
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`
qpid-stat -q의 분석 큐 이름이 다른 경우ax-q-axgroup001-consumer-group-001및ax-q-axgroup001-consumer-group-001-dl을 바꿉니다. - 메시지를 일괄적으로 이동하려면 JSON 요청 본문에
"limit"를 포함합니다 (예:"limit": 100000). - Qpid Management API에서 SSL/TLS가 사용 설정된 경우(
conf_qpidd_qpid_management.https.enabled=true)https://를 사용하고--cacert(또는-k)를curl에 전달합니다.
명령어 출력을 확인합니다. 호출이 성공하면 이동된 내부 메시지 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