Как мониторить сервера для себя?

 Публичный пост

У меня есть 3 небольших виртуалки в облаках, на которых крутятся пара пет-проджектов, один VPS для более серьезных штук и дома raspberry pi.

Хочу как-то централизованно мониторить всё это дело, чтобы вручную не ходить по SSH, не читать логи машин и контейнеров в less и смотреть метрики вручную.

Посоветуйте, как не очень всрато организовать мониторинг в одном месте, при условии, что я не настоящий девопс.

Смотрел в сторону ELK, в сторону Grafana/Loki/Prometheus, в сторону rsyslog, но так и не понял, что же мне подойдёт и не будет слишком enterprise.

Чуть более конкретно: 5 машин, десяток докер-контейнеров, ещё 2-3 веб-сайта на чистом nginx+php/flask (могу и докеризовать их).
Нужно смотреть все логи (системные и приложений) и метрики (cpu/mem/io/uptime) в одном месте.

И в идеале ещё и логи домашнего роутера (mikrotik, умеет в rsyslog слать).

Связанные посты
49 комментариев 👇
Nikita Kulikov Mobile/Android Engineer 13 мая 2021

Я использую это, запускается одной командой:
https://github.com/stefanprodan/dockprom

Из коробки мониторит все Docker-контейнеры и хост

Выглядит как-то так, можно в одно место запихивать разные VPS и мониторить на одном дашборде

  Развернуть 1 комментарий

выклянчу лайки и замотивирую себя
Если этот комент наберет 10 плюсиков, обещаю до конца следующей недели запилить пост "Мониторинг: быстро, дешево и просто. На примере Minecraft-сервера"

  Развернуть 1 комментарий

@LionZXY, Чем больше плюсов, тем быстрее пилить придется!

  Развернуть 1 комментарий

@LionZXY, судя по количеству плюсов, пост уже должен быть на подходе! :D

  Развернуть 1 комментарий

@denchickkk, пощадите, мне бы к своему дедлайну успеть : D
Лучше накидайте вопросов, пожалуйста, чтобы я точно на них в статье ответил

  Развернуть 1 комментарий

@LionZXY, Как эдак попроще автоматизировать домашний мониторинг?

  Развернуть 1 комментарий

@Mykola, А что не так с вариантом что я кинул выше? Что кроме этого хотелось бы услышать?

  Развернуть 1 комментарий

@LionZXY, как не пропустить пост?

  Развернуть 1 комментарий

@Baf, пост выше, в связанных.

  Развернуть 1 комментарий

@LionZXY, спасибо, выглядит классно. Но если я правильно понимаю, это всё ставится на одну машину и работает на ней же. Я бы хотел с нескольких машин собирать.

  Развернуть 1 комментарий

@anaiden, можно прикрутить и несколько серверов, правда это на голову сложнее (не одна команда и надо въезжать как это работает)

  Развернуть 1 комментарий

@anaiden, выше - просто собранные контейнеры настроенные для мониторинга. Основой всего этого великолепия служит prometheus, к которому можно подключать клиентов сколько угодно

  Развернуть 1 комментарий

@anaiden, если у вас несколько серверов и на них докер, то можно свормом раскатить на все ноды(node-exporter, cadvisor, etc)

что-то типа такого:

version: '3.6'

volumes:
    prometheus_storage: {}
    grafana_storage: {}

networks:
  monitor-net:

services:

  prometheus:
    image: $CI_REGISTRY_IMAGE/prometheus:dev
    volumes:
      - prometheus_storage:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    ports:
      - 9090:9090
    depends_on:
      - cadvisor
    networks:
      - monitor-net
    deploy:
      placement:
        constraints:
          - node.labels.mysql == true

  node-exporter:
    image: prom/node-exporter
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.ignored-mount-points'
      - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
    ports:
      - 9100:9100
    networks:
      - monitor-net
    deploy:
      mode: global

  alertmanager:
    image: $CI_REGISTRY_IMAGE/alertmanager:latest
    ports:
      - 9093:9093
    networks:
      - monitor-net
    command:
      - '--config.file=/etc/alertmanager/config.yml'
      - '--storage.path=/alertmanager'
    deploy:
      placement:
        constraints:
          - node.labels.mysql == true

  cadvisor:
    image: google/cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - 8080:8080
    networks:
      - monitor-net
    deploy:
      mode: global

  grafana:
    image: $CI_REGISTRY_IMAGE/grafana:dev
    depends_on:
      - prometheus
    ports:
      - 3000:3000
    volumes:
      - grafana_storage:/var/lib/grafana
    environment:
      GF_SECURITY_ADMIN_PASSWORD: admin
      GF_USERS_ALLOW_SIGN_UP: 'false'
      GF_AUTH_PROXY_ENABLED: "true"
      GF_AUTH_PROXY_HEADER_NAME: "X-WEBAUTH-USER"
      GF_AUTH_PROXY_HEADER_PROPERTY: "username"
    networks:
      - monitor-net
    deploy:
      placement:
        constraints:
          - node.labels.mysql == true

  Развернуть 1 комментарий

