אתם קוראים את מסמכי התיעוד של Apigee Edge.
למעבר אל
מסמכי התיעוד של Apigee X info
תיאור הבעיה
חסרים נתונים של Analytics בממשק המשתמש החדש של Edge כי שרת Qpidd לא מעביר הודעות של Analytics ל-PostgreSQL. ב-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.
סיבות אפשריות
| סיבה | תיאור | ההוראות לפתרון בעיות רלוונטיות ל: |
|---|---|---|
| הודעות תקועות בתור של הודעות שלא ניתן להעביר (dead letter queue) של qpidd | edge-qpid-server לא הצליח להבין הודעות שהוא קרא מהברוקר של Qpidd או לא הצליח לשמור הודעות ב-PostgreSQL.
|
משתמשים ב-Edge Private Cloud |
שלבים נפוצים לאבחון
מריצים את הפקודה הבאה בצומת Qpid כדי להציג את הנתונים הסטטיסטיים של התור ב-Qpidd:
/opt/apigee/apigee-qpidd/bin/qpid-stat -q
הפלט מחזיר את קבוצת התורים שרשומים ב-broker. אם התור עם השם שמסתיים ב--dl מכיל הודעות (Q-Depth(Messages) ב-Edge for Private Cloud בגרסה 4.53.00 ואילך, או msg ב-Edge for Private Cloud בגרסה 4.52.x ומטה), ההודעות תקועות בתור ההודעות הבלתי ניתנות למסירה.
פלט לדוגמה ב-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 ובגרסאות קודמות (מתווך 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
הסיבה: הודעות תקועות בתור של הודעות שלא ניתן למסור ב-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 בגרסה 4.54.00 ו-8.0.6 בגרסה 4.53.x). ה-CLI הקודם של qpid-tool הוסר ב-Edge for Private Cloud בגרסה 4.53.00 ואילך, ואי אפשר להשתמש בו.
במקום זאת, השתמשו ב-Apache Qpid Broker-J HTTP Management API בארכיטקטורת REST (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הבאה כדי להפעיל את הפעולהmoveMessagesבתור ההודעות שלא נמסרו, באמצעות ה-Management API לניהול HTTP של Qpid Broker-J (יציאה8090כברירת מחדל):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הם פרטי הכניסה לניהול Qpid שהוגדרו ב-/opt/apigee/customer/application/qpidd.propertiesאו ב-/opt/apigee/token/application/qpidd.properties(ברירת המחדל היאguest:guest). - אם שמות התורים של Analytics ב-
qpid-stat -qשונים, מחליפים אתax-q-axgroup001-consumer-group-001ואתax-q-axgroup001-consumer-group-001-dl. - כדי להעביר הודעות בקבוצות, צריך לכלול את
"limit"בגוף הבקשה ב-JSON (לדוגמה,"limit": 100000). - אם SSL/TLS מופעל ב-Qpid Management API (
conf_qpidd_qpid_management.https.enabled=true), משתמשים ב-https://ומעבירים את--cacert(או-k) אלcurl.
-
בודקים את פלט הפקודה. קריאה מוצלחת מחזירה מערך JSON של מזהי ההודעות הפנימיים שהועברו:
[ 3, 4, 5 ]
אם המערך שמוחזר ריק (
[]), לא היו הודעות בתור ההודעות הנטושות שאפשר להעביר.מחכים 5 דקות ואז מריצים את
/opt/apigee/apigee-qpidd/bin/qpid-stat -qמהשלבים הנפוצים לאבחון. מוודאים שההודעות בתור הראשי (ax-q-axgroup001-consumer-group-001) עוברות עיבוד, ושהערךQ-Depth(Messages)בתור ההודעות שלא נמסרו (ax-q-axgroup001-consumer-group-001-dl) נשאר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מצוין המזהה של הברוקר.חשוב לזכור את המזהה של הברוקר. בדוגמה, זה
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:
/opt/apigee/var/log/edge-qpid-server/logs/system.log - יומנים של שרת Edge-postgres:
/opt/apigee/var/log/edge-postgres-server/logs/system.log נתונים סטטיסטיים של תור Qpidd:
/opt/apigee/apigee-qpidd/bin/qpid-stat -q
קבוצת Analytics שמוחזרת על ידי פקודת ה-curl הבאה:
curl -u sysadminEmail:password http://mgmt:8080/v1/analytics/groups/ax