Проект: Мониторинг серверов  Публичный пост
21 августа 2022  830
Мониторинг серверов

Всем привет. Давненько ничего не писал длиньше пары фраз в слаке, пришла пора, поехали…

Бросив играть в Дота 2, обнаружилось что каждый день у меня есть несколько свободных часов которые мне срочно надо на что-то потратить. А на что потратить свободное время программисту? Естественно, на очередной пет-прожект который должен принести кучу денег :)

Расскажите о себе и сути проекта?

Как появилась идея? Что вдохновило?

На всех проектах, с которыми мне приходилось работать была потребность в мониторинге. Так как я программист, то это всегда был джентльменский набор - sentry плюс что-то для мониторинга общего состояния сервера, например elk.

А как быть если вы менеджер / продакт_оунер?

Ок, устанавливаем sentry настраиваем оповещения - получаем кучу оповещений, первые Х раз кошмарим разработчика вопросами - в моём случае это в 95% были проблемы, не относящиеся напрямую к функционалу сервиса, например - если брать backend - ошибки в сторонних сервисах, ошибка подключения https, бывают, конечно и действительно ошибки требующие внимания, но, такие оповещения явно не для менеджеров.
Хорошо, есть grafana / alerta и прочее, но что если вы маленький сервис / сайт который живет на небольшой VPS - а на девопсов которые будут поддерживать этот зоопарк у вас нет средств, то такой вариант вам не подойдет.
Несколько лет назад, мне приходилось столкнуться с проектом, где в качестве мониторинга использовался okmeter, и мне очень понравилось, как оно работало и настраивалось. Захотелось сделать что-то похожее.
Какие основные функции хотелось в MVP?
⁃ Установка агента на сервер одной командой
⁃ Начинает работать без настроек
⁃ Несколько базовых тригеров для оповещений
⁃ Оповещения в телеграм и на email

Что вошло в прототип и сколько времени на него было потрачено?

В прототип вошел сбор логов с nginx, сбор общих метрик сервера - свободное место / загрузка ЦПУ. Потрачено было около месяца разработки одного меня, это если считать дни, когда я действительно занимался проектом, а не смотрел сериальчики и не залипал в ютубе.

Какой технологический стек вы использовали? Почему?

Думаю, что тут будет самое интересное, как минимум, поучительное! Стэк - изначально, хотелось, чтобы это был мини проект на пару недель не дольше. Поэтому был выбран Django на стандартных шаблонах. Был подключен django-crispy-forms, django-table2 - на этом стэке была написана авторизация, страница со списком серверов, просмотр сервера. И затем я начал добавлять разные графики, таблицы, делать обновление данных…
Я осознанно не хотел использовать SPA, я хотел просто, без ваших вебпаков и прочего - я прекрасно понимаю, о чем говорю :) у меня есть куча опыта разработки на много чём, включая angular, react, vue. В этот раз я хотел без них. Так вот, в процессе добавления таблицы с сортировкой, пагинацией - я понял, что придумываю велосипед, и вместо того чтобы делать что-то интересное, делаю то, что сделано миллион раз.
Решение пришло быстро (да и к тому же я так уже делал) подключаем Vue на существующую страницу и используем для конкретного компонента, например, для таблицы… Ок, подключаем vue прямо с cdn (я же не хочу заморачиваться с вебпаком), туда же подключаем bulma (не с нуля же рисовать ui) и пробуем взлететь… Взлетаем, но весь процесс заставляет меня страдать, так как вебпак подключать я не хочу, потому что не хочу получить ацкую смесь django / weback / vue (я видел что так работает клуб, но я так точно не хочу :) ) поэтому пишем на чистом js, без ваших там async / await и тому подобного…

Спустя пару дней страдания весь написанный фронт летит в мусор, устанавливается drf, создаётся отдельное приложение, уже на ангуляр (typescript - one love) туда же подключается taiga ui (спасибо ребятам и Тинькофф, перепробовал штук 5 разных ui-kit, но этот оказался лучшим). SPA опять победил, ну ок, зато теперь я кайфую, когда пишу код, а не пытаюсь натянуть сову на глобус.

А да, чуть не забыл, еще же для мониторинга нужен был агент, который пользователи будут устанавливать себе на сервер и он будет слать данные. Тут вопрос технологий не стоял, C/C++ я не умею и не хочу уметь, а вот Go несколько раз ковырял и мне понравилось. Берём google, пишем go how to listen nginx log, go how to install as a service, копируем куски кода - получаем рабочий агент.

