נתוני Analytics תקועים בתור של מכתבים מתים ב-Kpidd

אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

נתוני 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 broker או שלא הצליח לשמור הודעות ב-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 מצוין המזהה של הברוקר.

  4. חשוב לזכור את המזהה של הברוקר. בדוגמה, הערך הוא 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 דקות ואז מריצים שוב את שלבי האבחון שמפורטים במאמר שלבי אבחון נפוצים. מוודאים שההודעות בתור בפועל עוברות עיבוד, ושהמספר של הודעות ה-dead letter נשאר 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: /opt/apigee/var/log/edge-qpid-server/logs/system.log
  • יומני שרת Edge-postgres:/opt/apigee/var/log/edge-postgres-server/logs/system.log
  • נתונים סטטיסטיים של תור Qpidd:

    qpid-stat -q
  • קבוצת Analytics שמוחזרת על ידי פקודת ה-curl הבאה:

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