Bir API özelliği, kendi API’nizin karşıladığı istekleri sayar: kaç tane olduğunu, kaçının başarısız olduğunu ve ne kadar sürdüğünü, rota rota. Sunucunuz yanıtladığı her isteği bildirir; Yuva bunları dakika ve saat başına toplar, istek başına satır, başlık, gövde ya da IP adresi saklamaz. Bu sayfa Analitik sayfasının üzerine kuruludur.
API özelliği oluşturun
API özelliği, kind: api olan bir analitik özelliğidir. Alan adı ve izleme betiği yoktur. Sahipler ve yöneticiler
onu analytics:manage kapsamlı bir anahtarla oluşturur:
curl https://support.example.com/v1/analytics/properties \
-H "Authorization: Bearer $YUVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "kind": "api", "name": "Shop API", "domains": [], "timezone": "Europe/Berlin" }'
Yanıt özelliğin id değerini taşır. Özelliğin saat dilimi, sayılarının hangi saat ve günlere göre sayılacağını
belirler; time:minute sorgusunun dakikaları da bu dilimdedir.
Sonra kayıtları gönderecek anahtarı Ayarlar → API anahtarları altında analytics:write kapsamıyla oluşturun ve
sunucuda tutun. Bir üyenin oturumu reddedilir (403 forbidden); bir web sitesi özelliği 422 property_kind
yanıtlar. YUVA_MONITOR=off ile başlatılan sunucuda API özelliği yoktur.
İstek gönderme
Yığınızı seçin. Hepsi aynı kayıtları gönderir; hangisini kullanırsanız kullanın sayılar aynıdır.
- Go:
net/httpiçin ara katman. - Node, Bun ve Deno: srvx, h3, Nitro, Nuxt, Hono, Express, Fastify ve Next.js route handler’ları.
- OpenTelemetry: diğer tüm diller; iki ortam değişkeni, Yuva kodu yok.
- iOS ve Android uygulamaları: uygulamanızın kendi API’nize yaptığı çağrılar, cihazda ölçülür.
- Başka her şey için aşağıdaki curl.
curl ile istek gönderme
Diğer tüm teknolojiler aynı kayıtları gönderir. POST /v1/analytics/properties/{propertyId}/requests 1 ile 1.000
arası kayıt alır ve 202 yanıtlar. Gövde Content-Encoding: gzip ile sıkıştırılabilir.
curl https://support.example.com/v1/analytics/properties/PROPERTY_ID/requests \
-H "Authorization: Bearer $YUVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"records": [{
"method": "GET",
"route": "/users/{id}",
"status": 200,
"duration_us": 18400,
"response_size": 612,
"consumer": "mobile-app",
"environment": "production"
}]
}'
{ "accepted": 1, "errors": [] }
| Alan | |
|---|---|
method |
Zorunlu, 1 ile 20 karakter. RFC 9110 yöntemleri ve PATCH korunur; diğerleri _OTHER sayılır. |
route |
Yönlendiricinin eşleştirdiği kalıp; / ile başlar, en çok 300 karakter, yöntem ve alan adı olmadan. Bunu ya da path verin. |
path |
Yönlendiricinin kalıp bilmediği durumda isteğin yolu. Yalnızca ondan çıkarılan kalıp saklanır. |
status |
Zorunlu, 100 ile 599; yanıt gönderilmediyse 0. |
duration_us |
Zorunlu, mikrosaniye cinsinden süre, en çok 24 saat. |
request_size, response_size |
Gövdelerin bayt sayısı. |
time |
İsteğin başladığı an, RFC 3339. Boşsa şimdi. |
consumer |
En çok 100 karakter; yukarıya bakın. |
api_version, environment, service, release |
Sırasıyla en çok 40, 40, 100 ve 80 karakter. Boş bırakılan environment production olur. |
ip |
Arayanın adresi, yalnızca ülkesini bulmak için. |
sample_rate |
1 ile 10.000: bu kayıt o kadar isteği temsil eder. Yalnızca 1-399 durumu örneklenebilir; sample_rate 1’den büyük ve hata durumlu kayıt reddedilir. |
Rotalar
Bir rota, API’nizin bir bölümünü adlandırır, hiçbir zaman tek bir kaydı; bu yüzden bir kimlik asla kendi başına rota olmaz.
- Gönderdiğiniz rotalar temizlenir. Bir
routeya dapathiçinde kimliğe benzeyen her bölüm{id}olur: sayılar, UUID’ler, tarihler, 16 ya da daha çok karakterlik onaltılık dizeler, en az iki rakam (ya da iki harf büyüklüğü ve bir rakam) içeren 16 ya da daha çok harf, rakam,-ve_dizileri, e-posta biçimindeki değerler ve 40 karakterden uzun her şey. Yönlendirici yer tutucusu gibi başlayan bölümler ({id},:id,*,[id],<id>) olduğu gibi kalır. Yani/users/42ve/users/9f8e7d6c5b4a3210ikisi de/users/{id}sayılır. - Kalıpsız 404 ya da 405
(unmatched)olur. Yalnızcapathveren ve404ya da405ile yanıtlanan kayıt(unmatched)rotasında sayılır; böylece/wp-login.phpyoklayan tarayıcılar rota üretmez. - Rota kuralları. Özelliğin
path_rulesalanı, yukarıdaki temizlikten önce bir rotayı ya da yolu sizin rotanıza eşler. Kural{"pattern": "/legacy/**", "replacement": "/legacy"}biçimindedir:*bir bölümle,**her sayıda bölümle eşleşir, ilk eşleşen kural geçerlidir ve karşılık olduğu gibi kullanılır.PATCH /v1/analytics/properties/{propertyId}ile ayarlanır. - Sınırlar. Bir özellik en çok 1.000 rota, 10.000 tüketici, 50 API sürümü ve 20 ortam; bir çalışma alanı 100
servis sayar. Sınırdan sonra yeni değerler
(other)olarak sayılır ve sorgu yanıtı sınırımeta.caps_reachediçinde listeler.
Rotaları listeleme ve gizleme
GET /v1/analytics/properties/{propertyId}/routes (kapsam analytics:read), özelliğin saydığı her rotayı kalıba
göre listeler; her biri id’si, yoldan inferred (çıkarılmış) olup olmadığı, hidden (gizli) olup olmadığı ve ilk
ile son görülme zamanıyla gelir. (unmatched) listededir; (other) da property’nin saydığı ilk rotadan itibaren
listededir ve bir rota onun altında sayılana kadar isteği yoktur.
Yalnızca gürültü ekleyen bir rota, örneğin yük dengeleyicinizin çağırdığı sağlık denetimi, gizlenebilir:
curl -X PATCH https://support.example.com/v1/analytics/properties/PROPERTY_ID/routes/ROUTE_ID \
-H "Authorization: Bearer $YUVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "hidden": true }'
Gizleme, rotayı o andan itibaren her dataset: api yanıtından çıkarır; satırlardan da toplamlardan da, ve o rotaya
göre filtre hiçbir şeyle eşleşmez. İstekleri yine sayılır ve hiçbir şey silinmez: "hidden": false rotayı tüm
sayılarıyla geri getirir. Gizlemek analytics:manage kapsamı ister ve sahipler ile yöneticiler içindir. Bir yolu
başka bir rota altında saymak için rota kuralı kullanın.
Ne kaydedilir
Dakika, saat ve gün başına kaydedilenler: istek sayısı, durumu 500-599 ya da 0 olanlar (hatalar) ve 400-499
olanlar (istemci hataları), p50, p95 ve p99’u veren süre dağılımı; rota, yöntem, durum ve ortama göre. Servis, API
sürümü ve tüketici bunlarla birlikte saklanır.
Hiçbir zaman kaydedilmeyen ve API’nin kabul etmediği şeyler: istek ya da yanıt gövdeleri, başlıklar, sorgu
dizeleri, parçalar (fragment) ve user agent’lar. Postgres’te istek başına satır yoktur. ip kısaltılır (IPv4
/24, IPv6 /48), ülkesi bulunur ve aynı çağrıda atılır; hiçbir adres saklanmaz. Go ara katmanı adresi yalnızca
Country: true ile gönderir.
Sayıları okuma
Panelde özelliğin Genel bakış sayfası zaman içinde istekleri, hata oranlarını ve gecikmeyi, Rotalar ise rotaları trafikleri, hataları ve gecikmeleriyle gösterir.
Aynı sayılar analitik sorgusundan gelir: POST /v1/analytics/properties/{propertyId}/query, "dataset": "api"
ile (kapsam analytics:read):
curl https://support.example.com/v1/analytics/properties/PROPERTY_ID/query \
-H "Authorization: Bearer $YUVA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"dataset": "api",
"metrics": ["requests", "error_rate", "p95"],
"dimensions": ["route"],
"range": { "period": "24h" },
"limit": 20
}'
| Metrikler | requests, requests_per_minute, errors, error_rate, client_errors, client_error_rate, p50, p95, p99, avg_duration. Oranlar yüzde, süreler milisaniyedir. Yüzdelikler %1,1 doğrulukla verilir. |
| Boyutlar ve filtreler | route, method, status, status_class (2xx, 3xx, 4xx, 5xx; 0 durumu için none), environment; en çok iki boyut, biri zaman aralığı olabilir. |
| Zaman aralıkları | time:minute, time:hour, time:day. Dakikalar ve saatler özelliğin yerel saatindedir. |
| Aralık | Geçerli dakikaya kadar 15m, 1h, 6h, 24h; ya da today, 7d, 30d ve diğer dönemler; ya da from ve to. |
time:minute, YUVA_MONITOR_MINUTE_DAYS gün (varsayılan 8) geriye gider ve en çok
1.440 dakika döndürür; daha uzun ya da daha eski aralık 422 range_too_large ile reddedilir. Saatlik sayılar
özelliğin monitor_hour_days değeri kadar (varsayılan 90, 7 ile 400 arası), günlük sayılar özelliğin
retention_months değeri kadar saklanır. sample_rate 1’den büyük gönderilen kayıtlara dayanan yanıtta
meta.estimated: true bulunur. Bir web sitesi özelliğinde dataset: api ve bir API özelliğinde bu alanı
vermeyen sorgu 422 property_kind yanıtlar. API sorgusu goal_id, prop, segment_id, compare ya da
insights almaz.
Bir kayıt sorguda yaklaşık 15 saniye içinde görünür.
Ne döner
İstek geçerliyse, kayıtlara ne olduğundan bağımsız olarak yanıt 202’dir.
errors, geçersiz diye dışarıda bırakılan kayıtları, her birirecordsiçindekiindex’i ve birdetailile listeler. Diğerleri alınır.- Alınır ama sayılmaz: 72 saatten eski kayıtlar; özellik ya da anahtar için
YUVA_MONITOR_RECORDS_PER_MINUTEdeğerini aşan kayıtlar; çalışma alanının aylık sınırını aşan kayıtlar. - İsteğin tamamı reddedilir: yukarıdaki biçimi bozan gövde (
400), eksik ya da yanlış anahtar (401),analytics:writekapsamı olmayan anahtar ya da üye oturumu (403), bilinmeyen özellik (404), web sitesi özelliği (422) ve gzip dışındaki kodlama (415) için. İzin verdiği kadar açık satır tutan bir sunucuRetry-Afterile503yanıtlar: o süreden sonra grubu yeniden gönderin.
Aylık sınır, kayıtların temsil ettiği istekleri değil, alınan kayıtları sayar: örneklenmiş bir kayıt sample_rate
değeri ne olursa olsun bir kayıttır. Sınırı aşan bir grup sınıra kadar alınır: hâlâ sığan kayıtlar sayılır,
kalanlar sınır aşıldığı için atılır. Bir ayın kayıtları sınıra ulaştığında çalışma alanının sahipleri ayda bir kez
e-posta alır. GET /v1/analytics/properties, ayın requests ve requests_limit değerlerini usage altında,
sınıra ulaşıldığında da requests_limit_reached_at değerini gösterir.
Saat dilimini değiştirme
Bir API özelliğinin timezone değerini değiştirmek (PATCH /v1/analytics/properties/{propertyId}) bir günü ikiye
bölmez. Özellik, eski dilimin bir sonraki yerel gece yarısına kadar eski dilimde saymaya devam eder, ondan sonra
yenisinde. O ana kadar özellik, yeni dilimin başladığı an olan timezone_applies_at değerini taşır. Daha önce
sayılmış günler sayıldıkları dilimde kalır.