← Cloudflare Workers / workers / observability / logs
Workers Logs
Workers Logs vám umožňuje automaticky shromažďovat, ukládat, filtrovat a analyzovat data protokolů generovaná Cloudflare Workers. Data se zapisují do vašeho účtu Cloudflare a můžete je procházet v dashboardu u každého ze svých Workers. Všechny nově vytvořené Workers mají ve výchozím stavu zapnuté nastavení observability.
Protokoly zahrnují logy volání, vlastní protokoly, chyby a nezachycené výjimky.
Chcete-li odesílat protokoly třetí straně, použijte Export OpenTelemetry (doporučeno), Workers Logpush, nebo Tail Workers.
Povolení Workers Logs
Aby Worker zapisoval logy do Workers Logs, musíte přidat nastavení observability. Přidejte do souboru Wrangler svého Workeru následující nastavení a Worker znovu nasaďte.
{
"observability": {
"enabled": true,
"head_sampling_rate": 1 // optional. default = 1.
}
}[observability]
enabled = true
head_sampling_rate = 1Head-based vzorkování umožňuje nastavit procento požadavků Workers, které se zaznamenávají do protokolu.
Povolení s prostředími
Prostředí umožňují nasadit stejnou aplikaci Worker s různými konfiguracemi. Můžete například chtít nakonfigurovat jiný head_sampling_rate do staging a produkce. Pro konfiguraci observability pro prostředí s názvem staging: 1. Přidejte následující konfiguraci pod [env.staging]
{
"env": {
"staging": {
"observability": {
"enabled": true,
"head_sampling_rate": 1 // optional
}
}
}
}[env.staging.observability]
enabled = true
head_sampling_rate = 1- Nasaďte svůj Worker pomocí
npx wrangler deploy -e staging - Kroky 1 a 2 zopakujte pro každé prostředí.
Zobrazit protokoly z dashboardu
Přístup k logům Workeru z Cloudflare dashboardu:
-
V dashboardu Cloudflare přejděte na Workers & Pages stránce.
Přejděte na Workers & Pages ↗ -
V Přehled, vyberte svůj Worker.
-
Vyberte Observabilita.
Osvědčené postupy
Protokolování strukturovaných objektů JSON
Abyste ze služby Workers Logs vytěžili maximum, doporučujeme logovat ve formátu JSON. Workers Logs automaticky extrahuje pole a inteligentně je indexuje v databázi. Výhoda této techniky strukturovaného logování spočívá v tom, že umožňuje snadno segmentovat data podle libovolné dimenze u polí s neomezenou kardinalitou. Zvažte následující scénáře:
| Scénář | Kód pro protokolování | Protokol událostí (částečný) |
|---|---|---|
| 1 | console.log("user_id: " + 123) |
{message: "user_id: 123"} |
| 2 | console.log({user_id: 123}) |
{user_id: 123} |
| 3 | console.log({user_id: 123, user_email: "[email protected]"}) |
{user_id: 123, user_email: "[email protected]"} |
Rozdíl mezi těmito příklady spočívá ve způsobu indexování logů pro rychlejší dotazy. Ve scénáři 1 user_id je vložen do zprávy. Chcete-li najít všechny protokoly týkající se konkrétního user_id, museli byste spustit textové porovnání. Ve scénářích 2 a 3 lze protokoly filtrovat podle klíčů user_id a user_email.
Funkce
Invocation Logs
Každé volání Workers vrátí jeden invocation log, který obsahuje podrobnosti, jako je Request, Response a související metadata. Tyto invocation logy lze identifikovat podle pole $cloudflare.$metadata.type = "cf-worker-event". Každý protokol volání je obohacen o informace, které má Cloudflare k dispozici v kontextu daného volání.
V uživatelském rozhraní Workers Logs se protokoly zobrazují s lokalizovaným časovým razítkem a zprávou. Obsah zprávy závisí na obslužné rutině vyvolání. Požadavky Fetch mají například zprávu popisující metodu a URL požadavku, zatímco události cron jsou uvedeny jako cron. Níže je uveden seznam obslužných rutin vyvolání spolu s jejich zprávami vyvolání.
Invocation logs můžete ve wrangler zakázat přidáním invocation_logs = false konfigurace.
{
"observability": {
"logs": {
"invocation_logs": false
}
}
}[observability.logs]
invocation_logs = false| Invocation Handler | Invocation Message |
|---|---|
| Alarm | <Scheduled Time> |
| <Email Recipient> | |
| Fetch | <Method> <URL> |
| Queue | <Queue Name> |
| Cron | <UNIX-cron schedule> |
| Tail | tail |
| RPC | <RPC method> |
| WebSocket | <WebSocket Event Type> |
Vlastní protokoly
Ve výchozím nastavení Worker vygeneruje logy volání obsahující podrobnosti o požadavku, odpovědi a souvisejících metadatech.
V kódu můžete také přidávat vlastní logy na libovolném místě. Jakýkoli console.log příkazy ve vašem Workeru budou vidět ve Workers Logs. Následující příklad ukazuje vlastní console.log v rámci obslužné rutiny požadavků Workeru.
export default {
async fetch(request) {
const { cf } = request;
const { city, country } = cf;
console.log(`Request came from city: ${city} in country: ${country}`);
return new Response("Hello worker!", {
headers: { "content-type": "text/plain" },
});
},
};addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event.request));
});
/**
* Respond with hello worker text
* @param {Request} request
*/
async function handleRequest(request) {
const { cf } = request;
const { city, country } = cf;
console.log(`Request came from city: ${city} in country: ${country}`);
return new Response("Hello worker!", {
headers: { "content-type": "text/plain" },
});
}Po nasazení výše uvedeného kódu zobrazte protokoly Workeru v dashboard nebo s logy v reálném čase.
Head-based vzorkování
Head-based vzorkování vám umožňuje logovat procento příchozích požadavků na váš Cloudflare Worker. Zejména u aplikací s vysokým provozem tak snížíte objem logů a náklady, a zároveň získáte smysluplný přehled o výkonu své aplikace. Nastavením míry head-based vzorkování určíte, jaké procento požadavků se bude logovat. V rámci kontextu požadavku se sbírají všechny logy.
Chcete-li zapnout head-based vzorkování, nastavte head_sampling_rate v rámci konfigurace observability. Platný rozsah je od 0 do 1, kde 0 znamená, že se nezaznamená žádný požadavek ze sta, a 1 znamená, že se zaznamená každý požadavek. Pokud head_sampling_rate není zadáno, nastaví se výchozí hodnota 1 (100%). V následujícím příkladu head_sampling_rate je nastaveno na hodnotu 0.01, což znamená, že se zaznamená jeden z každých sto požadavků.
{
"observability": {
"enabled": true,
"head_sampling_rate": 0.01 // 1% sampling rate
}
}[observability]
enabled = true
head_sampling_rate = 0.01Limity
| Popis | Limit |
|---|---|
| Maximální doba uchovávání protokolů | 7 dní |
| Maximální počet protokolů na účet za den1 | 5 miliard |
| Maximální velikost protokolu2 | 256 KB |
1 Denní limit je 5 miliard logů na účet za den. Po překročení tohoto limitu se po zbytek dne použije 1% vzorkování typu head-based.
2 Jeden log má maximální velikost 256
KB. Logy přesahující tuto velikost budou
zkráceny a pole logu $cloudflare.truncated pole bude nastaveno na true.
Ceny
Workers Logs je součástí plánů Free i Paid Plány Workers.
| Log Events Written | Uchování | |
|---|---|---|
| Workers Free | 200,000 za den | 3 dny |
| Workers Paid | 20 milionů v ceně za měsíc +$0.60 za každý další milion |
7 dní |
Příklady
Příklad 1
Worker obsluhuje 15 milionů požadavků za měsíc. Každý požadavek vygeneruje 1 log vyvolání a 1 console.log. head_sampling_rate je nastavena na 1.
| Měsíční náklady | Vzorec | |
|---|---|---|
| Protokoly | $6.00 | ((15,000,000 requests per month * 2 logs per request * 100% sample) - 20,000,000 included logs) / 1,000,000 * $0.60 |
| Celkem | $6.00 |
Příklad 2
Worker obsluhuje 1 miliardu požadavků za měsíc. Každý požadavek vygeneruje 1 log vyvolání a 1 console.log. head_sampling_rate je nastavena na 0.1.
| Měsíční náklady | Vzorec | |
|---|---|---|
| Protokoly | $108.00 | ((1,000,000,000 requests per month * 2 logs per request * 10% sample) - 20,000,000 included logs) / 1,000,000 * $0.60 |
| Celkem | $108.00 |