분석 데이터가 Qpidd 데드 레터 큐에서 멈춤

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

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 사용자

일반적인 진단 단계

다음 명령어를 실행하여 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