MAATRIX / Блог / Как установить и настроить логи в Grafana Loki на VPS

Как установить и настроить логи в Grafana Loki на VPS

Как установить и настроить логи в Grafana Loki на VPS

MAATRIX

Когда серверов и сервисов больше одного, разбираться с логами по SSH через tail и grep становится мучением: непонятно, куда смотреть, история теряется, а сопоставить события с разных машин невозможно. Grafana Loki решает это — собирает логи со всех источников в одно место, где их можно искать, фильтровать и смотреть рядом с метриками. Это как Prometheus, но для логов: легковесно и без тяжёлой индексации. Разберём установку на VPS.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Как устроен Loki и чем он хорош

Loki — система централизованного сбора логов от создателей Grafana. Её главная идея — не индексировать содержимое логов целиком (как это делает тяжёлый Elasticsearch), а индексировать только метки (labels): имя сервиса, хост, уровень. Само содержимое хранится сжатым. Благодаря этому Loki ест в разы меньше ресурсов и диска, а искать всё равно быстро.

Архитектура из трёх частей. Loki — сервер, который принимает и хранит логи. Promtail (или новый агент Alloy) — сборщик, который читает логи на каждой машине и шлёт их в Loki. Grafana — интерфейс, где вы пишете запросы на языке LogQL и видите логи рядом с графиками метрик. Эта же Grafana, что и для Prometheus, — оба источника живут в одной панели.

Честно про нишу: Loki хорош, когда логов много и они с разных источников. Для одного сервера с парой сервисов проще смотреть journalctl. Но как только появляется несколько машин, микросервисы или нужно хранить историю логов и коррелировать её с метриками — Loki становится незаменим и при этом не требует мощного железа, в отличие от классических стеков.

Требования и выбор сервера

Loki экономичен: для сбора логов небольшой инфраструктуры хватает 2 ядер, 2–4 ГБ RAM и диска под хранение — объём зависит от того, сколько логов и как долго храните. Диск закладывайте с запасом и настраивайте срок хранения, чтобы логи не копились вечно.

Локацию сервера логов держите ближе к источникам, чтобы сбор шёл с минимальной задержкой и не гонял трафик через полмира. Для российской инфраструктуры — RU-локация, для зарубежной — US или UK. MAATRIX даёт VPS в нужной локации с оплатой картами российских банков, СБП, криптовалютой или токеном MAAT — иностранная карта не нужна. Обновите систему:

apt update && apt upgrade -y

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под логи

Установка Loki

Скачайте бинарник Loki и конфиг. Возьмём свежий релиз:

cd /tmp
wget https://github.com/grafana/loki/releases/download/v3.0.0/loki-linux-amd64.zip
apt install -y unzip
unzip loki-linux-amd64.zip
mv loki-linux-amd64 /usr/local/bin/loki
useradd --no-create-home --shell /bin/false loki
mkdir -p /etc/loki /var/lib/loki
chown loki:loki /var/lib/loki

Создайте конфиг /etc/loki/loki-config.yml — минимальный, для локального хранения на диске:

auth_enabled: false
server:
  http_listen_port: 3100
common:
  path_prefix: /var/lib/loki
  storage:
    filesystem:
      chunks_directory: /var/lib/loki/chunks
      rules_directory: /var/lib/loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory
schema_config:
  configs:
    - from: 2024-01-01
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h
limits_config:
  retention_period: 720h

Здесь http_listen_port: 3100 — порт приёма логов, retention_period: 720h хранит логи 30 дней. Создайте systemd-юнит и запустите:

systemctl daemon-reload
systemctl enable --now loki

Установка Promtail на источниках

Promtail читает логи и шлёт их в Loki. Ставится он на каждую машину, чьи логи собираем (в том числе на сам сервер Loki, если хотите его логи тоже). Скачайте бинарник:

cd /tmp
wget https://github.com/grafana/loki/releases/download/v3.0.0/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
mv promtail-linux-amd64 /usr/local/bin/promtail

Создайте конфиг /etc/loki/promtail-config.yml, который забирает системные логи и шлёт их в Loki:

server:
  http_listen_port: 9080
positions:
  filename: /tmp/positions.yaml
clients:
  - url: http://IP_LOKI:3100/loki/api/v1/push
