Модуль 25

Моніторинг Redis та Redis Insight

Ось урок, підготовлений спеціально для тебе у стилі CS50: енергійно, зрозуміло і з фокусом на практику. Поїхали!


🎓 Урок: Моніторинг Redis та Redis Insight

Привіт, світе! (або привіт, майбутній архітекторе високонавантажених систем!) 👋

Сьогодні ми не просто пишемо код. Сьогодні ми вчимося бути лікарями для наших систем. Ми будемо робити рентген, кардіограму і МРТ для Redis. Тема нашого уроку — Моніторинг Redis та інструмент Redis Insight.


1. 🔥 Вступ: Чому це питання життя і смерті (сервера)

Уявіть ситуацію. Ваш інтернет-магазин працює. Клієнти наповнюють кошики, гроші течуть рікою 💸. І раптом... сайт починає "тупити". Сторінка вантажиться 5 секунд замість 0.2 секунди.

Ви дивитесь на базу даних (PostgreSQL/MySQL) — вона відпочиває. Дивитесь на вебсервер — навантаження в нормі. Але щось гальмує. Усі підозри падають на Redis, який ви використовуєте для кешування сесій та товарів.

Риторичне питання: Як дізнатися, що відбувається всередині Redis, якщо він виглядає як "чорна скринька"? Він просто мовчки працює (або не працює).

🚗 Аналогія: Redis — це суперкар Ferrari. Він дуже швидкий. Але їхати на Ferrari з заклеєним скотчем спідометром, датчиком палива і температури двигуна — це безумство. Моніторинг — це ваша приладова панель. Без неї ви дізнаєтесь про проблему тільки тоді, коли з-під капота піде дим (або коли сервер впаде через Out of Memory).

Сьогодні ми зірвемо цей скотч і навчимося бачити все!


2. 🧠 Теоретична база (Що там під капотом?)

Перш ніж тицяти кнопки, давайте розберемося з логікою. Redis працює в оперативній пам'яті. Це його суперсила і його слабкість.

