Dữ liệu Analytics bị kẹt trong hàng đợi chết của Qpidd

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
info

Dấu hiệu

Dữ liệu Analytics bị thiếu trong Giao diện người dùng Edge mới do máy chủ Qpidd không chuyển thông báo Analytics sang PostgreSQL. Trong Edge, thành phần edge-qpid-server tương ứng với máy chủ Qpidd.

Qpidd duy trì 2 hàng đợi cho mỗi nhóm Analytics:

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

    Hàng đợi này chứa các thông báo Analytics được đẩy từ Bộ xử lý thông báo và Bộ định tuyến. Các thông báo được kéo từ đây bằng edge-qpid-server. Thành phần này sẽ phân tích cú pháp các thông báo và chèn chúng vào PostgreSQL. Sau khi xử lý thành công, các thông báo sẽ bị xoá khỏi hàng đợi.

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

    Hàng đợi này là hàng đợi thư không gửi được. Hàng đợi này đóng vai trò là đích đến của các thông báo mà edge-qpid-server không xử lý được và do đó không muốn nhận nữa. Hàng đợi này thường được điền khi vượt quá số lần gửi tối đa hoặc nếu PostgreSQL từ chối chèn dữ liệu mới do lỗi thời gian chạy.

Thông báo Lỗi

Nguyên nhân gốc rễ có thể là do nhiều lỗi thời gian chạy từ thành phần edge-qpid-server. Thông thường, nếu edge-qpid-server nhận được lỗi thời gian chạy từ PostgreSQL, thì thành phần này sẽ tạo hàng đợi thư không gửi được (nếu chưa có) rồi gửi thông báo sau vào đó:

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.

Các nguyên nhân có thể xảy ra

Nguyên nhân Mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Thông báo bị kẹt trong hàng đợi thư không gửi được của qpidd edge-qpid-server không hiểu được các thông báo mà thành phần này đọc từ trình môi giới Qpidd hoặc không lưu được các thông báo vào PostgreSQL. Người dùng Edge cho Đám mây riêng tư

Các bước chẩn đoán thường gặp

Chạy lệnh sau trên nút Qpid để xem số liệu thống kê về hàng đợi Qpidd:

/opt/apigee/apigee-qpidd/bin/qpid-stat -q

Kết quả trả về tập hợp các hàng đợi đã đăng ký với trình môi giới. Nếu hàng đợi có tên kết thúc bằng -dl có thông báo được điền (Q-Depth(Messages) trong Edge cho Đám mây riêng tư 4.53.00 trở lên hoặc msg trong Edge cho Đám mây riêng tư 4.52.x trở xuống), thì các thông báo sẽ bị kẹt trong hàng đợi thư không gửi được.

