CloudDevOps

Как мониторить свои Cloudflare Workers с помощью Vigilmon

·MAGMA

Почему нужно мониторить Cloudflare Workers

Cloudflare Workers позволяют запускать ваш код на краевых серверах сети Cloudflare, обеспечивая минимальное время отклика и высокую производительность. Однако даже при высокой надежности самой инфраструктуры могут возникать проблемы с вашим приложением:

  • Runtime ошибки: Необработанные исключения приводят к падению вашего воркера.
  • Превышение лимитов времени выполнения: Бесплатные аккаунты имеют ограничение в 10 мс, платные – до 50 мс; превышение этих значений приводит к ошибкам.
  • Проблемы с памятью: Лимит памяти составляет 128 МБ, его превышение также вызывает сбои.
  • Сбои хранилищ данных: Проблемы с доступом к KV, D1 или R2 могут привести к отказу работы приложения.
  • Ошибка деплоя: Неправильная версия кода может быть развернута незаметно.
  • Несоответствие маршрутов: Новые маршруты не соответствуют ожидаемым шаблонам.
  • Отказ внешних API: Если ваше приложение зависит от сторонних сервисов, их недоступность приведет к сбоям.

Настройка точки проверки здоровья

Для мониторинга состояния своего воркера рекомендуется создать специальный маршрут /health, который будет проверять доступность основных компонентов:

// worker.js
export default {
    async fetch(request, env, ctx) {
        const url = new URL(request.url);
        
        // Проверка работоспособности
        if (url.pathname === '/health') {
            return handleHealthCheck(env);
        }
        
        // Обычная логика обработки запросов...
        return handleRequest(request, env, ctx);
    }
};

async function handleHealthCheck(env) {
    const checks = {};
    const start = Date.now();
    
    // Проверяем доступность KV (если используется)
    if (env.MY_KV) {
        try {
            await env.MY_KV.put('_health_check', 'ok', { expirationTtl: 60 });
            const val = await env.MY_KV.get('_health_check');
            checks.kv = val === 'ok' ? 'ok' : 'error';
        } catch (e) {
            checks.kv = 'error';
        }
    }
    
    // Проверяем базу данных D1 (если используется)
    if (env.MY_DB) {
        try {
            await env.MY_DB.prepare('SELECT 1').first();
            checks.d1 = 'ok';
        } catch (e) {
            checks.d1 = 'error';
        }
    }
    
    const allOk = Object.values(checks).every(s => s === 'ok');
    
    return new Response(JSON.stringify({ status: allOk ? 'OK' : 'ERROR', details: checks }), {
        headers: {'Content-Type': 'application/json'}
    });
}
← Вернуться к блогу
Мониторинг Cloudflare Workers с Vigilmon — MAGMA