Плагин Varnish
Мониторинг HTTP-кеша-акселератора Varnish с подробными метриками по производительности кеша, состоянию бэкендов, клиентским соединениям и использованию ресурсов.
Обзор
Плагин Varnish собирает подробные метрики из Varnish с помощью varnishstat, в том числе:
- Производительность кеша — hit rate, miss rate, hit-for-pass, hit-for-miss
- Объекты кеша — кешированные объекты, истёкшие объекты, вытесненные по LRU объекты
- Состояние бэкендов — соединения с бэкендами, сбои, число занятых
- Клиентские метрики — клиентские соединения, запросы, сброшенные соединения
- Статистика потоков — число потоков, длина очереди, неудачные создания
- Использование памяти — выделенное хранилище, доступное хранилище
Требования
Версия Varnish
- Минимум: Varnish 6.0
- Рекомендуется: Varnish 7.0 или новее
- Протестировано с: Varnish 6.0, 6.6, 7.0, 7.3
Инструменты Varnish
Обязательно: утилита командной строки varnishstat (входит в состав Varnish)
Зависимости Python
Дополнительные пакеты Python не требуются — используется стандартная библиотека.
Системный доступ
Агенту нужны права на выполнение команды varnishstat.
Конфигурация
Базовая конфигурация
plugins:
varnish:
enabled: true
С пользовательским именем экземпляра
plugins:
varnish:
enabled: true
instance_name: my_varnish
Все параметры конфигурации
plugins:
varnish:
enabled: true # Enable/disable plugin
instance_name: "" # Varnish instance name (empty = default)
varnishstat_path: /usr/bin/varnishstat # Path to varnishstat
timeout: 10 # Command timeout (seconds)
Переменные окружения
Конфигурацию можно переопределить с помощью переменных окружения:
export VARNISH_INSTANCE_NAME="cache1"
Настройка Varnish
Установка
Ubuntu/Debian:
# Install Varnish
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.deb.sh | sudo bash
sudo apt-get install varnish
# Start service
sudo systemctl start varnish
sudo systemctl enable varnish
CentOS/RHEL:
# Install Varnish
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish70/script.rpm.sh | sudo bash
sudo yum install varnish
# Start service
sudo systemctl start varnish
sudo systemctl enable varnish
Базовая конфигурация
Отредактируйте конфигурацию Varnish:
sudo nano /etc/varnish/default.vcl
Простой бэкенд:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Перезапустите Varnish:
sudo systemctl restart varnish
Предоставление доступа к varnishstat
По умолчанию агент работает от root — имеет доступ к varnishstat.
Для агента без root:
# Add user to varnish group
sudo usermod -aG varnish statusradar
Собираемые метрики
Системные метрики
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
uptime_seconds |
Uptime Varnish | Секунды | Gauge |
Метрики производительности кеша
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
cache_hit |
Попадания в кеш | Количество | Counter |
cache_miss |
Промахи кеша | Количество | Counter |
cache_hitpass |
Hit for pass (некешируемые) | Количество | Counter |
cache_hit_grace |
Hit for grace | Количество | Counter |
cache_hitmiss |
Hit for miss | Количество | Counter |
cache_hit_rate_percent |
Процент попаданий в кеш | Процент | Gauge |
Расчёт hit rate:
cache_hit_rate_percent = (cache_hit / (cache_hit + cache_miss)) × 100
Метрики объектов кеша
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
n_object |
Кешированные объекты | Количество | Gauge |
n_objectcore |
Object cores | Количество | Gauge |
n_objecthead |
Object heads | Количество | Gauge |
n_expired |
Истёкшие объекты | Количество | Counter |
n_lru_nuked |
Вытесненные по LRU объекты | Количество | Counter |
n_lru_moved |
Перемещённые по LRU объекты | Количество | Counter |
Метрики бэкендов
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
n_backend |
Число бэкендов | Количество | Gauge |
backend_conn |
Соединения с бэкендами | Количество | Counter |
backend_fail |
Сбои соединений с бэкендами | Количество | Counter |
backend_busy |
Число занятых бэкендов | Количество | Counter |
backend_unhealthy |
Число нездоровых бэкендов | Количество | Counter |
backend_reuse |
Переиспользования соединений с бэкендами | Количество | Counter |
backend_recycle |
Повторное использование соединений с бэкендами | Количество | Counter |
backend_retry |
Повторы к бэкендам | Количество | Counter |
backend_req |
Запросы к бэкендам | Количество | Counter |
Клиентские метрики
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
client_req |
Клиентские запросы | Количество | Counter |
client_req_400 |
Клиентские ошибки 400 | Количество | Counter |
client_req_417 |
Клиентские ошибки 417 | Количество | Counter |
sess_conn |
Соединения сессий | Количество | Counter |
sess_fail |
Сбои сессий | Количество | Counter |
sess_dropped |
Сброшенные сессии | Количество | Counter |
Метрики потоков
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
threads |
Всего потоков | Количество | Gauge |
threads_created |
Создано потоков | Количество | Counter |
threads_destroyed |
Уничтожено потоков | Количество | Counter |
threads_failed |
Сбои создания потоков | Количество | Counter |
threads_limited |
Ограничено созданий потоков | Количество | Counter |
thread_queue_len |
Длина очереди потоков | Количество | Gauge |
Метрики трафика
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
req_hdrbytes |
Байты заголовков запросов | Байты | Counter |
req_bodybytes |
Байты тела запросов | Байты | Counter |
resp_hdrbytes |
Байты заголовков ответов | Байты | Counter |
resp_bodybytes |
Байты тела ответов | Байты | Counter |
req_total_mb |
Всего байт запросов | МБ | Counter |
resp_total_mb |
Всего байт ответов | МБ | Counter |
Метрики fetch
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
s_fetch |
Всего операций fetch | Количество | Counter |
fetch_failed |
Неудачные операции fetch | Количество | Counter |
Метрики VCL
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
n_vcl |
Число конфигураций VCL | Количество | Gauge |
vcl_fail |
Сбои VCL | Количество | Counter |
Метрики на дашборде
Дашборд StatusRadar отображает:
Карточка обзора
- Hit Rate — процент эффективности кеша
- Cached Objects — текущее число объектов
- Backend Health — частота успешных соединений
- Client Connections — активные клиенты
График производительности кеша
- Hit rate во времени
- Miss rate
- Доля hit-for-pass
График объектов кеша
- Число кешированных объектов
- Истёкшие объекты
- Вытесненные по LRU объекты
График состояния бэкендов
- Соединения с бэкендами
- Сбои бэкендов
- Число занятых бэкендов
График клиентского трафика
- Клиентские соединения
- Клиентские запросы
- Сброшенные соединения
График пула потоков
- Активные потоки
- Длина очереди потоков
- Сбои создания потоков
Установка
Быстрая установка
PLUGINS='varnish' \
TOKEN='your-agent-token' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Убедитесь, что Varnish установлен:
varnishstat -V -
Включите плагин в конфигурации:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: varnish: enabled: true -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep varnishОжидается:
INFO: Plugin varnish: Metrics collected successfully INFO: Plugin varnish: Hit rate 95.5%, 1234 cached objects
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/varnish_plugin.py
Ожидаемый вывод:
Plugin: varnish
Enabled: True
Available: True
Collecting metrics...
{
"cache_hit": 123456,
"cache_miss": 5678,
"cache_hitrate": 95.6,
"n_object": 1234,
"n_expired": 567,
"n_lru_nuked": 12,
"backend_conn": 89012,
"backend_fail": 23,
"client_conn": 123456,
"client_req": 234567,
"threads": 200
}
Проверка статистики Varnish
# View live stats
varnishstat
# View specific counters
varnishstat -1 -f MAIN.cache_hit -f MAIN.cache_miss
# JSON output
varnishstat -1 -j
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли Varnish?
sudo systemctl status varnish
Проверка 2: Можно ли выполнить varnishstat?
varnishstat -1
Проверка 3: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep varnish
Распространённые ошибки
"varnishstat command not found"
Ошибка:
ERROR: Plugin varnish: varnishstat command not found
Решение:
# Install Varnish
sudo apt-get install varnish
# Or specify full path in config:
varnishstat_path: /usr/bin/varnishstat
"Cannot connect to varnishd"
Ошибка:
ERROR: Plugin varnish: Cannot connect to varnishd
Причины:
- Varnish не запущен
- Неверное имя экземпляра
- Проблемы с правами доступа
Решение:
# Check Varnish is running
sudo systemctl status varnish
# Test varnishstat
sudo varnishstat -1
# Check instance name
sudo varnishadm status
"Permission denied"
Ошибка:
ERROR: Plugin varnish: Permission denied accessing varnish stats
Решение:
Агент должен работать от root или быть добавлен в группу varnish:
sudo usermod -aG varnish statusradar
sudo systemctl restart statusradar-agent
Влияние на производительность
На Varnish
Минимальное влияние:
varnishstatчитает из разделяемой памяти- Нет инвалидации кеша
- Нет влияния на обработку запросов
Бенчмарк:
- Накладные расходы: < 0.01% CPU
- Нет измеримой деградации производительности
На агент
Использование ресурсов:
- Память: +10 МБ
- CPU: +2% во время сбора
- Сеть: +1 КБ за сбор
Время сбора: < 0.2 секунды
Сценарии использования
1. Мониторинг hit rate кеша
Отслеживайте:
- Процент попаданий
- Тренды промахов
- Долю hit-for-pass
Оповещение при:
- Hit rate < 80% (плохое кеширование)
- Резком падении hit rate
- Высокой частоте hit-for-pass
2. Состояние бэкендов
Отслеживайте:
- Частоту успешных соединений с бэкендами
- Сбои бэкендов
- Число занятых бэкендов
Оповещение при:
- Частоте сбоев бэкендов > 1%
- backend_busy > 0
- Нездоровых бэкендах
3. Эффективность кеша
Отслеживайте:
- Число кешированных объектов
- Вытесненные по LRU объекты
- Истёкшие объекты
Оптимизируйте:
- Размер кеша (хранилище malloc)
- Настройки TTL
- Логику VCL
4. Клиентская нагрузка
Отслеживайте:
- Клиентские соединения
- Частоту запросов
- Сброшенные соединения
Оповещение при:
- Сброшенных соединениях > 0
- Всплеске частоты соединений
- Растущей очереди запросов
Лучшие практики
1. Настройте размер кеша
Установите подходящий размер кеша:
# /etc/varnish/varnish.params
VARNISH_STORAGE="malloc,4G"
Рассчитайте размер кеша:
Cache size = (Average object size) × (Number of objects) × 1.2
2. Отслеживайте hit rate
Здоровый hit rate: > 85%
Если hit rate < 80%:
- Увеличьте размер кеша
- Пересмотрите настройки TTL
- Проверьте логику VCL
- Проанализируйте заголовки, обходящие кеш
3. Избегайте вытеснения по LRU
Вытеснение по LRU указывает на:
- Слишком малый размер кеша
- Слишком долгий TTL
- Высокую сменяемость объектов
Решение:
- Увеличьте размер кеша
- Уменьшите TTL для крупных объектов
- Внедрите ограничения размера объектов
4. Настройте пулы потоков
# /etc/varnish/varnish.params
VARNISH_THREAD_POOLS=2
VARNISH_THREAD_POOL_MIN=100
VARNISH_THREAD_POOL_MAX=1000
Формула:
thread_pool_min = Number of CPUs × 50
thread_pool_max = Number of CPUs × 500
5. Включите логирование для отладки
# View real-time requests
varnishlog
# View specific backend
varnishlog -b
# View specific client
varnishlog -c
Тонкая настройка производительности Varnish
Конфигурация кеша
Хранилище malloc (рекомендуется):
VARNISH_STORAGE="malloc,8G"
Файловое хранилище:
VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,10G"
Оптимизация VCL
Установите заголовки кеширования:
sub vcl_backend_response {
# Cache for 1 hour
set beresp.ttl = 1h;
# Remove cookies for static files
if (bereq.url ~ "\.(jpg|jpeg|gif|png|css|js)$") {
unset beresp.http.set-cookie;
}
}
Нормализуйте заголовок Host:
sub vcl_recv {
# Normalize host header
set req.http.host = regsub(req.http.host, ":[0-9]+", "");
}
Проверки состояния бэкендов
backend default {
.host = "127.0.0.1";
.port = "8080";
.probe = {
.url = "/health";
.timeout = 1s;
.interval = 5s;
.window = 5;
.threshold = 3;
}
}
Расширенная конфигурация
Несколько экземпляров Varnish
plugins:
varnish_cache1:
enabled: true
instance_name: cache1
varnish_cache2:
enabled: true
instance_name: cache2
Docker-контейнер
Мониторинг Varnish в Docker:
plugins:
varnish:
enabled: true
Запуск Docker:
docker run -d --name varnish \
-v /var/run:/var/run \
varnish:latest
Примеры конфигураций
Базовая production-конфигурация
plugins:
varnish:
enabled: true
Несколько экземпляров
plugins:
varnish_web:
enabled: true
instance_name: web_cache
varnish_api:
enabled: true
instance_name: api_cache
Ограничения
Текущие ограничения
- Нет метрик по отдельным URL — только агрегированная статистика
- Нет метрик списка банов — статистика ban/purge не детализирована
- Нет метрик ESI — статистика Edge Side Includes не собирается
Масштабируемость
Протестировано с:
- 10 000+ req/sec
- 100 000+ кешированных объектов
- Кешем размером в несколько ГБ
Производительность:
- Накладные расходы varnishstat постоянны независимо от размера кеша
Чек-лист мониторинга
Критично:
- Hit rate < 80%
- Сбои бэкендов > 0
- Сброшенные соединения > 0
- Частое вытеснение по LRU
Важно: 5. Сбои создания потоков 6. backend_busy > 0 7. Длина очереди потоков > 0
Пороги оповещений
cache_hitrate: < 85
backend_fail_rate: > 0.01
client_drop: > 0
n_lru_nuked_rate: > 100/min
Следующие шаги
- Просмотреть все плагины
- Плагин Nginx — часто используется вместе
- Плагин HAProxy — альтернатива-балансировщик нагрузки
- Системные требования
- Обзор
- Требования
- Версия Varnish
- Инструменты Varnish
- Зависимости Python
- Системный доступ
- Конфигурация
- Базовая конфигурация
- С пользовательским именем экземпляра
- Все параметры конфигурации
- Переменные окружения
- Настройка Varnish
- Установка
- Базовая конфигурация
- Предоставление доступа к varnishstat
- Собираемые метрики
- Системные метрики
- Метрики производительности кеша
- Метрики объектов кеша
- Метрики бэкендов
- Клиентские метрики
- Метрики потоков
- Метрики трафика
- Метрики fetch
- Метрики VCL
- Метрики на дашборде
- Карточка обзора
- График производительности кеша
- График объектов кеша
- График состояния бэкендов
- График клиентского трафика
- График пула потоков
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Проверка статистики Varnish
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На Varnish
- На агент
- Сценарии использования
- 1. Мониторинг hit rate кеша
- 2. Состояние бэкендов
- 3. Эффективность кеша
- 4. Клиентская нагрузка
- Лучшие практики
- 1. Настройте размер кеша
- 2. Отслеживайте hit rate
- 3. Избегайте вытеснения по LRU
- 4. Настройте пулы потоков
- 5. Включите логирование для отладки
- Тонкая настройка производительности Varnish
- Конфигурация кеша
- Оптимизация VCL
- Проверки состояния бэкендов
- Расширенная конфигурация
- Несколько экземпляров Varnish
- Docker-контейнер
- Примеры конфигураций
- Базовая production-конфигурация
- Несколько экземпляров
- Ограничения
- Текущие ограничения
- Масштабируемость
- Чек-лист мониторинга
- Пороги оповещений
- Следующие шаги