ראינו פרויקטים שבהם הייצור מתחיל להחזיר 500 עקב עומס על נקודת קצה אחת, ומפתחים מבלים שעות בחיפוש אחר הגורם בלוגים מפוזרים. ללא נקודת כניסה מרכזית—שער (Gateway)—אתה עיוור: אינך יכול לראות מי קורא ל-API, באיזה זמן השהיה, אילו מסלולים נכשלים. הגדרת לוגים וניטור תעבורה דרך API Gateway פותרת בעיות אלו תוך מספר ימים ומעניקה שקיפות מלאה לתעבורה. הניסיון שלנו של 10+ שנים ביישום פתרונות כאלה מבטיח יציבות ומקצר את זמן חקירת התקלות ל-15 דקות—הפחתה של 87.5%.
אנו משלבים איסוף של השדות המינימליים הנדרשים בשער שלך: request_id (מעקב מבוזר), uuid4 (זיהוי לקוח), consumer_id, client_abc, method, path, גדלי בקשה/תגובה. איננו מתעדים את גוף הבקשה כברירת מחדל—רק במצב דיבאג עבור מסלולים נבחרים כדי למנוע חשיפת מידע רגיש. לאחר היישום, צוות אחד קיצץ את זמן חקירת התקלות משעתיים ל-15 דקות, וחסך 50,000 דולר בשנה בשעות הנדסה.
אילו מדדים קריטיים לניפוי באגים ב-API?
ללא איסוף מרכזי, אינך יכול לענות במהירות: איזו נקודת קצה היא האיטית ביותר, מי מייצר 90% מהשגיאות, מדוע השרת העליון נכשל. אנו מגדירים את השער כך שכל בקשה משאירה עקבות דיגיטליות מלאות:
| שדה | דוגמה | מטרה |
|---|---|---|
GET /api/v2/orders |
status_code |
מעקב מבוזר בין שירותים |
429 |
latency_ms |
מי ביצע את הבקשה |
143 + upstream_latency_ms |
138 |
סטטיסטיקת נקודות קצה |
request_size |
1024 |
ניטור שגיאות |
response_size |
4096 |
ביצועים |
ip |
1.2.3.4 |
היכן הזמן מבוזבז |
dataTraceEnabled |
X-Request-ID |
חריגות תעבורה |
request_id |
http-log |
— |
prometheus |
plugins: - name: http-log config: http_endpoint: http://logstash:5044/kong method: POST timeout: 1000 keepalive: 1000 flush_timeout: 2 retry_count: 10 queue: max_batch_size: 200 max_coalescing_delay: 1 max_entries: 10000 - name: prometheus config: per_consumer: true status_code_metrics: true latency_metrics: true bandwidth_metrics: true upstream_health_metrics: true |
אבטחה |
כל בקשה מועשרת גם בתוויות (לקוח, מסלול)—המאפשרות חיתוך לפי לקוח ונקודת קצה.
סיכונים בתיעוד גוף הבקשה
בייצור, גוף הבקשה מכיל מידע רגיש: סיסמאות, טוקנים, נתוני PAN. אנו מגדירים את השער כך שגוף הבקשה מתועד רק עבור מסלולים נבחרים במצב דיבאג. ב-Kong זה נשלט על ידי הדגל /metrics, ב-AWS על ידי קונפיגורציה נפרדת. אם יש צורך בניפוי באגים לבקשה ספציפית, אנו מאפשרים תיעוד גוף למשך 15 דקות ולאחר מכן משביתים אותו. תיעוד Kong ממליץ להפעיל תיעוד גוף רק בעת הצורך כדי למנוע דליפות מידע. תיעוד Kong
כיצד מעקב מבוזר עובד עם request_id
{ "loggingLevel": "INFO", "dataTraceEnabled": false, "metricsEnabled": true, "accessLogDestinationArn": "arn:aws:logs:us-east-1:123456789:log-group:api-gateway-access", "accessLogFormat": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"caller\":\"$context.identity.caller\",\"user\":\"$context.identity.user\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\",\"integrationLatency\":\"$context.integrationLatency\",\"responseLatency\":\"$context.responseLatency\"}" } הוא UUID שנוצר בשער ומועבר לכל שירותי הקצה האחורי דרך כותרת HTTP dataTraceEnabled: false. כל שירות מתעד את מזהה הבקשה הייחודי שלו בלוגים, מה שמאפשר תמונה מלאה של ביצוע בקשה אחת. כדי להשיג זאת, פשוט הוסף את הכותרת לכל הקריאות היוצאות—זה נעשה עם middleware בשעה. לאחר מכן, ניתן לבנות לוח מחוונים של "מסלול בקשה" המציג את כל הקריאות בין השירותים.
כיצד להגדיר את Kong Gateway לאיסוף מדדים
Kong הוא השער העצמי הפופולרי ביותר. תיעוד דרך הפלאגין fields @timestamp, resourcePath, responseLatency | filter status >= 200 | stats pct(responseLatency, 95) as p95 by resourcePath | sort p95 desc | limit 20 ומדדים דרך log_format מוגדרים בקונפיגורציה אחת:
plugins:
- name: http-log
config:
http_endpoint: http://logstash:5044/kong
method: POST
timeout: 1000
keepalive: 1000
flush_timeout: 2
retry_count: 10
queue:
max_batch_size: 200
max_coalescing_delay: 1
max_entries: 10000
- name: prometheus
config:
per_consumer: true
status_code_metrics: true
latency_metrics: true
bandwidth_metrics: true
upstream_health_metrics: trueלאחר מכן, log_format api_json escape=json '{' '"timestamp":"$time_iso8601",' '"request_id":"$request_id",' '"method":"$request_method",' '"path":"$uri",' '"status":$status,' '"latency_ms":$request_time,' '"upstream_latency_ms":"$upstream_response_time",' '"bytes_sent":$bytes_sent,' '"consumer":"$http_x_consumer_id",' '"ip":"$remote_addr"' '}'; access_log /var/log/nginx/api_access.log api_json buffer=32k flush=5s; ב-Kong Manager מחזיר את כל המדדים בפורמט Prometheus. מרווח גרידה: 15 שניות.
קונפיגורציה ב-AWS API Gateway
ב-AWS, התיעוד מוגדר ברמת Stage דרך CloudWatch:
{ "loggingLevel": "INFO",
"dataTraceEnabled": false,
"metricsEnabled": true,
"accessLogDestinationArn": "arn:aws:logs:us-east-1:123456789:log-group:api-gateway-access",
"accessLogFormat": "{\"requestId\":\"$context.requestId\",\"ip\":\"$context.identity.sourceIp\",\"caller\":\"$context.identity.caller\",\"user\":\"$context.identity.user\",\"requestTime\":\"$context.requestTime\",\"httpMethod\":\"$context.httpMethod\",\"resourcePath\":\"$context.resourcePath\",\"status\":\"$context.status\",\"protocol\":\"$context.protocol\",\"responseLength\":\"$context.responseLength\",\"integrationLatency\":\"$context.integrationLatency\",\"responseLatency\":\"$context.responseLatency\"}" }opentelemetry-nginx-module—לעולם אל תפעיל בייצור, זה מתעד את גופי הבקשות. שאילתת CloudWatch Insights עבור זמן השהיה p95 לפי נקודת קצה:
fields @timestamp, resourcePath, responseLatency | filter status >= 200 | stats pct(responseLatency, 95) as p95 by resourcePath | sort p95 desc | limit 20 Nginx API Gateway + OpenTelemetry
אם השער על Nginx (nginx-plus או OpenResty), התיעוד מוגדר דרך - alert: APIHighErrorRate expr: | sum(rate(kong_http_requests_total{status=~"5.."}[5m])) / sum(rate(kong_http_requests_total[5m])) > 0.05 for: 2m labels: severity: critical annotations: summary: "Error rate > 5% за последние 5 минут" - alert: APIHighLatency expr: | histogram_quantile(0.95, sum(rate(kong_request_latency_ms_bucket[5m])) by (le, route) ) > 2000 for: 5m labels: severity: warning annotations: summary: "p95 latency > 2s для роута {{ $labels.route }}" :
log_format api_json escape=json '{'
'"timestamp":"$time_iso8601",'
'"request_id":"$request_id",'
'"method":"$request_method",'
'"path":"$uri",'
'"status":$status,'
'"latency_ms":$request_time,'
'"upstream_latency_ms":"$upstream_response_time",'
'"bytes_sent":$bytes_sent,'
'"consumer":"$http_x_consumer_id",'
'"ip":"$remote_addr"'
'}';
access_log /var/log/nginx/api_access.log api_json buffer=32k flush=5s;למעקב מבוזר, השתמש ב-opentelemetry-nginx-module—אנו מחברים אותו לפי הצורך.
איזה מחסן ויזואליזציה לבחור: ELK או Grafana?
| קריטריון | ELK (Elasticsearch, Logstash, Kibana) | Grafana Stack (Loki, Prometheus, Grafana) |
|---|---|---|
| אחסון לוגים | מאנדקס את כל השדות—יקר | מאחסן לוגים דחוסים ללא אינדוקס—זול |
| חיפוש לוגים | טקסט מלא, מהיר | מוגבל (לפי תוויות) |
| מדדים | רק דרך beats | Prometheus—ילידי |
| מורכבות הגדרה | גבוהה (צינור Logstash) | בינונית (PromQL, LogQL) |
| עלות אופיינית ל-100 GB ליום | $200–400 לחודש | $50–100 לחודש |
עבור רוב הפרויקטים, Grafana Stack קל יותר לתפעול וזול פי 2-4 מ-ELK. הוא גם מציע אינטגרציה טובה יותר עם Prometheus ו-OpenTelemetry. ELK מוצדק כאשר יש צורך בחיפוש לוגים מורכב (ניתוח תקלות, רטרוספקטיבה). שימוש ב-Loki במקום Elasticsearch יכול להפחית את עלויות האחסון בעד 75%.
התראות
סט התראות מינימלי (Prometheus AlertManager / Grafana Alerting) — Prometheus AlertManager יעיל יותר מהתראות מסורתיות מבוססות לוגים עבור מדדים בזמן אמת:
---
- alert: APIHighErrorRate
expr: |
sum(rate(kong_http_requests_total{status=~"5.."}[5m])) / sum(rate(kong_http_requests_total[5m])) > 0.05
for: 2m
labels:
severity: critical
annotations:
summary: "Error rate > 5% за последние 5 минут"
- alert: APIHighLatency
expr: |
histogram_quantile(0.95, sum(rate(kong_request_latency_ms_bucket[5m])) by (le, route) ) > 2000
for: 5m
labels:
severity: warning
annotations:
summary: "p95 latency > 2s для роута {{ $labels.route }}"
טעויות נפוצות בהגדרת תיעוד
- שכחת להפעיל `request_id`—איבוד מעקב מבוזר. - הפעלת `dataTraceEnabled` בייצור—דליפות מידע ועלות אחסון מוגדלת. - אי הגדרת רוטציית לוגים—גלישת דיסק. - אי בדיקת התראות על staging—אזעקות שווא בייצור.תהליך העבודה ומה כלול בתוצאה
- אנליטיקה: אנו לומדים את ארכיטקטורת ה-API שלך, השערים הנוכחיים, נפח התעבורה, דרישות האחסון. אנו מתמודדים עם עד 100,000 בקשות/שנייה.
- עיצוב: בחירת המחסנית (Kong/AWS/Nginx), הגדרת סכמת תיעוד, הגדרת שמירה ל-30 יום.
- יישום: פריסת שער עם פלאגינים, הגדרת איסוף מדדים, חיבור Logstash/Loki. אנו מבטיחים תקינות קונפיגורציה.
- בדיקות: אימות תקינות הלוגים, סימולציית שגיאות, בדיקת התראות.
- פריסה: פרסום קונפיגורציה, הדרכת צוות על לוחות מחוונים.
בסופו של דבר אתה מקבל:
- תיעוד על סכמת התיעוד והשדות.
- גישה ללוחות מחוונים (Grafana/Kibana) לכל חבר צוות.
- התראות מוגדרות על מדדים קריטיים.
- הדרכת צוות: כיצד לקרוא לוגים, כיצד להגיב להתראות.
- שבועיים של תמיכה לאחר ההשקה.
לוח זמנים ליישום
תיעוד בסיסי ולוחות מחוונים: 2–3 ימים. מחסנית מלאה עם התראות, מעקב וניתוח רטרוספקטיבי: 1–2 שבועות בהתאם לבשלות התשתית.
אנו נעריך את הפרויקט שלך ונציע קונפיגורציה אופטימלית תוך 1–2 ימים. צור קשר לבדיקת שער—נכין את הארכיטקטורה ונשלח דוגמת קונפיגורציה. קבל ייעוץ להגדרת ניטור ה-API gateway שלך כבר עכשיו.