scrape_configs:
  - job_name: system
    static_configs:
      - targets: [localhost]
        labels:
          job: varlogs
          host: myserver
          __path__: /var/log/*log

Поле url укажите на ваш сервер Loki, __path__ задаёт, какие файлы читать, а labels — это те самые метки, по которым потом искать. Запустите Promtail через systemd. Файл positions.yaml запоминает, докуда логи уже отправлены, чтобы не слать повторно.

К выбору меток отнеситесь серьёзно с самого начала — это определяет и удобство поиска, и производительность Loki. Хорошие метки низкокардинальны: job, host, env, level принимают десяток-другой значений, и по ним удобно фильтровать. Плохая идея — класть в метку то, что имеет тысячи значений: идентификатор запроса, IP клиента, полный URL с параметрами. Такие данные должны оставаться в теле строки лога и искаться текстовым фильтром, а не превращаться в метку. Разница огромна: правильные метки делают Loki быстрым и экономным, а высококардинальные — раздувают индекс и кладут сервер. Заложив это в конфиг Promtail сразу, вы избавите себя от самой частой и болезненной проблемы Loki в будущем.

Подключение к Grafana и запросы LogQL

Откройте Grafana (если её нет — ставится как в связке с Prometheus). Добавьте источник данных: Connections → Data sources → Loki, в URL укажите http://localhost:3100 (или IP сервера Loki), сохраните.

Теперь в разделе Explore выберите источник Loki и пишите запросы на LogQL. Базовый запрос выбирает логи по метке:

{job="varlogs"}

Добавьте фильтр по содержимому — например, только ошибки:

{job="varlogs"} |= "error"

Оператор |= ищет строки, содержащие текст, != исключает, |~ работает по регулярному выражению. Можно считать частоту ошибок за интервал: count_over_time({job="varlogs"} |= "error" [5m]) — и вывести это графиком рядом с метриками. Именно так логи и метрики оказываются в одной панели, и вы видите, что всплеск ошибок в логе совпал со скачком нагрузки на графике.

Логика LogQL двухступенчатая, и это стоит понять сразу. Сначала селектор по меткам {...} отбирает нужные потоки логов — это быстро, потому что работает по индексу. Затем фильтры вроде |= просеивают содержимое отобранных потоков — это уже перебор строк. Поэтому эффективный запрос всегда начинается с узкого селектора по меткам, а не с попытки искать текст по всему объёму логов. Если вы напишете слишком широкий селектор и переложите всю работу на текстовый фильтр, запрос будет медленным на больших объёмах. Привыкайте сужать выборку метками в первую очередь — это и есть ключ к быстрой работе с логами в Loki.

Дашборд и хранение

Соберите дашборд: добавьте панель типа Logs с запросом по нужным меткам и панель-график с count_over_time для динамики ошибок. Так у вас перед глазами и живой поток логов, и тренд. Настройте фильтры по хосту и сервису через переменные дашборда, чтобы переключаться между источниками одним кликом.

За хранением следите через retention_period в конфиге Loki: 30 дней для большинства задач достаточно, дольше — растёт диск. Если логов очень много, ограничивайте объём и настраивайте компакцию. Loki хранит данные сжатыми, поэтому диск расходуется экономно, но бесконечно копить всё равно не стоит.

Чтобы собрать централизованные логи без возни с оплатой, нужен VPS в нужной локации. У MAATRIX сервер под Loki готов за пару минут, с оплатой картой РФ, СБП или криптой — иностранная карта не требуется.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под логи

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Чем Loki лучше Elasticsearch для логов?

Loki индексирует только метки, а не содержимое, поэтому ест в разы меньше ресурсов и диска. Для большинства задач сбора логов этого достаточно, а сервер не нужен мощный, как под ELK-стек.

Нужен ли Promtail на каждом сервере?

Да, Promtail (или агент Alloy) читает логи локально на каждой машине и шлёт их в центральный Loki. Один Loki принимает логи от множества Promtail с разных серверов.

Как искать по логам в Loki?

Языком LogQL в разделе Explore Grafana: выбираете логи по меткам {job="..."} и фильтруете по тексту оператором |=. Можно строить графики частоты событий рядом с метриками.

Как оплатить VPS под логи из России?

Картой РФ, по СБП, криптовалютой или токеном MAAT. Иностранная карта не нужна, сервер поднимается за пару минут.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.