Що "вбиває" Redis? (Запам'ятайте ці три кити 🐳)

  1. Пам'ять (Memory): Якщо вона закінчиться, Redis почне або викидати дані (eviction), або впаде з помилкою. Нам треба знати, скільки ми з'їли.
  2. CPU та Блокування: Redis (здебільшого) однопотоковий.
    • Інтуїтивне розуміння: Уявіть супершвидкого касира в супермаркеті. Він обслуговує 100 000 людей за секунду. Але якщо один покупець вирішить оплатити копійками цілий візок (це "важка команда"), черга зупиниться повністю! Ніхто не пройде, поки цей один не закінчить.
  3. Мережа та Клієнти: Скільки людей зараз підключено? Чи не забитий канал даними?

Інструменти, які ми маємо:

  • CLI (Command Line Interface): Це як стетоскоп лікаря. Точково, швидко, працює скрізь. Основні команди: INFO, MONITOR, SLOWLOG.
  • Redis Insight: Це повноцінний МРТ-сканер. Графічний інтерфейс (GUI), де ви бачите красиві графіки, можете редагувати ключі мишкою і аналізувати пам'ять візуально.

Головне правило: CLI — для швидкої перевірки на сервері. Redis Insight — для глибокого аналізу та зручної розробки.


3. 🧪 Приклади (Від терміналу до красивих графіків)

Приклад 1: Базовий огляд (INFO)

Заходимо в консоль. Ви очікуєте побачити просте "ОК"? А ось і ні. Введіть команду:

redis-cli INFO

Ви отримаєте "стіну тексту". Не лякайтесь! Дивимось сюди:

  • used_memory_human: 1.2M — скільки пам'яті зайнято (зрозумілою мовою).
  • connected_clients: 5 — скільки програм зараз підключено.
  • instantaneous_ops_per_sec: 0 — навантаження просто зараз.

Приклад 2: Хто гальмує систему? (SLOWLOG)

Уявіть, що Redis почав гальмувати. Як знайти того самого "покупця з копійками"? Redis автоматично записує команди, які виконувались довше, ніж X мікросекунд.

redis-cli SLOWLOG GET 5

Це покаже останні 5 "повільних" команд. Якщо ви бачите там команду KEYS * на проді — вітаю, ви знайшли злочинця.

Приклад 3: Redis Insight (Магія візуалізації) 🪄

Тепер уявіть, що замість тексту ви бачите: 1. Графік використання пам'яті в реальному часі. 2. Список усіх ключів з пошуком. 3. Кнопку "Browser", де ви можете клікнути на ключ user:100 і побачити його JSON.

Це і є Redis Insight. Ви просто підключаєте його до своєї бази і бачите структуру даних як на долоні.


4. 🛠 Практична частина

Час бруднити руки! Якщо у вас є Docker, це займе 2 хвилини.

Підготовка: Запустіть Redis: docker run --name my-redis -p 6379:6379 -d redis

Завдання 1: "Пульс пацієнта"

  1. Зайдіть всередину контейнера: docker exec -it my-redis redis-cli.
  2. Введіть INFO memory.
  3. Запишіть, скільки пам'яті використовується (used_memory_human).
  4. Додайте великий рядок: SET heavy_key "A" * 1000000 (умовно, створіть велике значення).
  5. Знову перевірте INFO memory. Чи змінились цифри?

Завдання 2: "Полювання на повільні запити"

  1. Налаштуйте поріг логування (зробимо його дуже низьким для тесту, 0 мікросекунд = логувати все): CONFIG SET slowlog-log-slower-than 0
  2. Виконайте будь-яку команду, наприклад GET non_existent_key.
  3. Перевірте лог: SLOWLOG GET 1.
  4. Аналіз: Ви маєте побачити вашу команду, час виконання та ID.
  5. Важливо: Поверніть налаштування назад! CONFIG SET slowlog-log-slower-than 10000 (10мс).

Завдання 3: "Шпигун" (MONITOR)

  1. Введіть команду MONITOR.
  2. Тепер термінал "завис".
  3. Відкрийте інше вікно терміналу і виконайте команду в Redis (наприклад SET test 123).
  4. Подивіться у перше вікно. Ви побачите цю команду в реальному часі!
  5. Питання: Чому цю команду не можна лишати увімкненою надовго на продакшені? (Підказка: вона їсть ресурси!).

Міні-кейс: Встановлення Redis Insight 🕵️‍♂️

  1. Завантажте Redis Insight (це десктопний додаток) або запустіть його в докері.
  2. Підключіться до вашого локального Redis (localhost:6379).
  3. Знайдіть вкладку "Browser". Створіть новий ключ прямо через інтерфейс.
  4. Знайдіть вкладку "Analysis tool" -> "Memory Analysis". Подивіться, які типи даних займають найбільше місця.

5. 💡 Мислення як у розробника

Як відрізнити новачка від профі в моніторингу?

Новачок: * Використовує команду KEYS *, щоб подивитися, що є в базі. (Це блокує Redis, якщо ключів мільйони! Сервер лягає). * Дивиться моніторинг тільки тоді, коли все вже зламалося. * Не налаштовує ліміт пам'яті (maxmemory) і дивується, коли сервер падає.

Досвідчений розробник (Senior): * Використовує SCAN замість KEYS * (це безпечний перебір). * Налаштовує алерти (сповіщення). Якщо пам'ять заповнена на 80% — йому приходить повідомлення в Slack/Telegram. * Використовує Redis Insight для профілювання пам'яті під час розробки, щоб не "засмічувати" прод зайвими даними. * Розуміє метрику Cache Hit Ratio (Співвідношення влучань). Якщо ви запитуєте Redis, а ключів там немає (miss), то навіщо вам взагалі Redis? Ви просто грієте повітря.

Порада з практики:

Якщо ваш Redis "гальмує", у 90% випадків це не Redis винен. Це або мережа, або ви намагаєтесь витягнути за один раз 100 Мб даних однією командою. Дивіться на розмір value!


6. 🧩 Підсумок

Отже, друзі, що ми сьогодні зробили? 1. Зрозуміли, що їзда наосліп — це погана ідея. 2. Навчилися дивитися "аналізи" нашого Redis через INFO та SLOWLOG. 3. Дізналися, як візуально керувати даними через Redis Insight. 4. Засвоїли золоте правило: Redis однопотоковий, тому важкі команди — це табу.

Тепер ви не просто користувачі кешу, ви — його адміністратори. Ви можете діагностувати "хворобу" і призначити лікування.

👀 Тизер наступного уроку: Гаразд, ми навчилися моніторити один Redis. А що, якщо даних так багато, що вони не влазять в один сервер? Або якщо цей сервер згорить? На наступному уроці ми поговоримо про Реплікацію та Кластеризацію (Redis Cluster). Як зробити так, щоб система жила вічно!

А поки — це був CS50! (тобто, наш курс). Успіхів у коді! 💻🚀