@LionZXY, Вместо Prometeus наверное подойдёт https://victoriametrics.com/, которая поменьше ресурсов требует

  Развернуть 1 комментарий

@LionZXY, а как его запустить с Windows контейнерами?

  Развернуть 1 комментарий

@LionZXY, я ставил себе отдельно графану и графит, так вот эти только двое оказались в итоге самыми жрущими штуками. Сколько этот сервис-то сам потребляет? Выглядит громоздко для небольших нод

  Развернуть 1 комментарий

@Kirk, можно не разворачивать самому, а попробовать бесплатный Grafana Cloud. На порядок проще, не жрёт ресурсы VPS, а для хобби может и хватить.

  Развернуть 1 комментарий

@madhead, о, не знал что так можно, попробую

  Развернуть 1 комментарий

@Kirk, а нет желания рассказать на примере сучары как ты статистику красиво собираешь? Я как-то видел ее у тебя на каком-то лендинге, и очень проникся

  Развернуть 1 комментарий

@benyamin, это просто https://www.metabase.com/

Он очень примитивный, но метрики ходит собирает из базы и это неэффективно по понятным причинам, может можно натравить на что-то другое.

Я бы назвал это метриками для проджект менеджеров, их там можно чуть ли не мышкой накликать.
Но выглядит конечно красиво, это да

  Развернуть 1 комментарий

@Kirk, а как собирать метрики по действиям юзеров? Логгировать каждое действие в базу?

  Развернуть 1 комментарий

@benyamin, по логике метабейза именно так, да

  Развернуть 1 комментарий

@Kirk, жесть какая.
Я пока что играюсь с posthog, выглядит довольно мило, правда мне не хватает кнопки "покажи ахуенные графики" и стату как раз по базе, как у метабейза

  Развернуть 1 комментарий

@benyamin, в большой проект я бы не стал тащить метабейз, либо только на базу-реплику)

  Развернуть 1 комментарий

@Kirk, не, у меня пет а-ля сучара - небольшой, но стараюсь делать ахуенно)

  Развернуть 1 комментарий

Если не хочется конфигурировать, что-то тяжелое и централизованное (для пет-проджектов это всегда оверкилл) есть netdata: https://github.com/netdata/netdata

Легковесная, zero-configuration, не требуется центральный сервер из коробки есть много чего. Единственное на счет просмотра логов не уверен (раньше точно не было, но может плагин завезли какой), но метрик (+алертинг по ним) там из коробки сильно больше чем даже нужно.

  Развернуть 1 комментарий

@ivanvg,
+1 проект не требующий централизованной инфраструктуры, но уже про логи: https://github.com/sevdokimov/log-viewer

  Развернуть 1 комментарий

Смотрел в сторону ELK, в сторону Grafana/Loki/Prometheus, в сторону rsyslog, но так и не понял, что же мне подойдёт и не будет слишком enterprise.

ИМХО это неплохой выбор. Докину ещё InfluxDB. Все три стека, в принципе, одной степени энтерпрайзности, и довольно высокой. Самому, конечно, настраивать и поддерживать это всё я бы не рекомендовал.

Но!

Grafana Cloud предлагает абсолютно бесплатно:

  • 10К таймсерий в проме
  • 50 гиг логов
  • 14-дневный ретеншн
  • Команду до трёх человек

И это здорово! Это абсолютно managed решение и оно не требует никаких телодвижений. Зарегался, получил токены, можно слать данные. Я рекомендую, сам использую для хобби в похожих условиях, только у меня JVM-стек.

Из удобств: туда можно абсолютно легально завести метрики вообще со всего, что у тебя есть. Все проекты, сколько бы у них ни было ресурсов, можно держать в одном месте и коррелировать. Grafana создана для этого. В отличие от той же netdata, которая хороша, но больше как-то предназначена для мониторинга на местах, на конкретных серверах (там есть ре-стриминг, но его ещё настраивать надо всюду).

Из недостатков: если твои проекты крутятся за NAT и у них нет внешнего IP, Prometheus, использующий pull-подход, не сможет забрать метрики. Решается либо выбором стека с push-подходом (Influx, но тут я не знаю бесплатных managed решний для хобби) либо использованием специального push gateway.

Grafana, Influx, Kibana - это уровень дешбордов и алертов. Данные в них можно закидывать из кучи источников. Grafana Cloud Agent, Telegraf, node / process / docker -exporter - это агенты которые будут собирать и экспортировать разные метрики. Их десятки, выбор зависит от стека, pull / push, форматов, задач, требований. Нужно выбирать конкретно, но выбирать всегда есть из чего.

В добавок ещё сами приложения могут экспортировать специфичные для языка (типа количество сборок мусора) или бизнеса (завершённые транзакции) метрики. Например для Flask нагуглилось https://pypi.org/project/prometheus-flask-exporter - это экспортер метрик из Python / Flask в формате прома.

  Развернуть 1 комментарий

