תיעוד 48
ניטור שימוש (OpenTelemetry חיצוני)
סטטוס: אלפא. הסכמה שלהלן מנוהלת בגרסאות (
grok_code.schema.version = v1). שינויים שמוסיפים עשויים להתרחש בלי הודעה מוקדמת. שינויי שם או הסרות יעלו את הגרסה ויצוינו ביומן השינויים.
Grok CLI יכול לייצא מדדי שימוש ואירועים אל אספן OpenTelemetry של הארגון, כדי שצוותי פלטפורמה יוכלו לנטר אימוץ, צריכת טוקנים, החלטות הרשאת כלים ושגיאות ברחבי הצי, בלי שנתונים כלשהם יזרמו דרך SpaceXAI.
#הגדרות קשורות
המתגים האלה בלתי תלויים זה בזה (וגם בזרם ה-OTEL החיצוני של המדריך הזה), חוץ מכך שכיבוי טלמטריה מכבה גם מדדי שימוש ודיווחי קריסה:
| הגדרה | איך מגדירים |
|---|---|
| מתג ראשי של טלמטריה | [features] telemetry / GROK_TELEMETRY_ENABLED |
| מדדי שימוש (חלק מהבילדים, פעילים כברירת מחדל) | כבויים עם הטלמטריה או עם DISABLE_TELEMETRY=1. נקראים כש-Grok מתחיל (פרטים) |
| דיווחי קריסה (חלק מהבילדים, פעילים כברירת מחדל) | נשלחים רק כשהגדרת הפרטיות של החשבון מתירה נתוני אבחון. כבויים עם הטלמטריה, [diagnostics] error_reporting = false, או DISABLE_ERROR_REPORTING=1 (פרטים) |
| נתוני קוד, שמירה ואימון | הגדרות: /privacy פותח את השורה |
| העלאת עקבות | [telemetry] trace_upload / GROK_TELEMETRY_TRACE_UPLOAD |
| OpenTelemetry חיצוני | GROK_EXTERNAL_OTEL / [telemetry] otel_* (המדריך הזה) |
#זרם OTEL חיצוני
הזרם החיצוני הוא:
- כבוי כברירת מחדל, ודורש הסכמה כפולה (מתג ראשי וגם בחירה מפורשת של מייצא).
- בלי תוכן כברירת מחדל: בלי הנחיות, בלי פרוזה של העוזר, בלי קוד, בלי נתיבי קבצים (סיומת בלבד), בלי ארגומנטים של כלים, בלי פקודות bash, ושמות MCP/skill/plugin מכווצים לקטגוריות. שערי תוכן אופציונליים מפעילים מחדש חלק מאלה.
- מופרד מבנית מטלמטריה פנימית של SpaceXAI: המייצאים שלו נושאים רק את הכותרות שהגדרתם, לעולם לא אישורי SpaceXAI.
- בלתי תלוי בביטולי שמירת נתונים של SpaceXAI: הוא עובד גם כש-
telemetryכבוי וגם לצוותי ZDR (zero-data-retention). ההגדרות האלה חלות על שמירה בצד SpaceXAI. הזרם החיצוני נשלט רק על ידי הגדרות ה-OTEL שלכם.
#ZDR והזרם הזה
/privacy ו-Zero Data Retention לא מכבים את הזרם הזה. ZDR מכבה שמירה בצד SpaceXAI (אנליטיקת מוצר, העלאת עקבות סשן, שיתוף נתוני קוד). הוא לא משתיק את GROK_EXTERNAL_OTEL.
כשהזרם פעיל:
user.id,session.idומזהי ארגון/צוות/פריסה תמיד מיוצאים.user.emailמצורף ללוגים וגם למדדים בכל פעם שלאימות OAuth/gateway יש כתובת לא ריקה. זו זהות, לא שער תוכן, ואי אפשר לנעוץ אותה אלא על ידי כיבוי הזרם.- טקסט ההנחיה,
responseשל העוזר וגופי כלים מיוצאים רק כשהשערים שלהם פעילים. אנליטיקת מוצר מצד ראשון לעולם לא מקבלת את הגופים האלה.
כדי שמכונות ZDR יישארו שקטות מול האספן, נעצו otel_enabled = false (או אל תפעילו את הזרם). ל-SIEM של מדדים בלבד, נעצו את כל ארבעת מפתחות otel_log_* ל-false.
#התחלה מהירה
export GROK_EXTERNAL_OTEL=1 # master switch
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # or grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=https://collector.corp.example:4318
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <collector-token>"
grokGROK_EXTERNAL_OTEL=1 לבדו מפעיל כלום: חייבים גם לבחור לפחות מייצא אחד. ולהפך, משתני OTEL_* לבדם לא מפעילים כלום בלי המתג הראשי.
#משתני סביבה
| משתנה | ברירת מחדל | משמעות |
|---|---|---|
GROK_EXTERNAL_OTEL | 0 | מתג ראשי. נפרד מ-GROK_TELEMETRY_ENABLED, ששולט באנליטיקת מוצר פנימית של SpaceXAI: השניים שולטים בזרימות נתונים לכיוונים מנוגדים. |
OTEL_METRICS_EXPORTER | none | otlp | console | none. |
OTEL_LOGS_EXPORTER | none | otlp | console | none. שולט בזרם האירועים. |
OTEL_EXPORTER_OTLP_PROTOCOL | http/protobuf | http/protobuf | grpc. פרוטוקול בסיס לשני האותות. |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL / ..._METRICS_PROTOCOL | לא מוגדר | דריסות פרוטוקול לפי אות (אותם ערכים כמו פרוטוקול הבסיס). ערכים לא מזוהים מכבים את הזרם. |
OTEL_EXPORTER_OTLP_ENDPOINT | http://localhost:4318 ל-HTTP, http://localhost:4317 ל-gRPC | נקודת קצה בסיס. עבור http/protobuf, /v1/logs ו-/v1/metrics מצורפים לפי מפרט OTLP. עבור grpc, נקודת הקצה של האספן משמשת כפי שהיא. צירוף הנתיב משתמש בפרוטוקול של האות הזה. |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT / ..._METRICS_ENDPOINT | לא מוגדר | דריסות ייעודיות לאות, בשימוש מילולי. עבור gRPC אלה אמורות בדרך כלל להיות נקודות קצה של האספן בלי נתיבי /v1/.... |
OTEL_EXPORTER_OTLP_HEADERS (+ וריאנטים לפי אות) | לא מוגדר | אימות אספן (k=v,k2=v2). הכותרות היחידות שהמייצאים החיצוניים שולחים, ומנגנון אימות האספן הנתמך היחיד (אין מפתח כותרות בקובץ הגדרות: אסימונים אף פעם לא נשמרים על הדיסק). |
OTEL_EXPORTER_OTLP_CERTIFICATE (+ וריאנטים לפי אות) | לא מוגדר | נתיב לחבילת PEM עם אישורי CA מהימנים נוספים לאימות האספן, לאספנים מאחורי CA פרטי או ארגוני. נוסף על שורשי האמון של ברירת המחדל (מאגר המערכת ושורשי Mozilla המוטמעים). אפשר להגדיר גם דרך [telemetry] otel_certificate. |
OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE / OTEL_EXPORTER_OTLP_CLIENT_KEY (+ וריאנטים לפי אות …_LOGS_… / …_METRICS_…) | לא מוגדר | נתיבי PEM לזהות לקוח ב-mTLS. גם האישור וגם המפתח חייבים להיות מוגדרים (בסיס או אותו אות). הגדרה חלקית מתעלמים ממנה עם אזהרה. רק מפתחות PEM לא מוצפנים. אפשר להגדיר גם דרך [telemetry] otel_client_certificate / otel_client_key. |
OTEL_EXPORTER_OTLP_TIMEOUT | 10000 (ms) | פסק זמן לייצוא. |
OTEL_EXPORTER_OTLP_COMPRESSION (או ..._LOGS_COMPRESSION / ..._METRICS_COMPRESSION) | לא מוגדר (לא דחוס) | gzip | zstd, לשתי שיטות התעבורה. השאירו לא מוגדר כדי בלי דחיסה: כל ערך אחר, כולל none, מכבה את הזרם. ייצוא העקבות הפנימי של SpaceXAI מתעלם ממנו. |
OTEL_METRIC_EXPORT_INTERVAL | 60000 (ms) | מרווח ייצוא מדדים. |
OTEL_BLRP_SCHEDULE_DELAY (או כינוי OTEL_LOGS_EXPORT_INTERVAL) | 5000 (ms) | מרווח אצווה של לוגים. |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | delta | delta | cumulative. |
OTEL_METRICS_INCLUDE_SESSION_ID | 1 | צירוף session.id למדדים (ביטול השתתפות בקרדינליות). |
OTEL_METRICS_INCLUDE_VERSION | 0 | צירוף app.version למדדים. |
OTEL_LOG_USER_PROMPTS | 0 | שער תוכן: טקסט ההנחיה על grok_code.user_prompt (תקרה של 60 KB, אחרי ניקוי סודות). |
OTEL_LOG_ASSISTANT_RESPONSES | עוקב אחרי ההנחיות אם לא מוגדר | שער תוכן: response על grok_code.assistant_response (תקרה של 60 KB, אחרי ניקוי סודות). אם לא מוגדר, עוקב אחרי OTEL_LOG_USER_PROMPTS. 0 מפורש משאיר תשובות כבויות בזמן שההנחיות נשארות פעילות. response_length תמיד מיוצא. ציים שמבוססים רק על משתני סביבה עם OTEL_LOG_USER_PROMPTS=1 חייבים להגדיר OTEL_LOG_ASSISTANT_RESPONSES=0 (או לנעוץ אותו כבוי ב-requirements) כדי לשמור זרם של הנחיות בלבד. |
OTEL_LOG_TOOL_DETAILS | 0 | שער מטא-נתונים: תצוגה מקדימה של 4 KB ל-tool_parameters, נתיבי קבצים מלאים, שמות MCP/skill/plugin מילוליים. לא כולל גופים מלאים. פרטים בלי CONTENT הם ברירת המחדל הארגונית. |
OTEL_LOG_TOOL_CONTENT | 0 | שער גוף: tool_input, tool_output, full_command ו-error_message של כשל (אחרי ניקוי סודות. 60 KB לקלט/פלט/פקודה, 4 KB ל-error_message). בלתי תלוי ב-DETAILS. CONTENT לא גורר DETAILS. כבוי כברירת מחדל. |
#שערי צי מומלצים
ברירת המחדל הארגונית היא DETAILS פעיל, CONTENT כבוי: מטא-נתונים (נתיבים, 4 KB של tool_parameters, שמות MCP/skill/plugin מילוליים) בלי גופי תוצאה של Read, bash או MCP. הפעילו CONTENT רק כשהאספן חייב לאחסן את הגופים האלה. CONTENT לא גורר DETAILS: CONTENT בלבד נותן tool_output של 60 KB כש-tool_name / mcp_tool.name עדיין מכווצים ל-mcp_tool.
[telemetry]
otel_log_user_prompts = false
otel_log_assistant_responses = false # unset would follow prompts; pin off
otel_log_tool_details = true # metadata for SIEM join
otel_log_tool_content = false # bodies; independent of detailsOTEL_RESOURCE_ATTRIBUTES מתעלמים ממנו בכוונה: המשאב נבנה מקבוצת מאפיינים קבועה ומבוקרת.
הערת מעבר: גרסאות ישנות יותר יכלו לשתף את
OTEL_EXPORTER_OTLP_*עם צינור האנליטיקה של המוצר עצמו. ההתנהגות הזו הוצאה משימוש: כש-GROK_EXTERNAL_OTELמוגדר, אנליטיקת המוצר מתעלמת מהמשתנים האלה, וה-CLI מסרב להפעיל את הזרם החיצוני בכל הגדרה שבה אנליטיקת המוצר כבר צרכה אותם. האספן שלכם מקבל רק את הזרם החיצוני שאליו הסכמתם.
#קובץ הגדרות
ברירות מחדל של הארגון נמצאות תחת טבלת [telemetry] הקיימת ב-config.toml (משתני סביבה גוברים). המפתחות הם עמיתים עם קידומת otel_ של שאר הגדרות [telemetry]:
[telemetry]
otel_enabled = true
otel_metrics_exporter = "otlp"
otel_logs_exporter = "otlp"
otel_endpoint = "https://collector.corp.example:4318"
otel_protocol = "http/protobuf" # or "grpc"
# Optional PEM *paths* for private-CA trust and mTLS (never PEM contents):
otel_certificate = "/etc/ssl/corp-ca.pem"
otel_client_certificate = "/etc/ssl/client.crt"
otel_client_key = "/etc/ssl/client.key"
otel_log_user_prompts = false # admins can pin these via requirements
otel_log_assistant_responses = false
otel_log_tool_details = false # code default; SIEM fleets usually true , see Recommended fleet gates
otel_log_tool_content = falseמפתחות ההגדרה הם otel_* תחת [telemetry]. משתני הסביבה שומרים על שמות OTEL הסטנדרטיים (GROK_EXTERNAL_OTEL, OTEL_*) לצורך תאימות למערכת האקולוגית, כך ששתי השכבות משתמשות במרחבי שמות שונים בכוונה. מפתח ההגדרה otel_protocol ממופה ל-OTEL_EXPORTER_OTLP_PROTOCOL. משתני סביבה גוברים על נתיבים בקובץ ההגדרות עבור CA וזהות לקוח.
אין בכוונה מפתח headers: ספקו אימות אספן דרך OTEL_EXPORTER_OTLP_HEADERS כדי שאסימונים לעולם לא יישמרו על הדיסק. מפתחות הגדרה של אישור ומפתח הם נתיבים בלבד: לעולם אל תטמיעו חומר מפתח פרטי ב-TOML.
כל מפתח [telemetry] otel_* שנוכח ב-requirements.toml חתום הוא נעיצה (סביבה לא יכולה לדרוס אותו). managed_config.toml אינו נעילה: הסביבה עדיין גוברת שם. נעיצת otel_endpoint מסירה משתני סביבה של נקודת קצה גנרית ולפי אות של המפתח וגם אחים לא רשומים בקובצי משתמש או מנוהלים, חוץ מנקודות קצה שגם מפרטים. נעיצת אישור או מפתח לקוח מסירה גם נקודות קצה של המפתח ואחים לא רשומים בקובץ. נעיצת CA (otel_certificate) לא מסירה נקודות קצה. אם requirements מפרט אחד מבין otel_log_user_prompts / otel_log_tool_details / otel_log_assistant_responses / otel_log_tool_content ומשמיט אח, השער שהושמט ברירת המחדל שלו כבוי (אל תסמכו על נפילה מהנחיות לתשובות מעבר לגבול הזה).
הזרם החיצוני מייצא לוגים ומדדים בלבד (אין מייצא עקבות שפונה ללקוח).
הפעלת צי היא requirements.toml חתום אחד (יעד, מייצאים ושערי תוכן יחד). user.email אינו מפתח נעיצה: הוא עוקב אחרי זהות OAuth/gateway. כותרות נשארות בסביבת התהליך מהמפעיל אחרי ההסרה, לעולם לא ב-TOML הזה.
#דיכוי בעלייה (למה שום דבר לא מגיע בשניות הראשונות)
מכיוון ש-xAI יכולה לכבות בכפייה את הזרם הזה בכל הצי, ה-CLI מחזיק את הפליטה סגורה בעלייה עד שהוא יודע אם המתג הזה מוגדר: הוא מושך את מדיניות הצי מ-/v1/settings ורק אז מתחיל לייצא. בהתקנה תקינה זה הרבה פחות משנייה ולא מורגש.
ההמתנה חסומה, כך שפריסה שלא יכולה להגיע ל-xAI עדיין מייצאת:
- אם שום מדיניות צי לא יכולה לחול בכלל,
[features] remote_fetch = false, או ש-[endpoints] cli_chat_proxy_base_urlמצביע למקום שאינו xAI, הזרם מתחיל מיד, לפי ההגדרה המקומית שלכם. - אם משיכת המדיניות נכשלת או אף פעם לא מסתיימת (מארח מאחורי חומת אש, מחשב לא מקוון), הפליטה מתחילה בכל מקרה אחרי שהניסיון מוצה, ובכל המקרים לא מאוחר מ-30 שניות אחרי העלייה.
מדיניות צי שמגיעה אחר כך עדיין חלה. היא יכולה רק להדק (לכבות את הזרם או לכפות את שערי התוכן לכבוי), לעולם לא להפעיל משהו שההגדרה המקומית שלכם לא הפעילה.
אם האספן לא מקבל כלום בכלל, בדקו את לוג הדיבוג (grok --debug) לשורות external otel:: הן מתעדות אם הזרם פתר את ההגדרה שלו, ואם הוא מייצא או מדוכא.
#מאפייני משאב
| מאפיין | ערך |
|---|---|
service.name | grok-cli |
service.version, client.version | גרסאות בילד/לקוח |
app.entrypoint | tui | cli | headless | agent |
terminal.type | מותג אמולטור המסוף |
grok_code.schema.version | v1 |
grok_code.release_line | קו הבילד שהבינארי נשלח עליו, למשל public |
grok_code.release_channel | ערוץ ההפצה, למשל stable או alpha. נעדר כשהערוץ לא ידוע |
מאפייני זהות (user.id, ו-organization.id / team.id / deployment.id כשידועים) מצורפים לכל נקודת נתוני מדד ולכל אירוע אחרי שהאימות מסתיים. user.email מצורף ללוגים וגם למדדים בכל פעם שהסשן מחובר עם OAuth או חשבון gateway שיש לו כתובת לא ריקה: זו זהות, לא שער תוכן, והיא אף פעם לא נלקחת מ-git, ממפתח API או ממפתח פריסה. prompt.id (UUID לכל הנחיה) מופיע באירועים בלבד, לעולם לא במדדים. grok_code.release_line חוזר על נקודות נתוני מדד כי הרבה קצוות מדדים משמיטים מאפייני משאב.
#מדדים (היקף מד ai.xai.grok_code)
| מדד | יחידה | מאפיינים |
|---|---|---|
grok_code.session.count | {session} | מאפייני בסיס בלבד |
grok_code.token.usage | {token} | type = input | output | reasoning | cache_read; model |
grok_code.turn.count | {turn} | outcome = completed | cancelled | error; model |
grok_code.turn.ttft | ms | model |
grok_code.turn.ttfm | ms | model |
grok_code.tool.decision | {decision} | tool_name, decision = allow | deny | cancelled | followup, access_kind, permission_mode |
grok_code.tool.usage | {call} | tool_name, outcome |
grok_code.error.count | {error} | error_category, model |
grok_code.startup.total | ms | outcome = ok | timeout | error; auth_mode |
grok_code.startup.interactive | ms | auth_mode |
grok_code.startup.phase_duration | ms | phase, outcome, auth_mode |
grok_code.startup.timeout | {timeout} | stuck_in, auth_mode |
startup.total מודד מתחילת התהליך עד סשן שמיש, נרשם פעם אחת לכל תהליך. outcome = timeout או error אומר שהעלייה הסתיימה בלי סשן כזה.
startup.interactive רושם מתחילת התהליך עד הפריים הראשון שלולאת החיים אישרה שנכתב, פעם אחת לכל תהליך.
phase_duration מפרק את ניסיון החיבור לפי שלב (config_load, managed_policy, bootstrap, model_catalog, worker_spawn, leader_connect, acp_initialize, eager_auth). סננו לפי outcome שלו (ok | timeout | cancelled | error) כדי שדגימות קטועות לא יטו אחוזוני ok. השלבים המאוחרים app_init ו-session_create מופיעים בציר הזמן של הלוג ובמחרוזות הסיכום, לא במדד הזה. stuck_in בפסק זמן מציין את השלב שלא הסתיים. זה לעתים קרובות לא השלב שלקח הכי הרבה זמן, כי שלב שרץ בלי השהיה מסתיים לפני שפסק הזמן נרשם. הודעת השגיאה ש-Grok מדפיס מציינת את השלב הארוך ביותר במקום, כך שהשניים יכולים לציין שלבים שונים לאותו פסק זמן. השתמשו ב-phase_duration כדי להשוות ביניהם.
auth_mode הוא personal, team, deployment או unknown: עלות העלייה שונה לפי סוג, אז פצלו לפיו לפני השוואה.
turn.ttft הוא הזמן מתחילת התור עד הטוקן הראשון של כל ערוץ (חשיבה, טקסט או קריאת כלי) ו-turn.ttfm הזמן מתחילת התור עד הודעת הטקסט הראשונה של העוזר (חשיבה וקריאות כלים לא נכללות), דגימה אחת לכל תור על אותו שעון, כך ש-ttft לעולם לא עולה על ttfm. תור שלא ייצר פלט מודל לא רושם ttft. תור של חשיבה בלבד או כלי בלבד רושם ttft אבל לא ttfm.
אין מדד cost.usage: חברו את grok_code.token.usage עם מחירון משלכם. lines_of_code.count ו-active_time.total מתוכננים לשלב מאוחר יותר.
ערכי tool_name: שמות כלים מובנים עוברים מילולית. כלי MCP מכווצים ל-mcp_tool וכלים אחרים שאינם מובנים ל-custom_tool, אלא אם OTEL_LOG_TOOL_DETAILS=1.
#אירועים (רשומות לוג OTLP)
כל אירוע נושא את event.sequence, session.id, turn_number (בתוך התור), prompt.id, ועוד את מאפייני הזהות. מקרא שערים: details = דורש OTEL_LOG_TOOL_DETAILS, prompts = דורש OTEL_LOG_USER_PROMPTS, responses = דורש OTEL_LOG_ASSISTANT_RESPONSES (כשלא מוגדר, עוקב אחרי שער ה-prompts), content = דורש OTEL_LOG_TOOL_CONTENT (בלתי תלוי ב-details; ברירת המחדל כבויה); כל השאר תמיד מיוצא כל עוד הזרם פעיל.
event.name | מאפיינים |
|---|---|
grok_code.session_start | model, permission_mode, mcp_server_count, plugin_count, skill_count, hook_count, memory_enabled, is_git_repo, client_identifier |
grok_code.session_end | duration_secs, turn_count, tool_call_count, compaction_count, model |
grok_code.user_prompt | prompt_length, model, screen_mode? (fullscreen | inline | minimal | headless | other), command_name? (שם slash/skill, מטא-נתונים שתמיד פעילים); prompt (prompts) |
grok_code.assistant_response | response_length; response (responses; מושמט בתורות של כלים בלבד) |
grok_code.turn_completed | outcome, duration_ms, tool_call_count, model, error_category?, cancellation_category? |
grok_code.api_request | model, duration_ms, stop_reason?, input_tokens, output_tokens, reasoning_tokens, cache_read_tokens |
grok_code.api_error | error_category, model, status_code?, duration_ms? |
grok_code.tool_result | tool_name, outcome, success, duration_ms, file_extension, tool_use_id; mcp_tool.name / mcp_server.name מצומצמים תמיד (כלשונם תחת details); תצוגה מקדימה של tool_parameters + file_path (details); tool_input, tool_output, full_command, error_message (content) |
grok_code.tool_decision | tool_name, decision, access_kind, permission_mode, source, tool_use_id; שמות MCP מצומצמים תמיד (כלשונם תחת details); תצוגה מקדימה של tool_parameters (details); tool_input, full_command (content) |
grok_code.mcp_server_connection | status, transport_type, duration_ms, tool_count?, error_type?; mcp_server.name מצומצם תמיד (כלשונו תחת details); error_message (content) |
grok_code.permission_mode_changed | from_mode, to_mode, trigger |
grok_code.skill_activated | skill_source, trigger = slash_command | skill_md_read | skill_tool; skill.name (details) |
grok_code.plugin_loaded | install_kind?, success, error_category?; plugin_name (details) |
grok_code.compaction | duration_ms, tokens_before, tokens_after, model? |
grok_code.subagent | phase = launched | completed, subagent_type?, outcome?, duration_ms? |
grok_code.auth | auth_method |
grok_code.internal_error | error_type (מחלקה בלבד, בלי הודעה, בלי מיקום) |
grok_code.model_switched | from_model, to_model, success, error_code? |
#מודל פרטיות
שלושה מנגנונים עצמאיים של fail-closed שומרים על פורמט התעבורה:
- סכמה עם טיפוסים: מפתחות המאפיינים הם enum סגור; אי אפשר לצרף דבר שמחוץ לו.
- השחרה בזמן הפליטה: כל מחרוזת עוברת ניקוי של צורת סוד וניקוי של ספריית הבית, עם קיצור (512→128 תווים לכל מחרוזת ארגומנט של כלי מקוננת, 4 KB לתצוגה מקדימה של DETAILS
tool_parameters/ CONTENTerror_message, 60 KB עבורprompt/response/tool_input/tool_output/full_command). - מאמתים בזמן הייצוא: כל רשומה שנושאת מפתח שאינו בסכמה, מפתח של שער סגור, או צורת סוד שלא נוקתה נזרקת לפני היציאה מהתהליך; ייצואי מדדים עם מפתחות מאפיינים מחוץ לסכמה נזרקים במלואם.
לעולם לא מיוצאים: טקסט חשיבה/היסק, גופי בקשות API גולמיים, api_key.id, טביעות אצבע של המכונה, דרגת מנוי. טקסט הפרומפט, response של העוזר, נתיבי קבצים, תצוגות מקדימות של ארגומנטי כלים, וגופי CONTENT (tool_input, tool_output, full_command, error_message) מיוצאים רק כשהשער שלהם פתוח; אנליטיקת מוצר מצד ראשון לעולם לא מקבלת את הגופים האלה.
user.email מיוצא בכל פעם שלאימות OAuth/gateway יש כתובת (זה לא שער תוכן).
#דוגמה להגדרת אספן
receivers:
otlp:
protocols:
http:
endpoint: 0.0.0.0:4318
grpc:
endpoint: 0.0.0.0:4317
processors:
batch:
exporters:
prometheus:
endpoint: 0.0.0.0:9464
service:
pipelines:
metrics:
receivers: [otlp]
processors: [batch]
exporters: [prometheus]
logs:
receivers: [otlp]
processors: [batch]
exporters: [] # point at your log backend (loki, elasticsearch, …)שאילתות לדוגמה (PromQL, עם מייצא Prometheus שלמעלה):
# Tokens by model and type across the org, 1h rate
sum by (model, type) (rate(grok_code_token_usage_total[1h]))
# Sessions per team per day
sum by (team_id) (increase(grok_code_session_count_total[1d]))
# Tool-permission denial ratio
sum(rate(grok_code_tool_decision_total{decision="deny"}[1h]))
/ sum(rate(grok_code_tool_decision_total[1h]))#ניפוי באגים
הגדירו OTEL_LOGS_EXPORTER=console / OTEL_METRICS_EXPORTER=console כדי להדפיס רשומות מושחרות אל stderr (מושתק בנקודות הכניסה agent/headless כדי לשמור על לוגים שנלכדו נקיים). שגיאות ייצוא לעולם לא מופיעות ב-TUI; בדקו את לוג הדיבוג.