Alerting системы

Alerting система в контексте Lighthouse представляет собой механизм мониторинга и уведомления о событиях, происходящих в приложении или на веб-странице, с целью своевременного реагирования на проблемы производительности, доступности или других критических показателей. Lighthouse предоставляет API для интеграции с внешними системами оповещения и позволяет настраивать детальные правила срабатывания алертов.


Настройка конфигурации Alerting

Lighthouse использует объект конфигурации для управления поведением алертов. Основные поля конфигурации:

const alertConfig = {
    thresholds: {
        performance: 0.9,
        accessibility: 0.95,
        seo: 0.8
    },
    notifications: {
        email: ['admin@example.com'],
        webhook: 'https://example.com/alert'
    },
    frequency: 'daily'
};

Ключевые параметры:

  • thresholds — пороговые значения метрик Lighthouse, при превышении которых будет срабатывать алерт.
  • notifications — список каналов уведомлений, может включать email, вебхуки, Slack или другие интеграции.
  • frequency — частота проверки и отправки уведомлений (например, immediate, hourly, daily).

Создание кастомных алертов

Для гибкой настройки алертов можно использовать JavaScript API Lighthouse. Например, создание алерта при падении показателя производительности ниже 80%:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

async function runLighthouse(url) {
    const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
    const options = {port: chrome.port, output: 'json'};
    const runnerResult = await lighthouse(url, options);

    const performanceScore = runnerResult.lhr.categories.performance.score;
    
    if (performanceScore < 0.8) {
        sendAlert(`Performance score dropped below 80%: ${performanceScore}`);
    }

    await chrome.kill();
}

function sendAlert(message) {
    console.log('ALERT:', message);
    // интеграция с внешними системами уведомлений
}

Особенности подхода:

  • Lighthouse запускается в headless-режиме через Chrome Launcher.
  • Результат анализа (runnerResult) содержит детальные метрики всех категорий.
  • Алерт срабатывает при сравнении текущей метрики с заданным порогом.

Интеграция с внешними системами уведомлений

Alerting система Lighthouse может быть связана с любыми внешними сервисами через вебхуки или API. Например, отправка уведомлений в Slack:

const fetch = require('node-fetch');

function sendSlackAlert(message) {
    const payload = {text: message};
    fetch('https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX', {
        method: 'POST',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify(payload)
    });
}
  • Webhook URL — уникальный адрес для приема уведомлений.
  • Payload — структура данных, отправляемая в внешнюю систему, обычно JSON с ключом text.

Автоматизация регулярного мониторинга

Для регулярного анализа веб-страниц и автоматической генерации алертов используется планировщик задач (cron или node-schedule). Пример с node-schedule:

const schedule = require('node-schedule');

schedule.scheduleJob('0 * * * *', () => {  // запуск каждый час
    runLighthouse('https://example.com');
});
  • Выражение '0 * * * *' соответствует ежечасному запуску.
  • Такой подход позволяет интегрировать Lighthouse с системами DevOps и CI/CD для непрерывного мониторинга качества сайта.

Разделение алертов по категориям

Lighthouse позволяет создавать отдельные алерты для каждой категории метрик:

  • performance — производительность страниц, время загрузки, First Contentful Paint.
  • accessibility — доступность для пользователей с ограниченными возможностями.
  • seo — поисковая оптимизация и корректность разметки.
  • best-practices — соблюдение стандартов веб-разработки.

Пример условного разделения алертов:

function evaluateAlerts(scores) {
    if (scores.performance < 0.85) sendAlert('Performance is low');
    if (scores.accessibility < 0.9) sendAlert('Accessibility issues detected');
    if (scores.seo < 0.75) sendAlert('SEO score critical');
}

Логирование и аудит алертов

Для анализа работы Alerting системы рекомендуется хранить историю срабатываний алертов. Можно использовать простую запись в JSON файл или базу данных:

const fs = require('fs');

function logAlert(alert) {
    const log = {timestamp: new Date().toISOString(), alert};
    fs.appendFileSync('alerts.log', JSON.stringify(log) + '\n');
}
  • Хранение логов позволяет проводить ретроспективный анализ и выявлять повторяющиеся проблемы.
  • Логи можно интегрировать с системами аналитики для построения графиков и отчетов.

Настройка приоритетов и фильтров

Lighthouse Alerting поддерживает уровни приоритетов:

  • critical — требует немедленного вмешательства.
  • warning — обращает внимание на потенциальную проблему.
  • info — информативные уведомления, не влияющие на работу системы.

Фильтры позволяют исключить повторяющиеся уведомления или уведомлять только при превышении критических порогов.