С какими самыми неожиданными трудностями пришлось столкнуться?

Сложнее всего оказалось отлаживать сам агент, так как опыта с go у меня минимум. Агент всегда висит в памяти и не должен жрать много памяти или тратить много цп - важно не забывать закрывать все исходящие соединения, типа

response, err := http.DefaultClient.Do(request)
if response != nil {
    defer response.Body.Close()
}

Так же было решено не слать каждое отдельное событие из агента, а группировать их по path / status / datetime и слать их пачками. Я же рассчитываю, что у меня будут тысячи пользователей…

На сервере всё, довольно просто, я не стал использовать influxdb или что-то в этом роде на старте. Думаю, что Postresql более чем достаточно, как минимум до первых платящих пользователей. Да и по условиям, которые сам и придумал, в сервисе хранятся данные только за один месяц. Апишки отдающие данные для графиков во всю используют постгресовский Trunc и чувствуют себя отлично (возможно, потому что пользователей пока нет :))

С клиентом проблем совсем не было, разве что при выборе ui-kit. Мне нравится Bulma (https://bulma.io/), есть отличная адаптация для Vue, но вот для Angular я не нашел ничего хорошего. Написал в гугле angular ui kit 2022 и пошел тестить один за одним, но всё казалось не тем, где-то дизайн не тот, где-то надо писать вывод ошибок для форм, а мне лень… Тогда вспомнил что ребята из Тинькофф паблишили свой ui-kit, попробовал, понравилось, на нём и остановился - выглядит отлично, сам подход к компонентам мне тоже понравился.

Сколько потратили и заработали? Есть идеи как это можно монетизировать?

Пока не сколько не заработал, но планирую разбогатеть на этом сервисе, так как ничего раньше не было (шучу, знаю как минимум парочку таких сервисов). Монетизация - не вижу никаких других вариантом, кроме как просить денег за каждый добавляемый сервер. Так как мои расходы будут прямо пропорциональны их количеству. Крутится проект сейчас на моём маленьком VPS где крутится ещё куча всего. Поэтому расходов пока нет, разве что - время.

Какие планы на будущее?

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

Нужны ли какие-то советы или помощь Клуба?

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

Аватар 💀 Юзер-зомби
💀 Юзер-зомби @deleted
None[object Object]
📍None, Россия

Аккаунт-заглушка для удалившихся или куда-то пропавших юзеров.

Связанные посты
14 комментариев 👇

С точки зрения менеджмента первый вопрос - это вопрос рисков. Не уронит ли агент Noname компании наш сервер? А также нет ли в нём потенциальных дыр, через которые можно получить доступ к нашим данным.

Второй вопрос - вопрос документации. Если я бы захотел настроить агента сам, то мне потребовалась бы очень подробная документация с картинками и скриншотами. Я пробовал поднять zabbix на убунте, не смог. Это должна быть реально user-friendly установка.

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

Вопрос четыре - что на счет нестандартных отчетов? Например, у нас есть серия декораторов, которые висят на Django вьюхах, методах моделей и middleware. Эти декораторы умеют накапливать статистику и слать её через https в заббикс. То есть, мы следим за критическими местами и лендингами прямо из Django.

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

@shultais, спасибо за вопросы.

  1. Да, это, пожалуй, очень сложный и важный вопрос. К сожалению, я не представляю как гарантировать что в агенте нет дыр или что он не уронит сервер. Думаю, такое не возможно. Так как даже выложи код агента в опенсурс - это ничего не даст... Можно посмотреть слушает ли агент какие то порты в системе, и на основе этого сделать выводы, но опять же, гарантии нет. Я предлагаю решение, использовать http для отправки данных, это даст возможность мониторить отсылаемые данные - но врятли, кто-то будет этим заниматься... Опять же, агент не требует настроек - значит, он не сможет (понимаю что спорно) получить доступ к БД и загрузить её куда то...
  2. Агент, да и сервис, предлагается как устанавил и забыл. Не предусматривается возможность настраивать агент. Хотелось бы в дальнейших версиях видеть автообновление агента, но тут вспоминаем про пункт 1. Пока концепция - только ручное обновление агента, и запрет выполнения любого потенциально опасного кода через агента.
  3. Развитием продукта занимаюсь я один :) сейчас я сделал MVP, и хочется понять - в какую сторону можно развивать продукт, и есть ли интерес.
  4. Не стандартные отчеты не подходят под саму идею сервиса. Я планирую развивать сервис как раз как набор стандартных отчетов на основе установленных утилит в системе (nginx, uwsgi, php-fpm etc). Например, про django вьюхи - в следующих версиях хотелось бы добавить response time парсинг из логов nginx - тогда можно будет настроить тригеры на определенное поведение времени ответа. Это будет универсально для любой системы, не зависимо django у вас, или wordpress и не потребует ни каких дополнительных действий. Но, если вы собираете кастомные метрики - тогда, тут вам уже нужно что-то явно сложнее моей системы.
  Развернуть 1 комментарий