Для задач, которые запускаются по расписанию, довольно удобно использовать https://healthchecks.io/

  Развернуть 1 комментарий

@werth,
хорошо меня выручает, рекомендую

  Развернуть 1 комментарий

@werth, а расскажи плс - насколько удобно, чего не хватает, платишь ли или хватает бесплатной версии? за какие фичи платил бы?

  Развернуть 1 комментарий

@ztsv, удобно, в основном тем, что практически не нужно настраивать и все приходит на почту.

Я на самом деле очень мало использую - только чтобы следить за парой бекапов на raspberry pi, да и то, кстати, подзабил на них, надо бы оживить.

Бесплатной версии хватает, платить бы наверное не стал на текущий момент. По сути все что мне нужно - это получить уведомление, что процесс не отработал. Если бы не нашел эту штуку, наколхозил бы себе бота для телеграма, наверное.

  Развернуть 1 комментарий

@ztsv, для похожих целей можно использовать noti, который умеет слать алерты в телеграм, полностью бесплатно и селфхостед

https://github.com/variadico/noti

  Развернуть 1 комментарий

@ArthurTazhitdinov, да я сам пилю довольно похожий проект как хобби, только более продвинутый

  Развернуть 1 комментарий
Rail Hamdeew Программист 13 мая 2021

Логи из Docker-контейнеров можно отправлять в Google Cloud. Как раз недавно писал об этом пост

Для мониторинга доступных ресурсов можно использовать старый добрый Zabbix. К нему есть уйма плагинов для снятия необходимых метрик.

Для мониторинга доступности я использую сервис Monitorus. Стоит копейки, умеет слать смс или сообщения в телегу в случае недоступности хоста.

Также ваш хостинг провайдер может предоставлять панель с метриками виртуальной машины. Возможно вам будет достаточно и этих данных)

  Развернуть 1 комментарий

Пишу по выходным систему для мониторинга https://sensorpad.io

Надеюсь, соберусь мыслями и напишу большой пост в клуб про это, но пока можете поиграться, если не лень.

Кстати, вот как Sensorpad мониторит сам себя:

  Развернуть 1 комментарий
Nikita Galaiko founding software engineer 13 мая 2021

хостед варианты:
https://newrelic.com
https://www.datadoghq.com

селфхослед, как ты и сказал:

  • elk
  • loki/grafana/prometheus

я бы развернул loki/grafana/prometheus на одной vps. но если головной боли поменьше хочется, лучше взять хостед, задеплоить их агентов на все машины и не париться

  Развернуть 1 комментарий

Шеймлесс плаг: забыл отечественный https://okmeter.io

  Развернуть 1 комментарий

если нужно собирать логи: papertrail

  Развернуть 1 комментарий

Селхостед альтернатива Datadog и NewRelic - https://github.com/SigNoz/signoz

  Развернуть 1 комментарий

Неплохой вариант - Check_MK. Прост в установке и добовлении хостов в мониторинг, интеграция с Opsgenie для получения уведомлений, умеет в логвотч и инциденты по ошибкам в логах.

  Развернуть 1 комментарий
Арсений Черняков чиню самолеты на лету 15 мая 2021

А за рекомандацию настроить zabbix тут погонят обратно в мезозой? Я мониторю им домашний ролтор mikrotik, пару домашних виртуалок, пару облачных, домашний esxi, сервер в ДЦ. На всем, что мониторится (кроме роутера) стоит агент, жрет немного. Умеет в алертинг.
Для большинства разных штук есть плагины. Нужно, чтобы либо сервер, либо клиенты имели белый ip.

Но он скорее не про логи, а про ресурсы и алертинг - что в целом гораздо правильнее, чем писать только парсеры логов.

Для логов, наверное, можно заюзать стоящий везде rsyslog / syslog-ng и централить в одно место с elk.

  Развернуть 1 комментарий

Здесь уже говорили про бесплатную Grafana Cloud — тоже ее использую, топ решение для небольших пет проектов.

Еще бы посоветовал посмотреть на их плагин для синтетического мониторинга, позволяет спать еще спокойнее, когда знаешь, что сервер не валяется не только по своим метрикам, но и нормально доступен из внешнего интернета — https://grafana.com/grafana/plugins/grafana-synthetic-monitoring-app/

  Развернуть 1 комментарий

Selfhosted:
https://www.librenms.org/
Умеет собирать логи в кучу

  Развернуть 1 комментарий

Вот такое ещё есть - https://www.nginx.com/products/nginx-amplify/

  Развернуть 1 комментарий

В NGINX Amplify только 5 хостов можно добавить

  Развернуть 1 комментарий
Valery Frontend developer | Angular 19 мая 2021

Рекомендую посмотреть

  Развернуть 1 комментарий

Я тут пару дней назад написал пост о том, как я делал сервис для мониторинга:

https://vas3k.club/project/10256/

  Развернуть 1 комментарий

Если пойдешь в сторону прометея, я всем кидаю вот этот сахар https://awesome-prometheus-alerts.grep.to

Все свои наработки туда залил

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб