מזהה שגיאות בלוגים
הדביקו לוג וראו אילו שורות הן שגיאות מוכרות, מה כל אחת אומרת ומה לעשות קודם. הלוג ממוסך ומנותח בדפדפן הזה: כתובות IP, אימיילים, tokens וסיסמאות לא מגיעים למסך, ושום דבר לא נשלח.
הדביקו את הטקסט, או בחרו קובץ מהמחשב. עד 8192 KiB.
0 מתוך 8192 KiB
מה הכלי עושה
הכלי קורא לוג שורה אחר שורה ומזהה את השגיאות שעוצרות או שוברות שירותי self-hosted בתדירות הגבוהה ביותר: Docker (פורט שכבר תפוס, ה-daemon או ה-socket שלו, Image למעבד אחר, פקודה חסרה, Image שאי אפשר למשוך, טווחי רשת שנגמרו), PostgreSQL ו-MariaDB / MySQL (התחברות, roles, חיבורים, נתונים מגרסה אחרת, שני שרתים על אותה תיקיית נתונים), nginx ו-Caddy (upstream שדחה, לא ענה בזמן או לא נמצא, שגיאות הגדרות), תעודות (אימות ACME, מגבלות קצב, תעודה שפגה או לא מוכרת), Node.js ו-Python (מודולים חסרים, מגבלת ה-heap, timeouts של Gunicorn) ו-Linux עצמו (ה-OOM killer, דיסק מלא, פורט בשימוש, חיבור שנדחה, שם שלא מתורגם, מערכת קבצים לקריאה בלבד, מגבלת קבצים פתוחים, הרשאות). לכל שגיאה יש הסבר, מה לעשות קודם, התיעוד הרשמי, וה-wizard או הכלי באתר שממשיכים ממנה.
איך זה עובד
- הדביקו את הלוג או בחרו קובץ, עד 8 MiB. הוא נקרא בעמוד הזה ב-worker ברקע, כך שהעמוד נשאר זמין גם בלוג ארוך; שום דבר לא נשלח, לא נשמר ולא מגיע ל-analytics.
- קודם הלוג ממוסך: כתובות IP (חוץ מ-0.0.0.0, loopback ו-netmasks), כתובות אימייל, tokens ומפתחות, סיסמאות ב-URL וערכים של משתנים ששמם נראה כמו סוד. כל מה שמוצג, מועתק, יורד או מועבר לסוכן מגיע מהלוג הממוסך.
- כל שורה מושווית לרשימה קבועה של שגיאות מוכרות, שנכתבו כתבניות שלא יכולות להיתקע על שורה ארוכה או זדונית. ההתאמה הראשונה, הספציפית ביותר, מסבירה את השורה: שורה של nginx שאומרת שפורט בשימוש מוסברת כפורט בשימוש.
- התוצאה מקבצת את השורות לפי שגיאה, עם מספרי השורות, כדי שתמצאו אותן במקור. אותו לוג נותן תמיד אותה תוצאה.
דוגמה
הלוג של stack קטן ב-Compose: מסד הנתונים דוחה את הסיסמה של האפליקציה, האפליקציה מנסה localhost במקום את שירות מסד הנתונים, ואז נגמר לה ה-heap, ו-nginx עונה 502.
db-1 | 2026-10-12 08:14:03.512 UTC [1] LOG: database system is ready to accept connections
db-1 | 2026-10-12 08:14:09.877 UTC [68] FATAL: password authentication failed for user "app"
app-1 | Error: connect ECONNREFUSED 127.0.0.1:5432
app-1 | at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16)
app-1 | notify: sending alert to [email protected]
app-1 | FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
proxy-1 | 2026/10/12 08:15:01 [error] 29#29: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 203.0.113.7, server: example.com, request: "GET / HTTP/1.1", upstream: "http://172.18.0.4:3000/", host: "example.com"
מה הכלי מוצא (ממוסך):
PostgreSQL דחה את הסיסמה
PostgreSQLהשרת בדק את הסיסמה והיא לא תאמה את זו של ה-role. ב-Image הרשמי סיבה נפוצה:
POSTGRES_PASSWORDשונה אחרי שתיקיית הנתונים נוצרה, והוא נקרא רק בעלייה הראשונה.מה לעשות: השתמשו בסיסמה שאיתה נוצרה תיקיית הנתונים, או שנו אותה בתוך מסד הנתונים (
ALTER ROLE <user> PASSWORD '...'). מחיקת ה-volume מאפסת אותה, ומוחקת את הנתונים.2db-1 | 2026-10-12 08:14:09.877 UTC [68] FATAL: password authentication failed for user "app"מקורות: PostgreSQL Docs: Authentication problems · PostgreSQL Docs: The pg_hba.conf file · Docker Official Image: postgres
החיבור נדחה
Linuxהכתובת הושגה אבל אף אחד לא מאזין בפורט הזה: השירות למטה או עוד לא עלה, או שהוא מאזין בפורט או בכתובת אחרים. בתוך קונטיינר,
localhostו-127.0.0.1הם הקונטיינר עצמו, לא המארח ולא שירות אחר.מה לעשות: השתמשו בשם של השירות האחר ב-Compose במקום
localhost, המתינו לו עםhealthcheck, ובדקו באיזה פורט הוא מאזין.3app-1 | Error: connect ECONNREFUSED 127.0.0.1:5432מקורות: Node.js: Common system errors · Docker Docs: Networking in Compose · Docker Docs: Control startup and shutdown order in Compose
Node.js: הגיע למגבלת ה-heap
Node.jsהתהליך השתמש בכל ה-heap של JavaScript ש-V8 מתיר ועצר. המגבלה נקבעת על ידי Node.js, בנפרד ממגבלת הזיכרון של הקונטיינר; גם דליפת זיכרון מגיעה אליה.
מה לעשות: בדקו אם הזיכרון גדל לאורך זמן (דליפה). הגדירו
--max-old-space-size(ב-MiB) מתחת למגבלת הזיכרון של הקונטיינר, למשל דרךNODE_OPTIONS.6app-1 | FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memoryמקורות: Node.js: --max-old-space-size · Docker Docs: Resource constraints, memory
nginx: ה-upstream דחה את החיבור
nginxnginx הגיע לכתובת של ה-upstream אבל אף אחד לא מאזין בפורט הזה: האפליקציה למטה, עולה מחדש, או מאזינה בפורט אחר או רק על
127.0.0.1בתוך הקונטיינר שלה. המבקר מקבל 502.מה לעשות: בדקו שהאפליקציה רצה (
docker compose ps), שהיא מאזינה על0.0.0.0ובפורט שב-proxy_pass, ובדקו אותה מתוך הקונטיינר של ה-proxy.7proxy-1 | 2026/10/12 08:15:01 [error] 29#29: *1 connect() failed (111: Connection refused) while connecting to upstream, client: •••.•••.•••.•••, server: example.com, request: "GET / HTTP/1.1", upstream: "http://•••.•••.•••.•••:3000/", host: "example.com"מקורות: nginx: ngx_http_proxy_module · Docker Docs: Networking in Compose
מגבלות
- הכלי מזהה הודעות מוכרות, לא סיבות: שורה אחת יכולה להיות סימפטום של שגיאה שתוכנה אחרת רשמה קודם. קראו את השורות שמסביב לכל התאמה.
- רק השגיאות שברשימה מזוהות; הודעה שגרסה חדשה ניסחה אחרת עלולה להתפספס עד שהרשימה תתעדכן. זו לא מערכת לניתוח לוגים או לניטור.
- המיסוך מזהה פורמטים נפוצים של כתובות וסודות ויכול לפספס אחרים (שם מארח, מזהה לקוח, סוד בפורמט חריג). קראו את הלוג הממוסך לפני שאתם משתפים אותו.
- שום דבר לא נשלח למודל AI או לשרת: ההסברים הם טקסטים קבועים, זהים לכולם.
מתודולוגיה: איך מחושבים המספרים
מקורות
- Docker Docs: Port publishing and mapping
- ss(8), Linux manual page
- Docker Docs: Linux post-installation steps (manage Docker as a non-root user)
- Docker Docs: Troubleshooting the Docker daemon
- Docker Docs: Multi-platform builds
- Dockerfile reference: CMD
- Dockerfile reference: ENTRYPOINT
- Docker Docs: docker image pull
- Docker Docs: docker login
- Docker Docs: dockerd, daemon configuration file
- Docker Docs: Prune unused Docker objects
- PostgreSQL Docs: Authentication problems
- PostgreSQL Docs: The pg_hba.conf file
- Docker Official Image: postgres
- PostgreSQL Docs: Database roles
- PostgreSQL Docs: Upgrading a PostgreSQL cluster
- PostgreSQL Docs: Connections and authentication (max_connections)
- PostgreSQL Docs: Starting the database server (client connection problems)
- Docker Docs: Control startup and shutdown order in Compose
- MySQL 8.4 Reference Manual: Troubleshooting problems connecting to MySQL
- Docker Official Image: mariadb
- MySQL 8.4 Reference Manual: Can't connect to [local] MySQL server
- MySQL 8.4 Reference Manual: Running multiple MySQL instances on one machine
- nginx: ngx_http_proxy_module
- Docker Docs: Networking in Compose
- nginx: ngx_http_upstream_module
- Caddy Docs: Command line (caddy validate, caddy adapt)
- Caddy Docs: The Caddyfile
- Let's Encrypt: Rate limits
- Let's Encrypt: Challenge types
- Let's Encrypt: Certificate Authority Authorization (CAA)
- Caddy Docs: Automatic HTTPS
- Certbot User Guide
- OpenSSL: openssl-s_client
- update-ca-certificates(8), Debian manual page
- Node.js: NODE_EXTRA_CA_CERTS
- Node.js: Modules, loading from node_modules folders
- npm Docs: npm ci
- Node.js: --max-old-space-size
- Docker Docs: Resource constraints, memory
- Python Docs: ModuleNotFoundError
- pip User Guide: Requirements files
- Gunicorn Docs: Settings, timeout
- Linux kernel: Control Group v2, memory
- df(1), Linux manual page
- errno(3), Linux manual page
- Node.js: Common system errors
- Node.js: DNS, implementation considerations
- resolv.conf(5), Linux manual page
- mount(8), Linux manual page
- Docker Docs: Bind mounts
- getrlimit(2), Linux manual page
- Docker Docs: docker container run, --ulimit
- nginx: Command-line parameters (nginx -t)
קשורים
הצעד הבא
קונטיינר שמופעל מחדש שוב ושוב: מוצאים את הסיבה לפי קוד היציאה
כלי ציבורי חינמי של אנרוק, חברה שבונה תשתיות מחשוב. מה אנרוק בונה