@zghMETd3rxtN1Ym1,

  1. есть аудиторы, которые смотрят на потенциальные бреши и дают рекомендации (и сертификаты) что нет так
  2. ручное обновление не оч масштабируемая вещь все ж таки
  3. если еще не публиковался на indie hackers, попробуй - там достаточно нетоксичная аудитория, которая тоже сможет помочь/подсказать. Ну или найти соотв. сабреддит. Также может сработать в холодную писать в линкедине потенц. ЛПР и попробовать им попитчить (ну или наоборот кстати - поговорить об их болях и подумать, решает ли твой продукт их. И дальше уже думать, стоит ли тюнить и тд)
  Развернуть 1 комментарий

Возможно, вам стоит познакомиться и скооперироваться: https://vas3k.club/project/10256/

По-существу проекта: я не понял, кто твой клиент? Какую попоболь ты закрываешь? Как до сих пор твои клиенты живут без твоего сервиса?

Я пытался ответить на твои вопросы сам, но не смог. Навскидку кажется, что:

  • крупняку это не нужно — причины хорошо описал Никита @shultais.
  • айти-компаниям (хостинги, вебдев и т.п.) это тоже не нужно, т.к. им проще вложиться один раз в настройку своего Zabbix-подобного решения и потом использовать его для своих нужнд + предлагать своим клиентам
  • мелким тоже скорее всего не нужно: они полагаются на мониторинг от хостинг-провайдера, если вообще заморачиваются
  • профинансированные стартапы берут себе Датадог какой-нибудь или один из 100500 других модных из коробки решений за 50-100 баксов в месяц
  • стартапы без денег не покупают вообще никакого, т.к. у них если что-то и падает, то они узнают об этом сами или когда кто-то им зарепортит в дискорд условный

Так кто же твой клиент?

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

@zahhar,

  1. Крупняк - не подходит, так как у них есть девопсы которые уже давно настроили elk / zabbix и тд.
  2. Совсем мелкие - использующие виртуальные хостинги для пхп тоже мимо, так как не будет технической возможности установить агент
  3. Средние - те кто уже хостится на своём сервере или виртуалке, возможно - какой то интернет-магазин, новостные порталы. Это те, куда я хочу попасть, те кто сейчас использует сервисы типа https://uptimerobot.com/, https://statuscake.com/, но они поняли что просто понимать доступность ресурса не достаточно, и не работать может одна конкретная страница, например, оформления заказа. Какой выбор может быть у них? Sentry - не совсем про то, это всё таки скорее для разработчиков, настроить elk или что-то подобное - нанять один раз девопсов чтобы настроили, а потом оно будет работать - нет, так не бывает, это всё будет требовать поддержки. Хостинг провайдер предоставляющий мониторинг того-же nginx - я не встречал.

Это я у себя в голове так нарисовал своих клиентов, возможно я ошибаюсь, и людей, имеющих свой интернет-магазин/портал/сайт хостящийся на своём сервере:
а) Не существует
б) Такое маленькое количество, что проще не учитывать
в) Существуют, но у них есть другие решения для отслеживания состояния ресурса
Поэтому было бы здорово послушать ваше мнение

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

@zghMETd3rxtN1Ym1, моё "экспертное" мнение не имеет ценности, потому что я не твой клиент.

Что я делаю в таких случаях (в своих пет-проектах) — иду и общаюсь с потенциальными пользователями, чтобы проверить свои догадки.

Ты сделал некое предположение: твой клиент — бизнес, который хостится на bare metal VPS и у кого нет своего ИТ-отдела. Теперь дело за малым — найти 10 таких бизнесов и поговорить с ними. Желательно вживую — в формате интервью. Подготовь 3-5 вопросов и задай этим людям. Если вживую никак, то можно сделать опросник на Гуглоформах каких. Людей найдёшь в соцсеточках типа Линкедина, Реддита и т.п. Поговорив с 10 людьми у тебя будет вагон инсайтов для дальнейшего развития продукта или для пивота в другую сторону, ну или ты поймёшь что идея бесперспективная и боль не такая острая или уже закрыта другими решениями.

