פתרון בעיות ב-OpenTelemetry Collector מבית Google

במאמר הזה מתוארות פעולות לפתרון בעיות ובעיות נפוצות שקשורות לשימוש ב-OpenTelemetry Collector, כמו Google-Built OpenTelemetry Collector, כדי לשלוח נתונים אל Google Cloud Observability.

פתרון בעיות באיסוף נתונים

בקטע הזה מתוארות אסטרטגיות שאפשר להשתמש בהן כדי לפתור בעיות שקשורות לאיסוף נתונים.

שימוש בכלי הייצוא debug

debug exporter היא הדרך הטובה ביותר לראות את הנתונים ברמה של OpenTelemetry Collector. הכלי לייצוא מקבל את הנתונים וכותב אותם ל-stdout בפורמט קריא לאנשים. האפשרות הזו שימושית במיוחד כשרוצים לוודא שכל השינויים בצינור הנתונים מניבים את התוצאה הרצויה.

הכלי לייצוא נתונים debug כלול ב-Google-Built OpenTelemetry Collector. אפשר להגדיר את כלי הייצוא debug באמצעות verbosity: detailed כדי לראות את כל מטען הנתונים של הטלמטריה.

exporters:
  debug:
    verbosity: detailed

אפשר לכלול את כלי הייצוא בצינור עיבוד הנתונים:

service:
  pipelines:
    metrics:
      receivers: [
        # ...
      ]
      processors: [
        # ...
      ]
      exporters: [
        debug, # can be added alongside any other configured exporters
        # ...
      ]

בדיקת שפת הטרנספורמציה של OpenTelemetry‏ (OTTL) אונליין באמצעות OTTL Playground

OTTL Playground הוא כלי שפותח על ידי הקהילה ומאפשר לפתח באופן אינטראקטיבי צינור נתונים של שפת טרנספורמציה של OpenTelemetry. מתחילים בהזנת OTLP JSON כקלט, כותבים את הצינור באמצעות אותה הגדרה כמו ב-OpenTelemetry Collector, ובודקים את התוצאות באופן חזותי.

הדרך הכי טובה לקבל OTLP JSON מצינור היא להציב file exporter בנקודה שלפני המקום שבו מעבד הטרנספורמציה אמור להיות. מתחילים בהגדרת file מייצא:

exporters:
  file:
    path: example.json

אם יש לכם צינור כזה:

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [
        memorylimiter,
        groupbyattrs,
        transform, # where your OTTL pipeline will go
        cumulativetodelta,
        metricstarttime,
      ]
      exporters: [
        otlp,
      ]

אפשר לשנות באופן זמני את צינור עיבוד הנתונים כדי לייצא את הנתונים כפי שהם ייראו כשיועברו למעבד transform שאתם עובדים עליו.

service:
  pipelines:
    metrics:
      receivers: [hostmetrics]
      processors: [
        memorylimiter,
        groupbyattrs,
        # transform,
        # cumulativetodelta,
        # metricstarttime,
      ]
      exporters: [
        # otlp,
        file,
      ]

כלי הייצוא file יכתוב כל מטען ייעודי (payload) שהוא מקבל בשורה בקובץ. אפשר להשתמש בשורה אחת של נתונים כקלט ב-OTTL Playground.

בעיות מוכרות

בקטע הזה מתוארות בעיות ידועות ב-OpenTelemetry Collector או ב-Google-Built OpenTelemetry Collector, ומוסבר איך לעקוף אותן במידת האפשר.

מספר גדול מדי של שגיאות connect: network is unreachable כשמשתמשים בכלי לייצוא otlp

הערה: הבעיה הזו רלוונטית רק ל-exporter של gRPC‏ otlp, ולא ל-exporter המקביל של HTTP שנקרא otlphttp.

הערה: עד עכשיו הבעיה הזו נצפתה באופן ישיר רק בסביבות של Compute Engine, אבל בגלל אופי הבעיה אנחנו לא יכולים לאשר שהיא מוגבלת רק ל-Compute Engine.

החל מגרסה 0.147.0 של Google-Built OpenTelemetry Collector ומגרסה 0.145.0 של upstream OpenTelemetry Collector, הגדרת ברירת המחדל של otlp exporter היא אסטרטגיית איזון עומסים בצד הלקוחround_robin. לפני כן, הגדרת ברירת המחדל הייתה pick_first. אם בעבר נעשה שימוש באסטרטגיית pick_first לייצוא, הייתה גם אפשרות חזרה ל-IPv4 במקרה ש-IPv6 לא פעל. לשיטת round_robin אין את המאפיין הזה, והיא תנסה שוב ושוב לשלוח לכל הכתובות שהיא מזהה בזמן ההתחלה של הכלי לייצוא, גם אם הן לא פועלות.

כתוצאה מכך, אם אתם משתמשים בotlp exporter כדי לשלוח נתונים ל-Telemetry API, יכול להיות שיוצגו לכם הודעות שגיאה כמו זו:

2026-02-13T20:50:00.665Z        warn    grpc@v1.78.0/clientconn.go:1526 [core] [Channel #1 SubChannel #18] grpc: addrConn.createTransport failed to connect to {Addr: "[2607:f8b0:4001:c62::5f]:443", ServerName: "telemetry.googleapis.com:443", }. Err: connection error: desc = "transport: Error while dialing: dial tcp [2607:f8b0:4001:c62::5f]:443: connect: network is unreachable"   {"resource": {"service.instance.id": "feb467f0-ecc6-4a0c-b1e2-90c908131fdd", "service.name": "otelcol-google", "service.version": "v0.147.0"}, "grpc_log": true}

בידוד השגיאה בפועל ביומן:

transport: Error while dialing: dial tcp [2607:f8b0:4001:c62::5f]:443: connect: network is unreachable

כדי לעקוף את השגיאה הזו, אפשר לעבור לייצוא otlphttp (דוגמה מופיעה במדריך למשתמש בנושא מדדים של OTLP) או להגדיר ידנית את מאזן העומסים pick_first בייצוא otlp:

exporters:
  otlp:
    # ...
    balancer_name: pick_first
    # ...

אם השגיאה נמשכת אחרי אחד מהפתרונות האלה, סביר להניח שהודעת השגיאה הזו היא סימפטום של בעיות אמיתיות בקישוריות לרשת, ולכן צריך לוודא שהאוסף יכול להגיע לרשת.