Плагин Memcached
Мониторинг распределённой системы кэширования в памяти Memcached с подробными метриками, охватывающими частоту попаданий в кэш, использование памяти, соединения и статистику элементов.
Обзор
Плагин Memcached собирает детальные метрики с серверов Memcached, включая:
- Производительность кэша - Hit rate, miss rate, эффективность кэша
- Статистика памяти - Использование памяти, вытеснения, лимиты памяти
- Статистика элементов - Текущие элементы, всего элементов, вытеснения элементов
- Метрики соединений - Текущие соединения, скорость соединений, отклонённые соединения
- Счётчики операций - Get, set, delete, increment, decrement, touch
- Сетевая статистика - Прочитанные/записанные байты, уступки соединений
Требования
Версия Memcached
- Минимум: Memcached 1.4
- Рекомендуется: Memcached 1.6 или новее
- Протестировано с: Memcached 1.4, 1.5, 1.6
Зависимости Python
pip install python-memcached>=1.59
Устанавливается автоматически при использовании PLUGINS=memcached во время установки агента.
Доступ к Memcached
Агенту нужен сетевой доступ к серверу Memcached (порт по умолчанию 11211).
Конфигурация
Базовая конфигурация
plugins:
memcached:
enabled: true
host: localhost
port: 11211
С аутентификацией SASL
plugins:
memcached:
enabled: true
host: localhost
port: 11211
username: memcache_user
password: your-password
Все параметры конфигурации
plugins:
memcached:
enabled: true # Enable/disable plugin
host: localhost # Memcached host
port: 11211 # Memcached port (default: 11211)
username: user # SASL username (optional)
password: password # SASL password (optional)
timeout: 10 # Connection timeout (seconds)
Переменные окружения
Конфигурацию можно переопределить переменными окружения:
export MEMCACHED_HOST="localhost"
export MEMCACHED_PORT="11211"
export MEMCACHED_USERNAME="user"
export MEMCACHED_PASSWORD="password"
Настройка Memcached
Установка
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install memcached
CentOS/RHEL:
sudo yum install memcached
Запуск сервиса:
sudo systemctl start memcached
sudo systemctl enable memcached
Конфигурация
Отредактируйте конфиг Memcached:
Ubuntu/Debian:
sudo nano /etc/memcached.conf
CentOS/RHEL:
sudo nano /etc/sysconfig/memcached
Базовая конфигурация:
# Memory limit (MB)
-m 64
# Listen on localhost only (security)
-l 127.0.0.1
# Port
-p 11211
# Max connections
-c 1024
# Username to run as
-u memcache
Перезапустите после изменений:
sudo systemctl restart memcached
Включение аутентификации SASL (опционально)
Установите SASL:
# Ubuntu/Debian
sudo apt-get install libsasl2-2 sasl2-bin
# CentOS/RHEL
sudo yum install cyrus-sasl-plain
Настройте Memcached с SASL:
# Start Memcached with SASL
-S
Создайте пользователя SASL:
echo "mech_list: plain" | sudo tee /etc/sasl2/memcached.conf
echo "memcache_user:your-password" | sudo tee /etc/sasl2/memcached-sasldb
sudo saslpasswd2 -a memcached -c memcache_user
Конфигурация безопасности
Привязка только к localhost:
-l 127.0.0.1
Правила файрвола (если слушает на 0.0.0.0):
# Ubuntu/Debian
sudo ufw allow from 192.168.1.0/24 to any port 11211
sudo ufw deny 11211
# CentOS/RHEL
sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=11211 protocol=tcp accept'
sudo firewall-cmd --reload
Собираемые метрики
Метрики производительности кэша
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
cmd_get |
Всего команд get | Количество | Counter |
cmd_set |
Всего команд set | Количество | Counter |
get_hits |
Запросы get с попаданиями | Количество | Counter |
get_misses |
Запросы get с промахами | Количество | Counter |
hit_rate_percent |
Процент попаданий в кэш | Проценты | Gauge |
Расчёт hit rate:
hit_rate_percent = (get_hits / (get_hits + get_misses)) × 100
Метрики памяти
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
bytes |
Текущая используемая память | Байты | Gauge |
limit_maxbytes |
Лимит памяти | Байты | Gauge |
memory_used_percent |
Процент утилизации памяти | Проценты | Gauge |
evictions |
Элементы, вытесненные из кэша | Количество | Counter |
reclaimed |
Освобождённые слоты памяти | Количество | Counter |
Расчёт использования памяти:
memory_used_percent = (bytes / limit_maxbytes) × 100
Метрики элементов
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
curr_items |
Текущее число элементов | Количество | Gauge |
total_items |
Всего сохранённых элементов (за всё время) | Количество | Counter |
Метрики соединений
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
curr_connections |
Текущее число открытых соединений | Количество | Gauge |
total_connections |
Всего соединений (за всё время) | Количество | Counter |
Сетевые метрики
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
bytes_read |
Прочитано байт из сети | Байты | Counter |
bytes_written |
Записано байт в сеть | Байты | Counter |
Метрики сервера
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
uptime_seconds |
Время работы сервера | Секунды | Gauge |
version |
Версия Memcached | Строка | Info |
Метрики дашборда
Дашборд StatusRadar отображает:
Карточка обзора
- Hit Rate - Процент эффективности кэша
- Memory Usage - Текущее против лимита
- Items - Текущее число элементов
- Connections - Активные соединения
График Hit Rate
- Hit rate кэша во времени
- Miss rate
- Тренды соотношения hit/miss
График использования памяти
- Использование памяти против лимита
- Процент утилизации памяти
- Скорость вытеснения
График элементов
- Текущее число элементов
- Скорость роста элементов
- Истёкшие/вытесненные элементы
График соединений
- Активные соединения
- Скорость соединений
- Отклонённые соединения
График операций
- Get/set в секунду
- Операции delete/incr/decr
- Распределение команд
Установка
Быстрая установка
PLUGINS='memcached' \
TOKEN='your-agent-token' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Установите зависимость Python:
cd /opt/statusradar source venv/bin/activate # If using venv pip install python-memcached -
Включите плагин в конфигурации:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: memcached: enabled: true host: localhost port: 11211 -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep memcachedОжидаемо:
INFO: Plugin memcached: Metrics collected successfully INFO: Plugin memcached: 1234 items, 95.5% hit rate
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/memcached_plugin.py
Ожидаемый вывод:
Plugin: memcached
Enabled: True
Available: True
Collecting metrics...
{
"cmd_get": 123456,
"cmd_set": 45678,
"get_hits": 117890,
"get_misses": 5566,
"hit_rate": 95.5,
"bytes": 45678912,
"limit_maxbytes": 67108864,
"mem_usage_percent": 68.1,
"curr_items": 1234,
"evictions": 56,
"curr_connections": 12,
"total_connections": 5678,
"uptime": 86400
}
Тест подключения к Memcached
# Using telnet
telnet localhost 11211
# Commands:
stats
quit
# Using memcached-tool
memcached-tool localhost:11211 stats
# Using netcat
echo "stats" | nc localhost 11211
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли Memcached?
sudo systemctl status memcached
Проверка 2: Может ли агент подключиться к Memcached?
telnet localhost 11211
# Type: stats
# Should show statistics
Проверка 3: Установлен ли Python-пакет?
python3 -c "import memcache; print(memcache.__version__)"
Проверка 4: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep memcached
Распространённые ошибки
"No module named 'memcache'"
Ошибка:
ERROR: No module named 'memcache'
Решение:
pip install python-memcached
# Or if using venv:
cd /opt/statusradar && source venv/bin/activate && pip install python-memcached
"Connection refused"
Ошибка:
ERROR: Plugin memcached: Connection refused
Причины:
- Memcached не запущен
- Неверный host/port
- Файрвол блокирует соединение
Решение:
# Check Memcached is running
sudo systemctl status memcached
# Check port
sudo netstat -tlnp | grep 11211
# Test connection
telnet localhost 11211
"Connection timeout"
Ошибка:
ERROR: Plugin memcached: Connection timeout
Причины:
- Memcached перегружен
- Сетевые проблемы
- Memcached не отвечает
Решение:
# Check Memcached load
echo "stats" | nc localhost 11211 | grep curr_connections
# Restart if needed
sudo systemctl restart memcached
"SASL authentication failed"
Ошибка:
ERROR: Plugin memcached: SASL authentication failed
Причина: Неверные имя пользователя/пароль
Решение:
# Verify SASL user
sudo sasldblistusers2 -f /etc/sasl2/memcached-sasldb
# Reset password
sudo saslpasswd2 -a memcached -c memcache_user
Влияние на производительность
На Memcached
Минимальное влияние:
- Команда
statsвозвращает предварительно рассчитанную статистику - Без инвалидации кэша и вытеснений
- Время ответа: < 1 мс
Бенчмарк:
- Накладные расходы: < 0.001% CPU
- Нет измеримого падения производительности
На агент
Использование ресурсов:
- Память: +5 MB
- CPU: +1% во время сбора
- Сеть: +0.5 KB за сбор
Время сбора: < 0.1 секунды
Сценарии использования
1. Мониторинг hit rate кэша
Отслеживайте:
- Процент попаданий
- Тренды miss rate
- Соотношение hit/miss во времени
Настройте оповещения на:
- Hit rate < 90% (неэффективное кэширование)
- Внезапное падение hit rate
- Скачок miss rate
2. Управление памятью
Отслеживайте:
- Использование памяти против лимита
- Скорость вытеснения
- Процент утилизации памяти
Настройте оповещения на:
- Использование памяти > 90%
- Высокую скорость вытеснения (памяти слишком мало)
- Вытеснение неизвлечённых элементов (потраченная впустую память)
3. Мониторинг соединений
Отслеживайте:
- Текущие соединения
- Отклонённые соединения
- Достижение лимита соединений
Настройте оповещения на:
- Соединения > 90% от максимума
- Отклонённые соединения > 0
- Частое достижение лимита соединений
4. Жизненный цикл элементов
Отслеживайте:
- Рост числа элементов
- Истёкшие элементы
- Вытесненные элементы
Оптимизируйте:
- Настройки TTL
- Выделение памяти
- Стратегии прогрева кэша
Лучшие практики
1. Установите подходящий лимит памяти
Рассчитайте потребность в памяти:
Memory = (Average item size) × (Number of items) × 1.2 (overhead)
Example:
Item size: 1KB
Items: 100,000
Memory = 1KB × 100,000 × 1.2 = 120MB
Настройте в Memcached:
-m 128 # Set to 128MB
2. Следите за hit rate
Здоровый hit rate: > 95%
Если hit rate < 90%:
- Увеличьте память (параметр
-m) - Пересмотрите стратегию кэширования
- Проверьте значения TTL
- Исследуйте паттерны инвалидации кэша
3. Избегайте вытеснений
Вытеснения указывают на:
- Слишком низкий лимит памяти
- Элементы не читаются до истечения срока
- Перегрузку кэша (cache churn)
Решения:
- Увеличьте лимит памяти
- Оптимизируйте значения TTL
- Реализуйте прогрев кэша
4. Установите лимиты соединений
-c 1024 # Max simultaneous connections
Формула:
Max connections = (Application pool size × App instances) + 50 (overhead)
5. Используйте привязку к localhost для безопасности
-l 127.0.0.1 # Bind to localhost only
Привязывайтесь к 0.0.0.0 только если:
- Memcached на отдельном сервере
- Настроены правила файрвола
- Включена аутентификация SASL
6. Включите оповещения о лимите соединений
Следите за метрикой listen_disabled_num:
-
0 указывает на достижение лимита соединений
- Увеличьте параметр
-c, если это происходит часто
Тюнинг производительности Memcached
Оптимизация памяти
1. Выберите подходящий размер slab:
# Growth factor (default: 1.25)
-f 1.25
# Smaller factor = less wasted memory, more slabs
# Larger factor = less overhead, more waste
2. Следите за статистикой slab:
echo "stats slabs" | nc localhost 11211
Оптимизация соединений
1. Увеличьте максимальное число соединений:
-c 2048
2. Следите за использованием соединений:
echo "stats" | nc localhost 11211 | grep curr_connections
Конфигурация потоков
Многопоточный Memcached:
-t 4 # 4 threads
Рекомендуется:
threads = Number of CPU cores
Расширенная конфигурация
Кластер Memcached
Мониторинг нескольких экземпляров Memcached:
plugins:
memcached_1:
enabled: true
host: cache1.internal
port: 11211
memcached_2:
enabled: true
host: cache2.internal
port: 11211
Unix-сокет
Memcached на Unix-сокете:
# Memcached config
-s /var/run/memcached/memcached.sock
Конфигурация плагина:
plugins:
memcached:
enabled: true
socket: /var/run/memcached/memcached.sock
Docker-контейнер
Мониторинг Memcached в Docker:
plugins:
memcached:
enabled: true
host: memcached-container
port: 11211
Docker run:
docker run -d --name memcached \
-p 11211:11211 \
memcached -m 64
Примеры конфигураций
Базовый продакшен
plugins:
memcached:
enabled: true
host: localhost
port: 11211
С аутентификацией SASL
plugins:
memcached:
enabled: true
host: cache.internal
port: 11211
username: memcache_user
password: ${MEMCACHED_PASSWORD}
Конфигурация высокой доступности
plugins:
memcached_primary:
enabled: true
host: cache-primary.internal
port: 11211
memcached_secondary:
enabled: true
host: cache-secondary.internal
port: 11211
Ограничения
Текущие ограничения
- Нет метрик по отдельным slab - Только общесерверная статистика
- Нет метрик по отдельным ключам - Невозможно мониторить отдельные ключи кэша
- Нет информации о ребалансировке slab - Нет статистики slab automove
Масштабируемость
Протестировано с:
- Один экземпляр: до 10M элементов
- Память: до 64 ГБ
- Пропускная способность: 100,000+ ops/sec
Производительность:
- Накладные расходы команды stats постоянны независимо от размера
- Нет влияния на производительность Memcached
Лучшие практики Memcached
Стратегия кэширования
1. Установите подходящий TTL:
# Short-lived data
cache.set('session_123', data, time=300) # 5 minutes
# Long-lived data
cache.set('user_profile', data, time=3600) # 1 hour
2. Реализуйте прогрев кэша:
# Pre-populate cache on startup
def warm_cache():
for item in get_popular_items():
cache.set(item.key, item.data, time=3600)
3. Корректно обрабатывайте промахи кэша:
def get_user(user_id):
# Try cache first
user = cache.get(f'user_{user_id}')
if user is None:
# Cache miss - fetch from database
user = database.get_user(user_id)
cache.set(f'user_{user_id}', user, time=3600)
return user
Чек-лист мониторинга
Ежедневно:
- Процент hit rate
- Использование памяти
- Скорость вытеснения
Еженедельно:
- Паттерны соединений
- Тренды числа элементов
- Рост памяти
Ежемесячно:
- Планирование ёмкости
- Тренды производительности
- Анализ эффективности кэша
Дальнейшие шаги
- Просмотреть все плагины
- Плагин Redis - Альтернативная система кэширования
- Системные требования
- Руководство по настройке агента
- Обзор
- Требования
- Версия Memcached
- Зависимости Python
- Доступ к Memcached
- Конфигурация
- Базовая конфигурация
- С аутентификацией SASL
- Все параметры конфигурации
- Переменные окружения
- Настройка Memcached
- Установка
- Конфигурация
- Включение аутентификации SASL (опционально)
- Конфигурация безопасности
- Собираемые метрики
- Метрики производительности кэша
- Метрики памяти
- Метрики элементов
- Метрики соединений
- Сетевые метрики
- Метрики сервера
- Метрики дашборда
- Карточка обзора
- График Hit Rate
- График использования памяти
- График элементов
- График соединений
- График операций
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Тест подключения к Memcached
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На Memcached
- На агент
- Сценарии использования
- 1. Мониторинг hit rate кэша
- 2. Управление памятью
- 3. Мониторинг соединений
- 4. Жизненный цикл элементов
- Лучшие практики
- 1. Установите подходящий лимит памяти
- 2. Следите за hit rate
- 3. Избегайте вытеснений
- 4. Установите лимиты соединений
- 5. Используйте привязку к localhost для безопасности
- 6. Включите оповещения о лимите соединений
- Тюнинг производительности Memcached
- Оптимизация памяти
- Оптимизация соединений
- Конфигурация потоков
- Расширенная конфигурация
- Кластер Memcached
- Unix-сокет
- Docker-контейнер
- Примеры конфигураций
- Базовый продакшен
- С аутентификацией SASL
- Конфигурация высокой доступности
- Ограничения
- Текущие ограничения
- Масштабируемость
- Лучшие практики Memcached
- Стратегия кэширования
- Чек-лист мониторинга
- Дальнейшие шаги