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

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

증상

Qpidd 서버에서 분석 메시지를 PostgreSQL로 전송하지 않아 Edge UI에 애널리틱스 데이터가 누락되었습니다. Edge에서 edge-qpid-server 구성요소는 Qpidd 서버에 해당합니다.

Qpidd는 각 분석 그룹에 대해 두 개의 대기열을 유지합니다.

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

    이 큐에는 메시지 프로세서 및 라우터에서 푸시된 분석 메시지가 보관됩니다. 메시지를 파싱하여 PostgreSQL에 삽입하는 edge-qpid-server가 여기에서 메시지를 가져옵니다. 메시지가 성공적으로 처리되면 큐에서 삭제됩니다.

  • 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 프라이빗 클라우드 사용자

일반적인 진단 단계

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