Ví dụ về kết quả trong Edge cho Đám mây riêng tư 4.53.00 trở lên (bao gồm cả 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   |
+---------------------------------------+-------------------+-------------------+-------------------+-------------------+-----------+----------+-------------------+------------+

Ví dụ về kết quả trong Edge cho Đám mây riêng tư 4.52.x trở xuống (trình môi giới C++ qpidd cũ):

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

Nguyên nhân: Thông báo bị kẹt trong hàng đợi thư không gửi được của qpidd

Chẩn đoán

Điều kiện này có thể xảy ra trong các trường hợp sau:

  1. Đã có một lần nâng cấp trong quá khứ, trong thời gian đó PostgreSQL đã ngừng hoạt động.
  2. PostgreSQL bị ngừng hoạt động tạm thời do sự cố mạng.
  3. edge-qpid-server đã cố gắng gửi thông báo đến PostgreSQL nhưng PostgreSQL trả về lỗi thời gian chạy.

Độ phân giải

Hãy làm theo các bước cho phiên bản Edge cho Đám mây riêng tư để di chuyển các thông báo bị kẹt từ hàng đợi thư không gửi được trở lại hàng đợi Analytics chính.

Edge cho Đám mây riêng tư 4.53.00 trở lên (bao gồm cả 4.54.00)

Edge cho Đám mây riêng tư 4.53.00 trở lên (bao gồm cả 4.54.00) sử dụng Apache Qpid Broker-J (10.0.1 trong 4.54.00 và 8.0.6 trong 4.53.x). CLI qpid-tool cũ đã bị xoá trong Edge cho Đám mây riêng tư 4.53.00 trở lên và không thể sử dụng được. Thay vào đó, hãy sử dụng Apache Qpid Broker-J HTTP Management REST API (moveMessages) hoặc Bảng điều khiển quản lý web Qpid để di chuyển các thông báo từ hàng đợi thư không gửi được trở lại hàng đợi Analytics chính:

  1. Ghi lại tên chính xác của hàng đợi chính và hàng đợi thư không gửi được từ kết quả Các bước chẩn đoán thường gặp (ví dụ: ax-q-axgroup001-consumer-group-001 và ax-q-axgroup001-consumer-group-001-dl, hoặc ax-q-axgroup-001-consumer-group-001 và ax-q-axgroup-001-consumer-group-001-dl).

  2. Trên nút Qpid, hãy chạy lệnh curl sau để gọi thao tác moveMessages trên hàng đợi thư không gửi được thông qua Qpid Broker-J API Quản lý HTTP (cổng 8090 theo mặc định):

    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

    Trong trường hợp:

    • QPID_USER và QPID_PASSWORD là thông tin đăng nhập quản lý Qpid được định cấu hình trong /opt/apigee/customer/application/qpidd.properties hoặc /opt/apigee/token/application/qpidd.properties (mặc định là guest:guest).
    • Thay thế ax-q-axgroup001-consumer-group-001 và ax-q-axgroup001-consumer-group-001-dl nếu tên hàng đợi Analytics của bạn trong qpid-stat -q khác nhau.
    • Để di chuyển thông báo theo lô, hãy thêm "limit" vào nội dung yêu cầu JSON (ví dụ: "limit": 100000).
    • Nếu SSL/TLS được bật trên API Quản lý Qpid (conf_qpidd_qpid_management.https.enabled=true), hãy sử dụng https:// và truyền --cacert (hoặc -k) đến curl.
  3. Xác minh kết quả lệnh. Một lệnh gọi thành công sẽ trả về một mảng JSON gồm các mã nhận dạng thông báo nội bộ đã di chuyển:

    [ 3, 4, 5 ]

    Nếu mảng được trả về là mảng trống ([]), thì không có thông báo nào trong hàng đợi thư không gửi được để di chuyển.

  4. Đợi 5 phút rồi chạy /opt/apigee/apigee-qpidd/bin/qpid-stat -q từ Các bước chẩn đoán thường gặp. Xác minh rằng các thông báo trên hàng đợi chính (ax-q-axgroup001-consumer-group-001) đang được xử lý và Q-Depth(Messages) trên hàng đợi thư không gửi được (ax-q-axgroup001-consumer-group-001-dl) vẫn ở mức 0.

Edge cho Đám mây riêng tư 4.52.x trở xuống

  1. Ghi lại tên của các hàng đợi từ các bước chẩn đoán thường gặp. Ví dụ:

    • ax-q-axgroup-001-consumer-group-001
    • ax-q-axgroup-001-consumer-group-001-dl
  2. Chạy lệnh qpid-tool để nhập lời nhắc qpid tương tác:

    qpid-tool

    Lệnh này trả về nội dung sau:

    Management Tool for QPID
    qpid:
  3. Chạy list broker để lấy danh sách các trình môi giới đang hoạt động:

    list broker

    Lệnh này trả về nội dung sau:

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

    Trong đó, cột ID chỉ định mã nhận dạng của trình môi giới.

  4. Ghi lại mã nhận dạng của trình môi giới. Trong ví dụ này, mã nhận dạng là 125.

  5. Chạy lệnh sau để di chuyển các thông báo từ hàng đợi thư không gửi được trở lại hàng đợi thực:

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

    Lệnh này trả về nội dung sau:

    OK (0) - {}

    Nếu không có kết quả nào, tức là không có gì để làm, nghĩa là không có thông báo nào để di chuyển. Nếu bạn không thấy OK (0), thì bạn nên liên hệ với Nhóm hỗ trợ Apigee Edge.

  6. Thoát khỏi thiết bị đầu cuối qpid-tool:

    quit
  7. Đợi 5 phút rồi chạy lại các bước chẩn đoán từ Các bước chẩn đoán thường gặp. Xác minh rằng các thông báo trên hàng đợi thực đang được xử lý và đảm bảo số lượng msg thư không gửi được vẫn ở mức 0.

Nếu vấn đề vẫn tiếp diễn, hãy chuyển sang phần tiếp theo.

Thông tin chẩn đoán bắt buộc phải thu thập

Nếu vấn đề vẫn tiếp diễn sau khi bạn làm theo các hướng dẫn trước đó, hãy thu thập thông tin chẩn đoán sau đây và chia sẻ với Nhóm hỗ trợ Apigee Edge:

  • Nhật ký Qpidd: /opt/apigee/var/log/apigee-qpidd/qpidd.log (Edge cho Đám mây riêng tư 4.53.00 trở lên) và /opt/apigee/var/log/apigee-qpidd/apigee-qpidd.log
  • Nhật ký PostgreSQL: /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
  • Nhật ký Edge-qpid-server: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • Nhật ký Edge-postgres-server: /opt/apigee/var/log/edge-postgres-server/logs/system.log
  • Số liệu thống kê về hàng đợi Qpidd:

    /opt/apigee/apigee-qpidd/bin/qpid-stat -q
  • Nhóm Analytics do lệnh curl sau trả về:

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