Руководство пользователя Glaber ValueCache
Обзор
ValueCache — это продвинутая система кэширования в памяти в Glaber, которая хранит исторические данные мониторинга для метрик. Она обеспечивает высокопроизводительный доступ к актуальным и историческим данным, интеллектуально управляя использованием памяти на основе реальных шаблонов использования.
Ключевые возможности
1. Двухуровневая архитектура кэша
ValueCache использует двухуровневую систему для оптимальной производительности и эффективности использования памяти:
- Кэш сырых данных (Raw Cache): Хранит свежие данные с высоким разрешением по мере их поступления от мониторируемых систем
- Кэш агрегированных данных (Downsampled Cache): Хранит старые данные в агрегированной форме, уменьшая объем памяти при сохранении исторических трендов
2. Интеллектуальное управление на основе спроса
Система изучает паттерны использования и автоматически настраивает размеры кэша на основе реальных требований к данным:
- Отслеживает, как далеко в прошлое пользователи делают запросы (timeshift)
- Отслеживает, сколько значений обычно запрашивается (count)
- Адаптирует выделение кэша в соответствии с реальными паттернами использования
3. Автоматическая загрузка из базы данных
Когда запрошенные данные отсутствуют в кэше, система автоматически: - Загружает недостающие данные из базы данных - Заполняет как сырой, так и агрегированный кэш - Обеспечивает обслуживание последующих запросов из памяти
4. Поддержка персистентности
Содержимое кэша может быть сохранено на диск и восстановлено, что позволяет: - Быстрые перезапуски системы без потери кэшированных данных - Операции обслуживания без потери данных - Сохранение состояния при обновлениях
Параметры конфигурации
Настройте эти параметры в zabbix_server.conf или zabbix_proxy.conf:
ValueCacheSize
ValueCacheSize=256M
Диапазон: от 128 КБ до 64 ГБ
Описание: Общий объем разделяемой памяти, выделенной для ValueCache. Эта память распределяется между всеми мониторируемыми метриками.
ValueCacheDefaultElements
ValueCacheDefaultElements=10
Диапазон: от 1 до 1024
Описание: Начальное количество элементов, выделяемых для кэша сырых данных каждой метрики. Кэш автоматически растет в зависимости от спроса.
ValueCacheMaxDuration
ValueCacheMaxDuration=172800
Диапазон: Любое положительное значение в секундах
Описание: Максимальный период времени, в течение которого сырые данные (с высоким разрешением) хранятся в кэше. Более старые данные переносятся в агрегированный кэш.
- Значения в пределах этого периода: возвращаются из кэша сырых данных (полное разрешение)
- Значения старше этого периода: возвращаются из агрегированного кэша (усредненные)
ValueCacheMinCleanupValues
ValueCacheMinCleanupValues=128
Диапазон: от 2 до любого разумного числа
Описание: Минимальное количество значений, которые следует сохранять в кэше во время операций очистки. Предотвращает избыточную очистку кэша.
Как это работает
Поток данных
1. Поступает новое значение
↓
2. Добавляется в кэш сырых данных (свежие данные с полным разрешением)
↓
3. Когда накапливается достаточно старых данных
↓
4. Старые данные агрегируются и переносятся в кэш агрегированных данных
↓
5. Очистка удаляет устаревшие данные на основе спроса
Обработка запросов
Когда вы запрашиваете исторические данные (например, в дашбордах, триггерах или через API):
- Проверка кэша: Система проверяет, доступны ли данные в кэше
- Решение на основе времени:
- Свежие данные (в пределах
ValueCacheMaxDuration): обслуживаются из кэша сырых данных - Старые данные: обслуживаются из агрегированного кэша
- Загрузка из БД: Если данные отсутствуют, автоматически загружаются из БД и кэшируются
- Обновление спроса: Система записывает ваш паттерн запросов для оптимизации будущего кэширования
Отслеживание спроса
Система отслеживает три типа спроса для каждой метрики:
- Спрос по количеству (Count Demand): Сколько значений обычно запрашивается
- Спрос по периоду (Period Demand): Как далеко в прошлое идут запросы
- Спрос по смещению времени (Timeshift Demand): Если запросы смещены от текущего времени
Кэш автоматически растет или уменьшается на основе этих паттернов: - Часто используемые метрики получают больше места в кэше - Редко используемые метрики используют минимум памяти - Кэш адаптируется в течение 24-часового периода обучения
Поддерживаемые типы данных
ValueCache поддерживает следующие типы элементов данных Zabbix:
| Тип | Хранение | Агрегирование |
|---|---|---|
| Числовой (uint64) | Полная поддержка | Да (усреднение) |
| Вещественный (float) | Полная поддержка | Да (усреднение) |
| Строка (string) | Только кэш сырых данных | Нет |
| Текст (text) | Только кэш сырых данных | Нет |
| Лог (log) | Только кэш сырых данных | Нет |
Примечание: Текстовые типы (string, text, log) не агрегируются, поскольку усреднение не имеет смысла для текстовых данных.
Операции с кэшем
Просмотр статистики кэша
Вы можете просматривать статистику ValueCache через внутренний API Glaber или диагностические инструменты.
Ключевые метрики: - Общее количество кэшированных метрик - Использование памяти на метрику - Соотношение попаданий/промахов кэша - Паттерны спроса
Сохранение и восстановление кэша
Ручное сохранение:
Кэш может быть сохранен в формате JSON для резервного копирования или анализа. Расположение настраивается через параметр VCDumpLocation.
Формат: Кэш каждой метрики содержит: - Метаданные (тип значения, время последнего доступа) - Информация о спросе (паттерны использования) - Сырые значения (свежие данные) - Агрегированные значения (исторические агрегаты)
Автоматическое восстановление: При запуске, если существуют файлы дампа, они автоматически загружаются для прогрева кэша.
Поведение при очистке
Кэш автоматически очищает старые данные:
- Очистка по времени:
- Кэш сырых данных: удаляет данные старше
ValueCacheMaxDuration -
Агрегированный кэш: удаляет данные, которые больше не нужны на основе спроса
-
Очистка на основе спроса:
- Если спрос удовлетворен, самые старые значения удаляются
-
Если спрос не удовлетворен, кэш растет (в пределах глобальных лимитов памяти)
-
Минимальное удержание:
- Минимум
ValueCacheMinCleanupValuesзначений сохраняется для каждой метрики - Гарантирует, что некоторые данные всегда доступны даже для редко запрашиваемых метрик
Исторические функции и агрегированный кэш
Важно: Все исторические функции в Glaber (такие как avg(), min(), max(), last() и т.д.) автоматически используют агрегированный кэш при запросе длинных временных периодов. Это обеспечивает значительное улучшение производительности для запросов исторических данных без каких-либо изменений конфигурации.
Как работают исторические функции
Когда вы используете любую историческую функцию в триггерах, вычисляемых элементах данных или API запросах:
- Короткие периоды (в пределах
ValueCacheMaxDuration): Данные обслуживаются из кэша сырых данных с полным разрешением - Длинные периоды (за пределами
ValueCacheMaxDuration): Автоматически комбинируются: - Свежие данные из кэша сырых данных (полное разрешение)
- Исторические данные из агрегированного кэша (усредненные)
Пример:
avg(/host/item.key, 7d) // Автоматически использует агрегированный кэш для старых данных
Разница между обычными функциями и функциями трендов
| Функция | Обычные исторические функции | Функции трендов |
|---|---|---|
| Временные периоды | Любой произвольный период (например, 12345 секунд, 3ч 27м) | Только полные периоды (1ч, 1д, 1н) |
| Выравнивание периода | Может начинаться/заканчиваться в любой момент времени | Должны выравниваться по границам периодов |
| Сценарии использования | Мониторинг в реальном времени, гибкие запросы | Отчетность, анализ с фиксированными интервалами |
| Текущий период | Включает неполные текущие данные | Исключает незавершенный текущий период |
Примеры:
// Обычные функции - гибкие временные периоды
avg(/host/cpu, 10m:now-1d) // Среднее за 10 минут, день назад
min(/host/memory, 2h:now-30m) // Минимум за 2 часа, 30 минут назад
last(/host/disk, #5:now-1h) // 5-е последнее значение от часа назад
avg(/host/temp, 12345s:now-2h) // Среднее за 12345 секунд, 2 часа назад
// Функции трендов - только полные периоды
trendavg(/host/cpu, 1h:now/h-1d) // Часовое среднее за последние 24 часа
trendmax(/host/memory, 1d:now/d-1w) // Дневной максимум за последнюю неделю
trendsum(/host/traffic, 1w:now/w-1M) // Недельная сумма за последний месяц
trendmin(/host/temp, 1M:now/M-1y) // Месячный минимум за последний год
Преимущества производительности
И обычные исторические функции, и функции трендов получают преимущества от агрегированного кэша:
- Снижение нагрузки на базу данных: Исторические данные обслуживаются из памяти
- Более быстрый ответ на запросы: Нет необходимости сканировать миллионы строк в базе данных
- Стабильная производительность: Время запроса не растет линейно с длиной периода
Агрегированный кэш делает долгосрочные исторические запросы практичными и производительными, независимо от того, используете ли вы гибкие временные периоды с обычными функциями или фиксированные интервалы с функциями трендов.
Лучшие практики
Расчет размера памяти
Практическое правило: Выделяйте ValueCacheSize на основе:
Память = (Количество активных метрик) × (Среднее значений на метрику) × (Байт на значение)
Пример расчета: - 10 000 метрик - В среднем 1000 значений в кэше на метрику - Вещественные значения (~16 байт каждое) - Требуется: минимум ~152 МБ
Рекомендация: Начните с 256 МБ и отслеживайте использование.
Оптимальная конфигурация
- Высокочастотный мониторинг (интервалы 1 секунда):
- Увеличьте
ValueCacheMaxDuration(например, 7 дней) -
Увеличьте
ValueCacheDefaultElements(например, 50-100) -
Стандартный мониторинг (интервалы 30-60 секунд):
- Обычно достаточно настроек по умолчанию
ValueCacheMaxDuration= 2 дня-
ValueCacheDefaultElements= 10 -
Низкочастотный мониторинг (интервалы 5+ минут):
- Можно уменьшить
ValueCacheDefaultElementsдо 5 ValueCacheMaxDurationможет быть длиннее (например, 7 дней)
Оптимизация производительности
- Процент попаданий в кэш: Отслеживайте статистику кэша для обеспечения высокого процента попаданий (>90%)
- Паттерны спроса: Дайте 24 часа системе для изучения паттернов использования
- Мониторинг памяти: Следите за вытеснениями из кэша, указывающими на недостаток памяти
Устранение неполадок
Проблема: Высокое использование памяти
Симптомы: Потребление памяти сервером постоянно растет
Решения:
1. Уменьшите ValueCacheMaxDuration для хранения меньшего объема сырых данных
2. Проверьте метрики с аномально высоким спросом
Проблема: Частые запросы к базе данных
Симптомы: Высокая нагрузка на БД, медленная работа дашбордов
Решения:
1. Увеличьте ValueCacheSize для кэширования большего количества метрик
2. Увеличьте ValueCacheDefaultElements для часто запрашиваемых метрик
3. Убедитесь, что отслеживание спроса работает (дайте 24 часа на период обучения)
Мониторинг кэша
Ключевые индикаторы
Следите за этими метриками для оптимальной производительности:
- Процент попаданий в кэш: Должен быть >90% для хорошей производительности
- Использование памяти: Должно оставаться ниже лимита
ValueCacheSize - Удовлетворение спроса: Метрики должны удовлетворять своим требованиям спроса
- Частота загрузки из БД: Должна быть минимальной для активных метрик
Сообщения в логах
Включите отладочное логирование для конкретных метрик:
DebugItem=123456
Ищите записи в логах типа:
- "Fetching X seconds from raw cache" (Загрузка X секунд из кэша сырых данных)
- "Cache demand IS MET/IS NOT MET" (Спрос кэша УДОВЛЕТВОРЕН/НЕ УДОВЛЕТВОРЕН)
- "Downsampled cache added X values" (Агрегированный кэш добавил X значений)
Сравнение со стандартным Zabbix
| Функция | Стандартный Zabbix | Glaber ValueCache |
|---|---|---|
| Архитектура кэша | Одноуровневая | Двухуровневая (сырые + агрегированные) |
| Управление памятью | На основе спроса, адаптивное | На основе спроса, адаптивное |
| Исторические данные | Кэшируется с агрегированием под запрошенные периоды | Кэшируется с агрегированием универсально |
| Долгосрочные запросы | Всегда обращение к БД | Обслуживается из агрегированного кэша |
| Персистентность | Отсутствует | Поддержка сохранения/восстановления |
| Обучение | Отсутствует | 24-часовое обучение спроса |
Заключение
Glaber ValueCache обеспечивает интеллектуальное высокопроизводительное кэширование данных мониторинга с минимальной конфигурацией. Его подход на основе спроса обеспечивает оптимальное использование памяти при сохранении быстрой производительности запросов. Для большинства случаев использования настройки по умолчанию работают хорошо, с автоматической адаптацией к вашим конкретным паттернам использования с течением времени.