Кстати про другие решения.

Ситуацию "одна страница не работает" закрывают Гугл Аналитикс / Яндекс Метрика. Если это важная страница, то обычно на ней есть какой-то трафик и когда он пропадает — это сразу становится заметно. Плюс там встроенные емейл-уведомления есть, если трафик пропадает. Интернет-магазинщики этим пользуются активно. Понятно, что это костыль — оповещения всё равно с задержкой приходят.

Ситуацию с мониторингом nginx + linux + php + mysql (а это тпичный стек для интернет-магазинов и информационных сайтов — Битрикс, Друпал, Вордпресс, Магенто, Опенкарт, престошоп и всё вот это вот), то там есть https://amplify.nginx.com/ — он бесплатный для 5 хостов на аккаунт.

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

@zahhar, Я думаю это отличный следующий шаг, спасибо. Не очень понимаю как может закрыть эту потребность аналитикс/метрика, разве что увидеть падение на каком то шаге в воронке. nginx amplify - да, спасибо за наводку, обязательно посмотрю.

  Развернуть 1 комментарий
Pasha Trukhanov Бывший double-стартап-CEO , экс-теор.физик, софтвер инжинер в Дата саенсе, genetic engineer wannabe 23 августа 2022

Лол, коммент вида "пиарюсь но не получу с этого деняк": мы примерно из таких же посылов делали https://okmeter.io - ставится без агента, мониторит логи и прочее "бм верхнеуровневое" а не только технические метрики, нужен "прошаренному" средняку (хороший анализ от Захара показывает что рынок, м, сложный). С окметром я больше не связан, поэтому за рекламу прошу не считать.
Агент кстати тоже написан на Го, сам детектив всякие запущенные нжинксы монги и пыхи. Начинали его мы делать правда в 2013-14 году и поэтому бекенд хранилище метрик тоже писали свое, а не брали просто Прометеус (или аналог) - ок ещё не было их.

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

@pasha_tru, а это был не твой продукт? Если да, поделишься почему решил выйти?

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

@Kir, рынок к 2018/19 году как говорится "консолидировался" - если раньше у нас получалось побороться за клиентов (в нашем масштабе) с датадогом, забиксом, соларвиндом и ТП, то постепенно станоилось все сложнее. Надо было сильно пивотиться и фокусироваться - так как по жадности взяли себе слишком большой продуктовый фронт, а команду готовую это сделать мы построить за это время не смогли, был паралич управления небольшой, тк мы с кофаундером устали друг от друга и от борьбы за клиентов итп.
И технического челенжа для меня не было к тому моменту - систему хендящую миллионы метрик в секунду я уже заархитектил.
Тогда я отошёл от проекта, а потом через год мы его продали одному из топ клиентов, тогда я формально вышел полностью.

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

@pasha_tru, интересно, спасибо!

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

@pasha_tru, здорово :) много смотрел на окметер, в том числе на процесс установки агента. Странно, я решил что он был на python, но, видимо, на python там только супервизор поверх агента... А нет ли где то ваших лекций о технических аспектах этого проекта? Я так думаю что окметер (да как и любой другой большой сервис) требует команду разработчиков, маркетинга, поддержки, что выливается в серьезные траты и требования к заработку, так как свой сервис я делаю один, при минимальном количестве платящих клиентов - сервис будет себя окупать и я буду счастлив :) у меня нет цели стать окметром и конкурировать с датадог и прочим, есть цель взять несколько из запущенных приложений, типа нжинк, пхп, монг - собрать их логи, показать пользователю максимально кратко и полезно инфу и на этом успокоиться )

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

Мне кажется, что это ошибка не просить деньги в самом начале.

Вдруг все захотят твой продукт бесплатно, но потом никто не захочет платить? Нужно сделать минимальный набор фич для тестирования гипотезы, и пытаться сразу находить людей, которым это может быть нужно и просить у них денег. Плюс человек будет понимать, за что он платит деньги и будет давать более качественный фидбек)

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

@kkobylyanskiy, это прямо совсем круто, если сразу найти платящих клиентов (возможно так и надо конечно), но мне пока видится путь - что найти хоть каких то клиентов от которых можно получить фидбэк. Сейчас, фидбэк для меня полезнее денег, хотя тут я согласен, фидбэк человека использующего сервис бесплатно и платящего - может сильно отличаться...

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

😎

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

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


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