מדריך קלוד קוד בעברית

תיעוד 106

מדריך עזר לסביבות באירוח עצמי

מדריך עזר מלא עבור ה-runner וה-orchestrator באירוח עצמי: דגלי CLI, משתני סביבה ומדדי Prometheus.

הערה: סביבות באירוח עצמי נמצאות בבטא ציבורית בתוכניות Team ו-Enterprise. משתמש בעל תפקיד Owner מפעיל אותן על ידי הדלקת Allow self-hosted environments בדף הניהול Cloud environments. דף זה הוא מדריך עזר לדגלים ולמדדים. ראה את המדריך המהיר להגדרה ואת פריסה לסביבת ייצור למתכוני פריסת צי השרתים.

דף זה הוא מדריך עזר לשני התהליכים שאתה מריץ בתוך סביבה באירוח עצמי: ה-runner, שמבצע הפעלות ענן של Claude Code על המארחים שלך, וה-orchestrator האופציונלי לקנה מידה אוטומטי, שמפעיל יחידות runner כאשר הפעלות ממתינות בתור. לכל אחד מהם יש טבלת דגלים משלו. שניהם רצים על מארחי Linux או macOS, כפי שמניחות ברירות המחדל כגון /workspace ו-~/.claude. הרץ claude self-hosted-runner --help לקבלת הרשימה המוסמכת עבור הגרסה המותקנת אצלך.

סדרות מדדים וכמה שדות API עדיין משתמשים ב-pool עבור מה שדפים אלה מכנים סביבה (environment), שני המונחים מציינים את אותו הדבר. מזהה הסביבה הוא השדה pool_id, במבנה ccpool_...: בכל מקום שבו דפים אלה מציגים מזהה pool, הוא מציין את הסביבה. דגלי CLI ומשתני סביבה מאייתים זאת environment, כגון --environment-secret-file. צורות האיות הישנות והמיושנות עם pool עדיין עובדות, כפי שמתואר בשורה של --environment-secret-file.

#דגלי CLI עבור ה-runner

למרבית הדגלים יש משתנה סביבה תואם. כאשר שניהם מוגדרים, הדגל מקבל קדימות. דגלי משך זמן מקבלים דקות או שניות ב-CLI, אך משתנה הסביבה המשויך תמיד מוגדר במילישניות, כפי שמציינת הסיומת _MS, ועמודת ברירת המחדל מציגה את יחידת המידה של הדגל: --exit-if-unused-min 10 שקול ל-SELF_HOSTED_RUNNER_IDLE_SHUTDOWN_MS=600000, וערך Helm כגון SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS: "15" פירושו 15 מילישניות, ולא ברירת המחדל של 15 דקות.

דגלמשתנה סביבהברירת מחדלתיאור
--api-url <url>ללאhttps://api.anthropic.comכתובת URL בסיסית של ה-API. דרוס רק לצורכי בדיקה.
--base-dir <path>SELF_HOSTED_RUNNER_BASE_DIR/workspace, אין ב-Windowsספרייה עבור משיכות מאגרים (checkouts) וספריות עבודה לכל הפעלה. ל-runner דרושה גישת כתיבה לנתיב זה או לנתיב ההורה שלו. ה-runner יוצר את הספרייה בעת ההפעלה ויוצא עם cannot create or write to base directory כאשר אינו יכול ליצור אותה או לכתוב אליה. לפני גרסה v2.1.225, ה-runner יצר את הספרייה כאשר ההפעלה הראשונה החלה, כך שנתיב שאינו שמיש גרם לכשל בהפעלות ולא בהפעלה. ב-Windows, שאינה מארח נתמך עבור ה-runner, אין ברירת מחדל: ה-runner יוצא בעת ההפעלה אלא אם תעביר את הדגל או תגדיר את המשתנה. השתמש באותו ערך בכל runner בסביבה. ראה שמור על ספריית בסיס וקיבולת זהות בכל יחידות ה-runner.
--capacity <n>ללא1מספר מרבי של הפעלות מקבילות ש-runner זה מטפל בהן. כל ההפעלות שייכות לאותו owner נעול. השתמש באותו ערך בכל runner בסביבה, ראה שמור על ספריית בסיס וקיבולת זהות בכל יחידות ה-runner.
--client-label <label>SELF_HOSTED_RUNNER_CLIENT_LABELה-hostname של המארחתווית שה-runner שולח בעת ההרשמה. ה-runner מדווח עליה גם כתווית client_label של claude_code_self_hosted_runner_info. דורש Claude Code בגרסה v2.1.248 ומעלה.
--configure-gitSELF_HOSTED_RUNNER_CONFIGURE_GIT=1כבויכתיבת זהות git גלובלית והפעלת חתימת commits של Anthropic בעת ההפעלה. ראה הגדרת git.
--confine-repo-settings <mode>SELF_HOSTED_RUNNER_CONFINE_REPO_SETTINGSwarnמגדיר את מצב מנגנון ההגנה שמסמן הפעלה כאשר הגדרות שבוצע להן commit במאגר מנסות להעניק גישת כתיבה או קריאה מחוץ לסביבת העבודה של אותה הפעלה, להגדיר משתני סביבה, או לדרוס את מדיניות ה-sandbox או ה-hooks של המפעיל, כגון sandbox.enabled: false או disableAllHooks. ברירת המחדל warn מתעדת את ההפרה ביומן ועדיין מתחילה את ההפעלה, enforce דוחה את ההפעלה, ו-off משבית את הסריקה. ראה הקשחת הפריסה שלך.
--debug-token-dir <path>SELF_HOSTED_RUNNER_DEBUG_TOKEN_DIRלא מוגדרכתיבת אסימונים פעילים לדיסק לצורך בדיקה. לניפוי שגיאות בלבד, אין להשתמש בסביבת ייצור.
--defer-shutdown-max-min <n>SELF_HOSTED_RUNNER_DEFER_SHUTDOWN_MAX_MS0באות SIGTERM או SIGINT הראשון, המשך לשרת את ההפעלות שכבר מחוברות במקום לרוקן אותן, ולאחר מכן שחרר את מה שעדיין מחובר כעבור N דקות וצא. הגדל את זמן הקצוב לעצירה (stop timeout) של המארח לפני הגדרת ערך זה. ראה דחיית הריקון מעבר לאות הראשון. הערך 0 משבית זאת. דורש Claude Code בגרסה v2.1.238 ומעלה.
--drain-grace-sec <n>SELF_HOSTED_RUNNER_DRAIN_GRACE_MS0עד שה-runner מקבל אות כיבוי או מגיע לזמן הפרישה שלו, שולט מתי ה-runner יוצא לאחר סיום ההפעלות הפעילות שלו: 0 יוצא מיד ללא דגימה של עבודה נוספת, וערך חיובי משאיר את ה-runner פעיל ודוגם מחדש את התור של הבעלים (owner) הנעול במשך מספר שניות זה תחילה, על חשבון בידוד המכולות (containers) לכל הפעלה המתואר בסעיף ההקשחה. לאחר אות ראשון שנדחה באמצעות --defer-shutdown-max-min, ה-runner יוצא ברגע שאינו מחזיק בהפעלות כלל, ללא קשר למה שהוגדר כאן.
--drain-wait-sec <n>SELF_HOSTED_RUNNER_DRAIN_WAIT_MS0ברגע שתהליך הריקון מתחיל, שהוא בעת קבלת SIGTERM אלא אם הגדרת את --defer-shutdown-max-min, המתן עד N שניות לסיום התור הנוכחי (in-flight turn) ומשימות הרקע של כל הפעלה לפני סיום תהליך הבן. במהלך המתנה זו, ה-runner מחשיב משימת רקע שהסתיימה זה עתה כפעילה עד שתור ההמשך שקורא את התוצאה שלה מתחיל, למשך חלון זמן מרבי של SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS.
--environment-secret-file <path>SELF_HOSTED_RUNNER_ENVIRONMENT_SECRETנדרשנתיב לקובץ המכיל את סוד הסביבה, או, עבור יחידות runner שנוצרו על ידי ה-orchestrator, אסימון JWT חד-פעמי של הוראת העבודה (work-order JWT). המשתנה SELF_HOSTED_RUNNER_ENVIRONMENT_SECRET מעביר את ערך הסוד ישירות, ולא נתיב לקובץ. הדגל הישן יותר --pool-secret-file והמשתנה SELF_HOSTED_RUNNER_POOL_SECRET עדיין פועלים ומדפיסים הודעת התיישנות ל-stderr. גרסאות build של ה-runner מתוכנית התצוגה המקדימה הישנות מגרסה 2.1.216 מזהות רק את השמות הישנים האלה.
--exec-path <path>SELF_HOSTED_RUNNER_EXEC_PATHקובץ בינארי עצמיקובץ בינארי או סקריפט מעטפת (wrapper script) להפעלה עבור כל הפעלה. ראה סקריפטים של מעטפת.
--exit-if-unused-min <n>SELF_HOSTED_RUNNER_IDLE_SHUTDOWN_MS0יציאה לאחר N דקות של דגימה (polling) מבלי שהוקצתה עבודה מעולם, לצורך צמצום משאבים (scale-down) במנגנון autoscaler. הערך 0 משבית זאת.
--git-host-rewrite <from>=<to>ללאלא מוגדרשכתוב כתובות מקור מ-https://<from>/... ל-https://<to>/... לפני שכפול (clone), עבור split-horizon DNS. ניתן לציון מספר פעמים, דגל בלבד.
--git-ssh-rewrite <host>ללאלא מוגדרשכתוב כתובות מקור מ-https://<host>/... ל-git@<host>:... לפני שכפול (clone), עבור מארחי git התומכים ב-SSH בלבד. ניתן לציון מספר פעמים, דגל בלבד.
--health-port <port>SELF_HOSTED_RUNNER_HEALTH_PORT8080יציאה עבור המאזין של /healthz ו-/metrics. הגדר 0 להשבתה.
--hooks-dir <path>SELF_HOSTED_RUNNER_HOOKS_DIRלא מוגדרספרייה של סקריפטים למחזור חיים (lifecycle hook scripts). ראה סקריפטים של מחזור חיים.
--kill-session-after-min <n>SELF_HOSTED_RUNNER_MAX_LIFETIME_MS0סיום תהליך הבן של ההפעלה ברגע שפעל N דקות זמן שעון קיר, כמגבלת בטיחות להפעלות תקועות. ה-runner מסיים את עץ התהליכים של ההפעלה, כולל כל פקודה שההפעלה השאירה פועלת. ה-runner דוחה סיום שמתרחש באמצע תור עד לסיום התור, למשך חלון זמן מרבי של SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS. לבחירת ערך, ראה חלק מההפעלות אינן נחשבות כלא-פעילות. הערך 0 משבית זאת.
--lock-to-account <id>SELF_HOSTED_RUNNER_LOCK_TO_ACCOUNTלא מוגדרנעילה מראש של ה-runner לחשבון ספציפי בעת ההפעלה במקום נעילה בעת ההפעלה הראשונה. מקבל כתובת דוא"ל או מזהה user_... בארגון של הסביבה. runner שננעל מראש לעולם אינו קולט הפעלות מערוץ Claude Tag, שאין להן חשבון.
--log-file <path>SELF_HOSTED_RUNNER_LOG_FILEלא מוגדרשכפול יומני ה-runner לקובץ בנוסף ל-stdout ו-stderr, שנוצר עם הרשאות 0600. נדרש כדי ש-self-hosted-runner doctor יוכל לעקוב אחר יומנים באופן מקומי.
--log-level <level>ללאinfoinfo או debug
--post-session-hook-timeout-sec <n>SELF_HOSTED_RUNNER_POST_SESSION_HOOK_TIMEOUT_MS60תקציב זמן עבור ה-hook מסוג post-session בכל סיום הפעלה, כולל כיבוי של ה-runner.
--proxy-authorization-command <command>SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_COMMANDלא מוגדרפקודת מעטפת (shell) שה-runner מריץ עבור כל חיבור ל-proxy היציאה (egress proxy) שלך, תוך שימוש בפלט stdout המנוקה שלה כערך הכותרת Proxy-Authorization. דורש HTTPS_PROXY או HTTP_PROXY, ואינו ניתן לשילוב עם --proxy-authorization-file. ראה אימות מול egress proxy. דורש Claude Code בגרסה v2.1.238 ומעלה.
--proxy-authorization-file <path>SELF_HOSTED_RUNNER_PROXY_AUTHORIZATION_FILEלא מוגדרקובץ שה-runner קורא עבור כל חיבור ל-proxy היציאה שלך, תוך שימוש בתוכן המנוקה שלו כערך הכותרת Proxy-Authorization. השתמש בדגל זה עבור אסימון שתהליך אחר מבצע לו רוטציה במקום. בעל אותן דרישות כמו --proxy-authorization-command, ואינו ניתן לשילוב איתו. ראה אימות מול egress proxy. דורש Claude Code בגרסה v2.1.238 ומעלה.
--push-outcome-on-releaseSELF_HOSTED_RUNNER_PUSH_OUTCOME_ON_RELEASEכבויבסיום הפעלה ביוזמת ה-runner, כגון ריקון או שחרור עקב חוסר פעילות, דחיפת ענפי תוצאה במעקב אל origin לפני מחיקת סביבת העבודה, כך ש-commits שבוצעו תוך כדי ריצה ישרדו הפעלה מחדש. על בסיס מיטב המאמצים, מוסיף 30 שניות לתקציב הכיבוי, ודורש git בגרסה 2.29 ומעלה כדי לחדש עבודה מהענף שנדחף. הגבל גישת דחיפה (push) להפניות claude/* לפני ההפעלה, ראה הפעלות שחודשו מאבדות עבודה שלא נדחפה. מאגרים שנמשכו באמצעות hook מחזור חיים מסוג checkout אינם נדחפים, צור להם snapshot מתוך ה-hook מסוג post-session במקום זאת.
--release-idle-session-min <n>SELF_HOSTED_RUNNER_SESSION_IDLE_MS0שחרור משבצת הפעלה לאחר N דקות של חוסר פעילות ברגע שתור מסתיים או כשההפעלה ממתינה לפעולת משתמש. הפעלה שעדיין באמצע תור, כולל כזו שמחזיקה משימת רקע שלעולם אינה מסתיימת או אישור שהתבקש מתוך קריאת כלי שרצה, אינה נחשבת ללא-פעילה; שלב עם --kill-session-after-min כמחסום בטיחות קשיח. לאחר שמשימת רקע של הפעלה מסתיימת, ה-runner מחשיב את ההפעלה לעסוקה עד שתור ההמשך שקורא את התוצאה מתחיל, למשך חלון זמן מרבי של SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS. עד שה-runner מקבל אות כיבוי או מגיע לזמן הפרישה שלו, שחרור שמשאיר את ה-runner ללא הפעלות פעילות מתחיל את אותו נתיב יציאה כמו ריקון רגיל, הנשלט על ידי --drain-grace-sec. לאחר אות ראשון שנדחה באמצעות --defer-shutdown-max-min, ה-runner יוצא ברגע ששחרור משאיר אותו ללא הפעלות. הערך 0 משבית זאת.
--retire-at <epoch-seconds>SELF_HOSTED_RUNNER_RETIRE_ATלא מוגדרפרישת ה-runner בחותמת זמן Unix מוחלטת בשניות, עבור תשתית שהורגת את ה-runner בזמן ידוע מראש. מחזור חיי ה-runner מתאר את רצף השחרור וכיצד לקבוע את גודל מרווח הביטחון. ערכים לפני שנת 2001 או אחרי שנת 5138 נדחים על ידי הדגל וזוכים להתעלמות מצד משתנה הסביבה.
--session-stop-grace-sec <n>SELF_HOSTED_RUNNER_SESSION_STOP_GRACE_MS5כמה זמן להמתין לתהליך של Claude לצאת בצורה נקייה לאחר סיום הפעלה, לפני סיומו בכוח (force-killing). הגדל את הערך אם ה-hooks מסוג SessionEnd של תהליך הבן עצמו זקוקים לזמן נוסף.
--startup-timeout-min <n>SELF_HOSTED_RUNNER_STARTUP_TIMEOUT_MS15שחרור משבצת הפעלה אם תהליך הבן לא אותת שהוא אותחל בתוך N דקות מרגע יצירתו. מתנקה על ידי אות האתחול של תהליך הבן ב-ערוץ הפעילות, ולא על ידי פלט רגיל, שלאחריו --release-idle-session-min נכנס לתוקף. הערך 0 משבית זאת.
--trust-workspace [bool]SELF_HOSTED_RUNNER_TRUST_WORKSPACEמופעלזריעת אמון נשמר (persisted trust) עבור נתיבי המאגר של כל הפעלה, כך שהגדרות permissions.allow ו-additionalDirectories שבוצע להן commit במאגר יכובדו. הגדר false כדי לבטל הרשאות שבוצע להן commit במאגר ולהגדיר כללי הרשאה בקובץ settings.json של תצורת המארח במקום זאת. הגדרות sandbox.* שבוצע להן commit במאגר עדיין יחולו בכל מקרה, וזו הסיבה ש-מנגנון ההגנה על הגדרות המאגר סורק אותן ללא קשר לדגל זה.
--use-anthropic-git-proxyCLAUDE_RUNNER_USE_GIT_PROXY=1כבוישכפול באמצעות ה-git proxy של Anthropic במקום אימות git בניהול הלקוח. דורש --capacity 1 ו-git בגרסה 2.32 ומעלה, ה-runner מסרב לפעול אחרת. מחליף את דגלי השכתוב (rewrite).

למרבית דגלי משך הזמן יש ערך מרבי, שנבחר כדי לשמור על כל פסק זמן בתוך תקרת הטיימר של 32 סיביות בזמן הריצה, שהיא כ-24.85 ימים. הדגלים מסוג --*-min מוגבלים לתקרה של 10080 דקות, שהן 7 ימים. הדגל --drain-grace-sec מוגבל ל-604800 שניות, גם כן 7 ימים, והדגל --drain-wait-sec מוגבל ל-86400 שניות, שהן 24 שעות. הדגלים --session-stop-grace-sec ו---post-session-hook-timeout-sec אינם מוגבלים. חריגה מהתקרה מתנהגת באופן שונה בכל ממשק:

  • דגל: ההפעלה נכשלת עם שגיאה.
  • משתנה סביבה: ה-runner מצמיד את הערך לתקרת הטיימר במקום לדחות אותו.

#דגלי CLI עבור ה-orchestrator

פקודת המשנה self-hosted-runner orchestrator, אשר מפעילה יחידות runner לפי דרישה, מקבלת את הדגלים --api-url, --environment-secret-file, --hooks-dir, --health-port ו---log-level עם אותן ברירות מחדל כמו ה-runner, ובמקומות שבהם לדגל של ה-runner יש משתנה סביבה, עם אותו משתנה סביבה, למעט הדגל --hooks-dir שהוא דגל חובה וחייב להכיל hook מסוג spawn-runner. היא מקבלת גם דגלים ייחודיים משלה:

דגלברירת מחדלתיאור
--hook-concurrency <n>4מספר מרבי של סקריפטים מסוג spawn-runner שרצים במקביל. מגביל גם את מספר בקשות היצירה שנלקחות בכל דגימה (poll).
--hook-timeout <sec>60סיום עץ התהליכים של ה-hook לאחר מספר שניות זה. פסק הזמן בתוספת 5 שניות חסד לסיום חייב להישאר נמוך מ---expected-spawn-seconds, ה-orchestrator אוכף זאת בעת ההפעלה.
--expected-spawn-seconds <sec>120זמן אתחול p99 הצפוי עבור יחידות runner שנוצרו, בטווח הנאכף על ידי השרת בין 10 ל-3600. נשלח בכל דגימה כחוזה חכירה (lease) בצד השרת, אם אף runner אינו נרשם לפני שזמן זה חולף, ההפעלה מוצעת מחדש עם מזהה הזמנה חדש. כל העותקים המשוכפלים (replicas) חייבים לחלוק ערך זה.
--min-idle <n>0שמירה על לפחות N משבצות הפעלה פנויות במצב סרק על ידי יצירת יחידות runner במצב המתנה (standby) באופן יזום. הערך 0 משבית חימום מראש. שלב עם הדגל --exit-if-unused-min של ה-runner כך שיחידות runner עודפות במצב המתנה ישחררו את עצמן.
--debug-dir <path>לא מוגדרכתיבת הוראת העבודה ופלט stderr של ה-hook לדיסק עבור כל בקשת יצירה. לניפוי שגיאות בלבד, לעולם אין להגדיר בסביבת ייצור.

#דגלי SCM connector

ה-orchestrator יכול להחזיק חיבור WebSocket קבוע למישור הבקרה (control plane) של Anthropic, כך שתהליכים מקדימים להפעלה המנוהלים בענן, כגון בורר המאגרים ומפענח הענפים או ההפניות, יוכלו לגשת לשרת GitHub Enterprise Server שניתן לניתוב רק מתוך הרשת הפנימית שלך. המחבר נשאר כבוי אלא אם תגדיר את --scm-connector-host.

דגלברירת מחדלתיאור
--scm-connector-host <host[:port]>לא מוגדרשם המארח של GitHub Enterprise Server שאליו מועברות הבקשות. ברירת המחדל של היציאה היא 443. הגדרת דגל זה מפעילה את המחבר.
--scm-connector-id <n>נדרש יחד עם --scm-connector-hostהמזהה המספרי של חיבור ה-GitHub Enterprise Server של הארגון שלך. פנה לצוות הלקוחות של Anthropic לקבלת הערך בעת הפעלת המחבר.
--scm-connector-provider <slug>gheמקטע נתיב המזהה את הספק, התואם לביטוי ^[a-z0-9-]{1,32}$.
--scm-connector-ca-file <path>לא מוגדרחבילת CA נוספת, בפורמט PEM, עבור חיבורי TLS למארח ה-GitHub Enterprise Server.
--scm-connector-host-rewrite <from>=<to_host:to_port>לא מוגדרלבדיקות מקצה לקצה בלבד: מנתב מחדש את חיבור ה-TCP תוך שמירה על כותרת ה-Host ו-TLS SNI כערך של --scm-connector-host.

המחבר מבצע אימות באמצעות סוד הסביבה הקיים של ה-orchestrator ומתחבר מחדש אוטומטית: עם השהיה מעריכית חוזרת (exponential backoff) בחיבור שנותק, או השהיה קבועה של 30 שניות כאשר מישור הבקרה סוגר את החיבור מכיוון שעותק משוכפל אחר של ה-orchestrator כבר מחזיק בו.

#הגדרות משתני סביבה בלבד

הגדרות runner אלה נקראות ממשתני הסביבה בלבד ומכסות התנהגות שמרבית הפריסות משאירות בערך ברירת המחדל:

משתנה סביבהברירת מחדלתיאור
SELF_HOSTED_RUNNER_BG_RESULT_GRACE_MS30000משך הזמן שבו ה-runner מחשיב הפעלה כעסוקה לאחר שמשימת רקע מסתיימת בזמן שתור ההמשך שקורא את התוצאה טרם החל. השורות של --drain-wait-sec ו---release-idle-session-min מתארות היכן ההשהיה חלה בעת ריקון ושחרור עקב חוסר פעילות, ו-מחזור חיי ה-runner מתאר היכן היא חלה בעת פרישה באמצעות --retire-at. הערך 0 או ערך שאינו בר-שימוש חוזרים לברירת המחדל, כך שלא ניתן לבטל השהיה זו. דורש Claude Code בגרסה v2.1.228 ומעלה.
SELF_HOSTED_RUNNER_HOST_CONFIG_DIR~/.claudeספרייה הנלכדת בתמונת מצב (snapshot) בעת הפעלת ה-runner ונזרעת לתוך CLAUDE_CONFIG_DIR של כל הפעלה, שינויים בדיסק חלים לאחר הפעלה מחדש של ה-runner. הגדרת המשתנה מעבירה גם את המיקום שממנו ה-runner קורא את .claude.json לצורך זריעת MCP, כך שהגדרתו, כולל לערך ברירת המחדל שלו עצמו, מעתיקה את מיקום החיפוש הזה. הפנה לספרייה ריקה כדי להשבית את הזריעה לחלוטין.
SELF_HOSTED_RUNNER_MAX_LIFETIME_GRACE_MS900000מגביל את משך הזמן שבו סיום תהליך לפי --kill-session-after-min נדחה בזמן המתנה לסיום תור פעיל.
SELF_HOSTED_RUNNER_SIGKILL_GRACE_MS30000משך הזמן שה-runner ממתין למערכת ההפעלה למסור SIGKILL לתהליך בן שתקוע ב-I/O בלתי ניתן להפרעה לפני שהוא יוצא בעצמו. נקבע עם רצפה של --post-session-hook-timeout-sec בתוספת 15 שניות, ועוד 30 שניות כאשר --push-outcome-on-release מוגדר, כך שהמינימום בפועל הוא 75 שניות בערכי ברירת המחדל.
CLAUDE_RUNNER_FETCH_DEPTH50עומק שליפת git (fetch depth) עבור שכפולים חדשים. הגדר מספר שלם חיובי, או full או 0 עבור שליפה מלאה. מאגרים שכבר קיימים בסביבת העבודה שומרים על העומק הקיים שלהם.
CLAUDE_RUNNER_SKIP_GIT_VERIFYלא מוגדרכאשר הערך הוא 1, מדלג על בדיקת נוכחות של .git לאחר ריצת hook מסוג checkout. הגדר זאת כאשר ה-hook שלך מייצר מקור שאינו git.
FORCE_AUTOUPDATE_PLUGINSלא מוגדרכאשר הערך הוא 1, מאפשר לשוקי תוספים (plugin marketplaces) להתעדכן אוטומטית אף על פי שהקובץ הבינארי נעול (pinned).
CLAUDE_CODE_DISABLE_ARTIFACTלא מוגדרכאשר הערך הוא 1, משבית את כלי ה-Artifact בהפעלות ללא קשר להגדרת המנהל בארגון, ומסיר את דרישת תעבורת היציאה עבור *.frame.claudeusercontent.com.

#טלמטריה

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

אמצעי בקרה אחד ייחודי לסביבות באירוח עצמי: CLAUDE_CODE_BYOC_ENABLE_DATADOG=1 בוחר להפעיל מדדים תפעוליים של Datadog, אשר כבויים כברירת מחדל בסביבות באירוח עצמי. אמצעי הבקרה הכלליים של טלמטריית Claude Code, שהם DISABLE_TELEMETRY, DO_NOT_TRACK, DISABLE_ERROR_REPORTING ו-CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, חלים על תהליכי הבן של ההפעלה כפי שמתועד ב-מדריך עזר למשתני סביבה. המשתנה DISABLE_GROWTHBOOK קשור אך שונה: הגדרת DISABLE_GROWTHBOOK=1 משביתה אחזור דגלי תכונות (feature flags), והטלמטריה נשארת פעילה אלא אם מוגדר גם DISABLE_TELEMETRY.

המשתנה CLAUDE_CODE_ENABLE_TELEMETRY אינו קשור: הוא מפעיל ייצוא OpenTelemetry לאספן (collector) משלך, כפי שמתואר בסעיף ניטור, ואינו שולט בניתוחי הנתונים של Anthropic.

#נקודת קצה לבדיקת תקינות (Health endpoint)

ה-runner מגיש את GET /healthz ביציאת הבריאות שהוגדרה. התגובה היא 200 OK בכל זמן שהתהליך פועל, ללא קשר למצב שבו נמצאת לולאת הדגימה (poll loop), כך שבדיקת HTTP (probe) בנקודת קצה זו מזהה תהליך מת בלבד. גוף ה-JSON מתאר את המצב הנוכחי:

{
  "status": "ok",
  "runner_id": "ccrunner_...",
  "active_sessions": 2,
  "last_poll_at": "2026-03-31T18:04:11.220Z",
  "last_poll_age_ms": 842
}

השתמש ב-last_poll_age_ms כאות חיות בבדיקות מותאמות אישית, ערך שגדל ללא הגבלה מצביע על כך שלולאת הדגימה תקועה. גם last_poll_at וגם last_poll_age_ms הם null עד להשלמת הדגימה הראשונה.

ה-orchestrator מגיש נקודת קצה /healthz משלו ביציאת הבריאות שלו. נקודת הקצה שלו מחזירה תמיד 200, והגוף מכיל שדה connected המדווח האם הדגימה האחרונה הצליחה, בתוספת ספירת תור יצירה לפי מצב בתוך queue_counts. בצע התניית מוכנות (readiness) והתראות על פי connected ולא על פי קוד המצב.

כאשר SCM connector מוגדר, גוף ה-/healthz של ה-orchestrator מכיל גם את scm_connector_connected ואובייקט scm_connector עם connected, last_connected_at, last_error, reconnects ו-requests_forwarded. שני השדות הם null כאשר --scm-connector-host אינו מוגדר.

#מדדי Prometheus

כל runner מגיש מדדי Prometheus ב-GET /metrics באותה יציאה של /healthz. סדרות עיקריות:

סדרההערות
claude_code_self_hosted_runner_info{runner_id,version,client_label}תמיד 1, שימושי למלאי צי השרתים ולזיהוי סטיית גרסאות.
claude_code_self_hosted_runner_capacityערך ה---capacity שהוגדר.
claude_code_self_hosted_runner_active_sessionsהפעלות שרצות כעת.
claude_code_self_hosted_runner_locked_account{email}קיים ברגע שה-runner ננעל למשתמש והונפק אסימון הפעלה הנושא טענת act.email. הסדרה נעדרת ב-runner שננעל לסוכן מסוג Claude Tag, שאסימוני ההפעלה שלו אינם נושאים act.email. ערך התווית הוא כתובת הדוא"ל של החשבון. אם מאגר המדדים שלך קריא באופן נרחב, הסר את התווית או בצע לה גיבוב (hash) בזמן האיסוף (scrape), למשל באמצעות metric_relabel_configs של Prometheus.
claude_code_self_hosted_runner_last_poll_age_secondsשניות מאז הדגימה המוצלחת האחרונה. התרע אם הערך עולה מעל 60.
claude_code_self_hosted_runner_poll_errors_total{error_kind}כשלים מצטברים של PollWork לפי סוג: transport, timeout, 5xx, 429 או 4xx. כל חמש הסדרות קיימות מרגע הפעלת התהליך, התרע על rate(...[5m]) > 0.
claude_code_self_hosted_runner_sessions_started_total{client_platform}תהליכי בן של הפעלות שנוצרו לאורך חיי ה-runner, סדרה אחת לכל מקור הפעלה כגון web_claude_ai, ios, android, desktop_app או claude_code_cli, או unknown כאשר השרת לא שלח מקור. הפעלות מ-Slack נושאות claude_in_slack או claude-in-slack בהתאם לאינטגרציית ה-Slack שיצרה אותן, לכן התאם לשניהם באמצעות בורר ביטוי רגולרי כגון {client_platform=~"claude[-_]in[-_]slack"}. השתמש ב-sum() עבור סך כל צי השרתים.
claude_code_self_hosted_runner_sessions_completed_total{client_platform}הפעלות שהסתיימו בצורה נקייה, מסומנות באותה צורה. רחב יותר מיציאה נקייה פשוטה: ראה סמנטיקה של מוני מחזור חיי הפעלה לפירוט מה נספר.
claude_code_self_hosted_runner_sessions_failed_total{client_platform}הפעלות שהסתיימו בכישלון, מסומנות באותה צורה. אותה הסתייגות: ראה סמנטיקה של מוני מחזור חיי הפעלה.
claude_code_self_hosted_runner_sessions_interrupted_total{client_platform}הפעלות שה-runner סיים מסיבה תפעולית ולא מתוצאת הפעלה, מסומנות באותה צורה. ראה סמנטיקה של מוני מחזור חיי הפעלה.
claude_code_self_hosted_runner_initializing_sessionsהפעלות הנמצאות כעת בשלב האתחול (init), מרגע ההקצאה ועד לאירוע האתחול של תהליך הבן.
claude_code_self_hosted_runner_session_init_duration_secondsהיסטוגרמה של משכי זמן אתחול ההפעלה.
claude_code_self_hosted_runner_session_init_errors_totalהפעלות שנכשלו לפני שהגיעו לאתחול: כשל ב-checkout hook, הכנת git, בעיית אסימון, או קריסת תהליך בן לפני אתחול.
claude_code_self_hosted_runner_session_start_hook_errors_totalסקריפטים מסוג SessionStart שדיווחו על תוצאת שגיאה, אחד לכל ביצוע כושל של hook.
claude_code_self_hosted_runner_session_idle_seconds{session_id,client_platform}מד (gauge) לכל הפעלה של שניות מאז שההפעלה הפכה ללא-פעילה. שימושי לסיום הפעלות שתקועות בהנחיית אישור שלא נענתה.

ה-orchestrator מגיש סדרות משלו ב-GET /metrics באותה יציאה של ה-/healthz שלו:

סדרההערות
claude_code_self_hosted_orchestrator_info{version,pool_id,orchestrator_uuid,hostname}תמיד 1
claude_code_self_hosted_orchestrator_connected1 כאשר הדגימה האחרונה הצליחה, יורד ל-0 לאחר דגימה כושלת כלשהי, ללא קשר לסוג הכשל.
claude_code_self_hosted_orchestrator_last_poll_age_secondsשניות מאז ניסיון הדגימה האחרון, בין אם הצליח או נכשל, שלא כמו המדד בעל השם הזהה ב-runner שמודד מאז ההצלחה האחרונה. שלב עם connected כדי לתפוס דגימות כושלות. לולאת הדגימה של ה-orchestrator ממתינה לביצוע ה-hook, לכן התרע מעל --hook-timeout בתוספת מרווח ביטחון, סביב 90 שניות בערכי ברירת המחדל, במקום 60 שניות קבוע.
claude_code_self_hosted_orchestrator_poll_errors_total{error_kind}כשלים מצטברים של PollSpawnHints לפי סוג: transport, timeout, 5xx, 429 או 4xx. כל חמש הסדרות קיימות מרגע הפעלת התהליך, התרע על rate(...[5m]) > 0.
claude_code_self_hosted_orchestrator_queue_pending_sessionsבקשות הפעלה שניתן לתבוע כעת.
claude_code_self_hosted_orchestrator_queue_backing_off_sessionsבקשות הפעלה בהשהיית ניסיון חוזר (retry backoff) לאחר כשל hook הניתן לניסיון חוזר.
claude_code_self_hosted_orchestrator_queue_circuit_broken_sessionsבקשות הפעלה שחסומות עד שמשתמש בעל תפקיד Owner מנסה אותן שוב מתוך כרטיסיית Activity של הסביבה, התרע אם הערך גדול מאפס.
claude_code_self_hosted_orchestrator_pool_pending_sessionsסך כל ההפעלות הממתינות ל-runner עבור סביבה זו. צבירה ברמת כלל הסביבה, זהה בכל מופע orchestrator: השתמש ב-MAX ולא ב-SUM בין מופעים.
claude_code_self_hosted_orchestrator_pool_active_sessionsהפעלות שמוקצות כעת ל-runner פעיל בסביבה זו. צבירה ברמת כלל הסביבה, זהה בכל מופע orchestrator: השתמש ב-MAX ולא ב-SUM בין מופעים.
claude_code_self_hosted_orchestrator_spawn_hooks_total{result}תוצאות מצטברות של hook מסוג spawn-runner: ok, retryable, non_retryable. סופר הפעלות של hook ב-orchestrator, ולא תהליכי בן של הפעלות שה-runners מפעילים: לא ניתן להשוואה ל-sessions_started_total, שכן קיבולת מעל אחת, מאגרים מחוממים (warm pools) ויחידות runner שנוצרות שוב עבור אותה הפעלה גורמים כולם להבדלים בין השניים.
claude_code_self_hosted_orchestrator_spawn_hook_duration_secondsהיסטוגרמה של משכי זמן ביצוע ה-hook.
claude_code_self_hosted_orchestrator_warm_hints_dispatched_totalבקשות הפעלה במצב המתנה (standby) שנשלחו מאז הפעלת התהליך.
claude_code_self_hosted_orchestrator_session_queue_wait_secondsהיסטוגרמה של שניות שכל הפעלה המתינה בתור לפני שה-orchestrator תבע אותה להפעלה, נרשם מתוך חותמת זמן ההמתנה בתור שמישור הבקרה שולח עם בקשת ההפעלה של כל הפעלה. השתמש לצורך התראות על זמן תור p50/p99. יצירת יחידות בחימום מראש אינה נדגמת כאן.
claude_code_self_hosted_orchestrator_clock_skew_secondsסטיית שעון מקומי פחות שעון השרת (local-minus-server), מדד אבחוני, קיים לאחר שנמדד.
claude_code_self_hosted_orchestrator_scm_connector_connected1 כאשר חיבור ה-WebSocket של SCM connector פתוח, 0 בעת חיוג או השהיה חוזרת. נעדר כאשר --scm-connector-host אינו מוגדר.
claude_code_self_hosted_orchestrator_scm_connector_requests_forwarded_totalבקשות HTTP מצטברות שהועברו ב-proxy למארח ה-SCM שהוגדר מאז הפעלת התהליך. נעדר כאשר --scm-connector-host אינו מוגדר.

לצורך קנה מידה אוטומטי (autoscaling), בחר את הסדרה המתאימה לסגנון שינוי הגודל שלך והתנה אותה לפני שהיא מזינה את מנגנון ה-scaler:

  • קנה מידה לפי עומק תור (Queue-depth scaling): הזן את claude_code_self_hosted_orchestrator_pool_pending_sessions לתוך ה-scaler של HPA או KEDA שלך, ולא את queue_pending_sessions.
  • קנה מידה לפי קיבולת (Capacity scaling): שנה קנה מידה לפי היחס בין active_sessions של ה-runner לבין capacity.
  • התניה על connected: סנן את השאילתה עם claude_code_self_hosted_orchestrator_connected == 1 לכל מופע, כך שערך ישן של עותק משוכפל מנותק לא יזין את ה-scaler.

במהלך השבתת דגימה מלאה, שבה כל העותקים המשוכפלים מנותקים, השאילתה המותנית אינה מחזירה נתונים. מנגנון HPA שומר על מספר העותקים הנוכחי במקרה של מדד חסר, אך ה-scaler של KEDA עבור Prometheus בערך ברירת המחדל שלו ignoreNullValues: "true" קורא את התוצאה הריקה כאפס ומבצע הקטנת כמות עותקים (scale in). הגדר ignoreNullValues: "false" ב-ScaledObject, באופן אופציונלי עם רצפת עותקים משוכפלים מסוג fallback.

ה-PodMonitor הבא של Prometheus Operator מכסה את שני התהליכים. הוא בוחר pods לפי התווית app.kubernetes.io/part-of: claude-code-self-hosted-runner ויציאת ה-health בעלת השם שמוגדרת על ידי המתכון ל-Kubernetes. התאם את מרחבי השמות (namespaces) לפריסה שלך:

# Example Prometheus Operator PodMonitor for the Claude Code self-hosted
# runner + orchestrator. Adjust the namespace and label selectors to match
# your deployment. Both the runner and the orchestrator serve /metrics on
# their --health-port (default 8080).
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: claude-code-self-hosted-runner
  namespace: monitoring
spec:
  namespaceSelector:
    matchNames:
      - claude-runners
  selector:
    matchExpressions:
      
# Matches the runner Deployment from the Kubernetes recipe, plus any
      
# on-demand runner Jobs and orchestrator pods you label the same way
      
# and give a named 'health' containerPort.
      - key: app.kubernetes.io/part-of
        operator: In
        values: [claude-code-self-hosted-runner]
  podMetricsEndpoints:
    - port: health
      path: /metrics
      interval: 30s

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

# Example Prometheus alert rules for the Claude Code self-hosted runner
# + orchestrator. Tune thresholds for your fleet size and SLOs.
groups:
  - name: claude-code-self-hosted-runner
    rules:
      - alert: ClaudeRunnerPollStale
        expr: claude_code_self_hosted_runner_last_poll_age_seconds > 60
        for: 2m
        labels: {severity: warning}
        annotations:
          summary: "Runner {{ $labels.pod }} has not polled in >60s"
      - alert: ClaudeRunnerVersionDrift
        expr: count(count by (version) (claude_code_self_hosted_runner_info)) > 1
        for: 30m
        labels: {severity: info}
        annotations:
          summary: "Runners are running mixed versions"
      - alert: ClaudeRunnerInitErrorsHigh
        expr: increase(claude_code_self_hosted_runner_session_init_errors_total[10m]) > 3
        for: 5m
        labels: {severity: warning}
        annotations:
          summary: "Runner {{ $labels.pod }}: >3 session init failures in 10m (checkout hook / git / token / pre-init crash)"
      - alert: ClaudeRunnerPollErrors
        expr: sum by (pod) (rate(claude_code_self_hosted_runner_poll_errors_total[5m])) > 0
        for: 2m
        labels: {severity: warning}
        annotations:
          summary: "Runner {{ $labels.pod }}: PollWork failing ({{ $value | humanize }}/s over 5m)"
      - alert: ClaudeRunnerSessionStartHookErrors
        expr: increase(claude_code_self_hosted_runner_session_start_hook_errors_total[10m]) > 3
        for: 5m
        labels: {severity: warning}
        annotations:
          summary: "Runner {{ $labels.pod }}: >3 SessionStart hook failures in 10m"

  - name: claude-code-self-hosted-orchestrator
    rules:
      - alert: ClaudeOrchestratorDisconnected
        expr: claude_code_self_hosted_orchestrator_connected == 0
        for: 2m
        labels: {severity: critical}
        annotations:
          summary: "Orchestrator {{ $labels.pod }} cannot reach the Anthropic control plane"
      - alert: ClaudeOrchestratorPollStale
        expr: claude_code_self_hosted_orchestrator_last_poll_age_seconds > 90
        for: 2m
        labels: {severity: warning}
        annotations:
          summary: "Orchestrator {{ $labels.pod }} has not polled in >90s (poll loop waits on hook execution)"
      - alert: ClaudeOrchestratorCircuitBroken
        expr: claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions > 0
        for: 1m
        labels: {severity: critical}
        annotations:
          summary: "{{ $value }} sessions circuit-broken: spawn-runner hook is repeatedly non-retryable; fix infra then retry from the Activity tab"
      - alert: ClaudeOrchestratorPollErrors
        expr: sum by (pod) (rate(claude_code_self_hosted_orchestrator_poll_errors_total[5m])) > 0
        for: 2m
        labels: {severity: warning}
        annotations:
          summary: "Orchestrator {{ $labels.pod }}: PollSpawnHints failing ({{ $value | humanize }}/s over 5m)"
      - alert: ClaudeOrchestratorSpawnHookFailing
        expr: sum by (pod) (increase(claude_code_self_hosted_orchestrator_spawn_hooks_total{result!="ok"}[5m])) > 3
        for: 5m
        labels: {severity: warning}
        annotations:
          summary: "Orchestrator {{ $labels.pod }}: >3 spawn-runner hook failures in 5m"

#העברת מדדים מתהליכי בן של הפעלה

כל הפעלה רצה בתהליך בן משלה עם מדדי OpenTelemetry משלה. כאשר ערך --capacity גדול מאחד, ה-runner משכתב את האופן שבו מדדי תהליכי הבן האלה נחשפים. הגדרת OTEL_METRICS_EXPORTER=prometheus במארח ה-runner ו-CLAUDE_CODE_ENABLE_TELEMETRY=1 בסביבת ההפעלה, למשל מתוך סקריפט המעטפת שלך או מסביבת ה-runner עצמו, שההפעלות יורשות, חושפת מחדש את מכשירי המדידה מסוג מונה ומד של כל תהליך בן בנקודת הקצה /metrics של ה-runner עצמו, לצד הסדרות של ה-runner. ה-runner משכתב את ה-exporter של תהליך הבן כדי לדחוף נתונים באמצעות OTLP למקבל של loopback בלבד ביציאת הבריאות, מתייג כל סדרה עם תוויות session_id ו-client_platform, ומסיר את הסדרות של הפעלה כאשר אותה הפעלה מסתיימת. היסטוגרמות אינן מועברות, ומדד של תהליך בן ששמו מתנגש עם הקידומת של ה-runner עצמו מושמט.

בברירת המחדל של --capacity 1, השכתוב אינו חל: תהליך הבן של ההפעלה מאזין בנקודת קצה של Prometheus משלו ביציאה 9464 כרגיל.

#סמנטיקה של מוני מחזור חיי הפעלה

המונים sessions_started_total, sessions_completed_total, sessions_failed_total ו-sessions_interrupted_total מסווגים כל הפעלה לפי האופן שבו היא הסתיימה. כל תהליך בן של הפעלה שנוצר מקדם את sessions_started_total באחד בעת היצירה, ובדיוק אחד משלושת המונים האחרים מקודם באחד בעת היציאה, כך ש-sessions_started_total פחות סכום שלושת האחרים שווה למספר תהליכי הבן של הפעלות שרצים כעת.

  • completed: ההפעלה הסתיימה בצורה נקייה. זה כולל יציאה עצמאית של תהליך הבן עם קוד 0, העברת ההפעלה לארכיון או מחיקתה בעת שתהליך הבן עדיין היה מחובר, ושחרור המשבצת על ידי ה-runner כהעברה נקייה: שחרור עקב חוסר פעילות, פסק זמן של אתחול, או ביטול הקצאה (deassign) בצד השרת שלולאת הדגימה זיהתה לפני שתהליך הבן יצא. מקדם את sessions_completed_total.
  • failed: תהליך הבן יצא בעצמו עם קוד שאינו אפס, בין אם עקב קריסה או כשל הגדרה לאחר היצירה. מקדם את sessions_failed_total.
  • interrupted: ה-runner סיים את תהליך הבן מסיבה תפעולית שאינה הצלחה של ההפעלה ואינה תקלה של ה-runner, כגון ריקון (drain) או מנגנון השמירה על משך חיים מרבי --kill-session-after-min. הפעלה מחדש מדורגת ב-Kubernetes השולחת SIGTERM היא דוגמה אחת לריקון. מקדם את sessions_interrupted_total.

המשתנה CLAUDE_RUNNER_EXIT_REASON של ה-hook מסוג post-session אינו משתמש בסיווג זה עבור העברות נקיות. ה-hook מדווח על שחרור עקב חוסר פעילות, פסק זמן של אתחול, וביטול הקצאה בצד השרת כ-interrupted, מכיוון שמנקודת מבטו של ה-hook ה-runner הרג את תהליך הבן, בעוד שהמונים לעיל מתעדים את אותם אירועים כ-completed, מכיוון ששום דבר לא השתבש והמשבצת הוחזרה בצורה נקייה. אם תתאים קבלות מ-hook מול sessions_completed_total ישירות, תספור פחות סיומים מהמצב בפועל. השתמש ב-hook עבור ערבויות ברמת ההפעלה הבודדת ובמונים עבור שיעורים מצטברים.

בסביבת ריצה בודדת (one-shot), שבה מוגדר --capacity 1 עם ברירת המחדל --drain-grace-sec 0, כל תהליך runner יוצא רגעים ספורים לאחר סיום ההפעלה היחידה שלו. המונים sessions_completed_total, sessions_failed_total ו-sessions_interrupted_total מתקדמים רק בסיום ההפעלה, ממש לפני אותה יציאה, כך שאיסוף של Prometheus כל 15 עד 60 שניות תופס רק לעיתים רחוקות את הקידום לפני שהסדרה של ה-runner נעלמת. שלושת מוני סיום ההפעלה הללו הם המונים הסופיים שיתר סעיף זה מתייחס אליהם. המונה sessions_started_total מתקדם בעת יצירת התהליך ונשאר גלוי למשך כל חיי ההפעלה, כך שהוא מופיע באופן מהימן, אך בסביבת ריצה בודדת משמעותו קרובה יותר ל"הפעלות שרצות כעת" מאשר לספירה מצטברת.

השתמש בסדרות בטבלה זו עבור היעד המתאים במקום במונים הסופיים:

יעדשימוש
תפוקהclaude_code_self_hosted_orchestrator_spawn_hooks_total{result="ok"}, מונה ב-orchestrator מאריך הימים שמקודם באחד לכל hook מסוג spawn-runner מוצלח ונשאר בעל משמעות תחת rate(). הוא סופר קריאות ל-hook ולא הפעלות, כך שחימום מראש ויצירות חוזרות עבור אותה הפעלה גורמים להבדל בינו לבין ספירת הפעלות.
ניצולתsum(claude_code_self_hosted_runner_active_sessions) מול sum(claude_code_self_hosted_runner_capacity), שניהם מדדים תקפים בכל איסוף ללא קשר לאורך חיי ה-runner.
עומס ממתיןclaude_code_self_hosted_orchestrator_pool_pending_sessions עבור עומק תור, ו-claude_code_self_hosted_orchestrator_queue_circuit_broken_sessions, עם התראה אם גדול מאפס.
כשליםclaude_code_self_hosted_runner_sessions_failed_total, על בסיס מיטב המאמצים: קריסות אמיתיות לאחר יצירה אכן מקדמות אותו, ו-rate() הוא בעל משמעות ביחידות runner ששורדות מעבר להפעלות שלהן עם --drain-grace-sec גדול מ-0. בסביבת ריצה בודדת קיימת אותה בעיית חלון איסוף כמו ביתר המונים הסופיים, לכן התייחס לכל ערך שאינו אפס שאתה כן רואה כראוי לחקירה. כשלים לפני יצירה, כגון כשל ב-checkout hook, הכנת git, או בעיית אסימון, מופיעים רק ב-session_init_errors_total.

השורות orchestrator_* קיימות רק בסביבות המריצות את ה-orchestrator לפי דרישה. בצי שרתים קבוע שבו יחידות ה-runner שורדות מעבר להפעלות שלהן, עם --drain-grace-sec גדול מ-0, השתמש ב-sum(rate(claude_code_self_hosted_runner_sessions_started_total[5m])) עבור תפוקה. בצי שרתים של ריצה בודדת, לסדרה זו יש אותה בעיית חלון איסוף כמו למונים הסופיים, לכן הסתמך על ספירת ההפעלות שבתור במקום זאת. בדוק עומס ממתין בכרטיסיית Activity של הסביבה, בדף הניהול Cloud environments: יחידות ה-runner אינן מייצאות סדרה של עומק תור.

לדיווח תוצאות ברמת ההפעלה הבודדת, השתמש ב-hook מסוג post-session במקום זאת: הוא מופעל בכל סיום הפעלה שבה נוצר תהליך בן, למעט סיום פתאומי של ה-runner כגון הפקעת מכונה וירטואלית (VM preemption), בהתאם לחוזה של ה-hook עצמו.

#מה הלאה