← Cloudflare Workers / workers / observability / logs
Tail Workers
Tail Worker получает информацию о выполнении других Workers (известных как producer Workers), например коды состояния HTTP, данные, переданные в console.log() или необработанные исключения. Tail Workers может обрабатывать логи для оповещений, отладки или аналитики.
Tail Workers доступны всем клиентам с тарифами Workers Paid и Enterprise. Оплата Tail Workers рассчитывается по Процессорное время, а не по количеству запросов.
Tail Worker автоматически вызывается после выполнения producer Worker (Worker, за которым следит Tail Worker), содержащего логику приложения. Он фиксирует события после завершения работы producer Worker. События на протяжении всего жизненного цикла запроса, включая возможные подзапросы через Service Bindings и Dynamic Dispatch, будет включён. Вы можете фильтровать данные, изменять их формат и отправлять события на любую конечную точку HTTP. Для быстрой отладки Tail Workers можно использовать для отправки логов в KV или к любой базе данных.
Настройте Tail Workers
Чтобы настроить Tail Worker:
- Создайте Worker чтобы использовать его в качестве Tail Worker.
- Добавьте
tail()обработчик в ваш Worker.tail()обработчик вызывается каждый раз, когда вызывается Worker-производитель, к которому подключен Tail Worker. Следующий код Worker представляет собой Tail Worker, который отправляет свои данные на HTTP-эндпоинт:
export default {
async tail(events) {
fetch("https://example.com/endpoint", {
method: "POST",
body: JSON.stringify(events),
});
},
};Следующий код Worker показывает пример того, что events объект может выглядеть так:
[
{
"scriptName": "Example script",
"outcome": "exception",
"eventTimestamp": 1587058642005,
"event": {
"request": {
"url": "https://example.com/some/requested/url",
"method": "GET",
"headers": {
"cf-ray": "57d55f210d7b95f3",
"x-custom-header-name": "my-header-value"
},
"cf": {
"colo": "SJC"
}
}
},
"logs": [
{
"message": ["string passed to console.log()"],
"level": "log",
"timestamp": 1587058642005
}
],
"exceptions": [
{
"name": "Error",
"message": "Threw a sample exception",
"timestamp": 1587058642005
}
],
"diagnosticsChannelEvents": [
{
"channel": "foo",
"message": "The diagnostic channel message",
"timestamp": 1587058642005
}
]
}
]- Добавьте следующее в файл Wrangler для producer Worker:
{
"tail_consumers": [
{
"service": "<TAIL_WORKER_NAME>"
}
]
}[[tail_consumers]]
service = "<TAIL_WORKER_NAME>"Используйте Analytics Engine для агрегированных метрик
Если вам нужна агрегированная аналитика, а не отдельные события журнала, рассмотрите запись в Workers Analytics Engine из Tail Worker. Analytics Engine оптимизирован для данных временных рядов с высокой кардинальностью, которые можно запрашивать с помощью SQL.
Например, с помощью Tail Worker можно подсчитывать ошибки по эндпоинтам, отслеживать время отклика по клиентам или собирать метрики использования, а затем записывать эти агрегированные данные в Analytics Engine для запросов и визуализации.
export default {
async tail(events, env) {
for (const event of events) {
env.ANALYTICS.writeDataPoint({
blobs: [event.scriptName, event.outcome],
doubles: [1],
indexes: [event.event?.request?.cf?.colo ?? "unknown"],
});
}
},
};См. документация Analytics Engine с подробностями о записи и запросах к данным.
Дополнительные материалы
tail()Документация по Handler API: узнайте, как настроитьtail()обработчик в вашем Worker.- Analytics Engine - Записывайте собственную аналитику из вашего Worker для запросов временных рядов с высокой кардинальностью.
- Ошибки и исключения - Ознакомьтесь с распространёнными ошибками Workers.
- Локальная разработка - Разрабатывайте и тестируйте Workers локально.
- Source maps и трассировки стека - Узнайте, как включить source maps и генерировать трассировки стека для Workers.