LINUX.ORG.RU

Salmon — значок в трее и уведомления о проблемах с systemd-сервисами и не только

 , , , ,

Salmon — значок в трее и уведомления о проблемах с systemd-сервисами и не только

0

4

Опубликована версия Salmon 1.1.1 – простой системы мониторинга локальных и удаленных Linux-машин.

Идея проекта появилась после того, как я обнаружил, что на одной из моих машин systemd-сервис Syncthing не работал уже несколько недель, а я об этом ничего не знал и понял это лишь позднее, по косвенным признакам. Разворачивать полноценный стек мониторинга в моем случае было избыточно - мне просто хотелось иметь значок в трее, который начинает мигать и напоминает о проблемном сервисе, пока инцидент не будет устранен или временно отложен. Минимально работоспособная версия Salmon была написана еще в 2021 году, после чего несколько лет использовалась только для собственных нужд. Теперь проект приведен в более законченный вид и опубликован.

Основные возможности:

  • Наблюдение за состоянием systemd-сервисов;
  • Периодический запуск произвольных скриптов для проверки состояния системы;
  • Объединение инцидентов с нескольких машин в одном приложении;
  • Значок в трее, уведомления на рабочем столе и небольшое нативное окно;
  • Возможность временно отложить отдельный инцидент.

Проект состоит из двух компонентов: фоновая служба salmon устанавливается на каждую наблюдаемую машину, выполняет проверки и сообщает об обнаруженных инцидентах; а десктопное приложение salmon-watch подключается к одной или нескольким таким службам и объединяет полученные данные в минималистичном интерфейсе.

Для подключения к удаленным машинам поддерживаются автоматически управляемые SSH-туннели, а также прямое соединение с использованием TLS и аутентификации по bearer-токену.

Серверная часть написана на Go, десктопное приложение - на Rust с использованием Slint. Проект распространяется под лицензией BSD 2-Clause.

>>> Демо gif

>>> GitHub проекта



Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 10)

админы локалхостов в восторге

gagarin0
()

Разворачивать полноценный стек мониторинга в моем случае было избыточно - мне просто хотелось иметь значок в трее

Во-во. Точно такое ощущение у меня было, когда я хотел поднимающийся с полпинка шареный блокнотик с клипбордом для маленькой локалки, а мне всем ЛОРом советовали кто Некстклауд, кто Упытор Ноутбук, кто Жоплин Сервер (ничего против перечисленного не имею, это очень полезные инструменты, но в моём случае это была пушечная батарея супротив воробья).

А ты молодец, не только захотел, но собрался и написал. Уважаю.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 2)
Ответ на: комментарий от TI_Eugene

У него узкоспециализированная тулза - следить за сервисами systemd, а не логи мониторить. Далее первого предложения читал?

Gonzo ★★★★★
()

trollmode> Go вместо Rust? Нет пути!

unclestephen ★★★★★
()
Последнее исправление: unclestephen (всего исправлений: 1)

Вещь полезная. Пользуюсь Beszel и навайбкоженной выезжающей панелькой с важными показателями. Вообще, с приходом ИИ ценность кода резко упала. Теперь даже столяр может себе за пару дней накодить программу управления и мониторинга деревообрабатывающим станком с контролем через облако, сбором статистики и голосовым управлением.

Наступает эпоха одноразового кода. Надо что-то - навайбкодил. Не надо - выбросил в помойку.

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 3)

А напрямую через dbus состояние получать не вариант без демона-прослойки, или там не всё доступно от юзера?

Radjah ★★★★★
()
Ответ на: комментарий от Beewek

Не на помойку, а на гитхаб!

такими темпами это скоро будут синонимы.

steq
()
Ответ на: комментарий от Radjah

А напрямую через dbus состояние получать не вариант без демона-прослойки, или там не всё доступно от юзера?

Доступно от юзера. В дефолтной конфигурации, демон тоже от юзера работает (специально созданного), не от рута.

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

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

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 2)
Ответ на: комментарий от dimonomid

Так-то dbus и по сети работает, но через авторизацию. Сейчас попробовал свою локалку через busctl потыкать, как минимум дерево без thermal и wifi выдаёт.

Не покидает ощущение, что получается zabbix на минималках. >_<

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Так-то dbus и по сети работает, но через авторизацию. Сейчас попробовал свою локалку через busctl потыкать, как минимум дерево без thermal и wifi выдаёт.

Да, dbus по сети технически доступен, но позволяет проверять только сервисы, а не произвольные exec-проверки (которые мне тоже важны, хотя их, конечно, при желании тоже можно обернуть в сервисы). Мне проще было не выставлять системную шину наружу, а поставить маленький агент с TLS или SSH-туннелем. Но вариант, да.

Не покидает ощущение, что получается zabbix на минималках. >_<

Zabbix это enterprise, как они сами о себе и говорят. Вот вообще не хотелось всего этого энтерпрайза. Хотелось простую иконку в трее: зеленая - все ок, мигает желтым или красным - не ок. Zabbix иконку в трее и не умеет, насколько я знаю. Энтерпрайзу другое нужно, закономерно.

dimonomid
() автор топика
Ответ на: комментарий от No_name321

Облачная графана есть. Она бесплатная если хостов и истории немного.

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

Опять-таки: хочу простую иконку в трее. Зеленая или не зеленая. Все. А графана другие задачи решает, и иконку не умеет.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)

мне нравится идея, меня смущают только:

не припомню, чтобы сервисы «падали» вот прям так из-за чего-то, и потом это:

StartLimitBurst=5


Restart=on-failure 
RestartSec=10

а так, прикольно, через dbus и правда, много чего можно вытащить – хорошая идея в комментах

powerguy ★★★
()
Ответ на: комментарий от powerguy

не припомню, чтобы сервисы «падали» вот прям так из-за чего-то

Ну, завидую. У меня падают иногда.

Та моя оригинальная проблема с сервисом Syncthing была в том, что он по умолчанию сконфигурирован перестать работать, когда свободного места становится меньше, чем 1%. И если размер диска 500ГБ, то 1% - это 5ГБ, и меня это не беспокоило. Ну а Syncthing выключился, и у меня там бинарные файлы не синхронизировались пару недель, пока я не спохватился. Потом разбираться пришлось, что куда вручную перенести, что новее а что старее, итд.

На вскидку помню еще, что на одном сервере certbot сломался, и не обновлял SSL сертификат. Это уже было после того, как я минимальный Salmon написал, так что благодаря ему я это вовремя заметил (раньше, чем предыдущий сертификат истек), и был рад.

Было и еще что-то, не помню уже.

Ну и кроме systemd сервисов, Salmon же еще может любые скрипты выполнять периодически. Дефолтная конфигурация проверяет кол-во свободных мегабайт так:

df -Pm / | awk 'NR == 2 { print $4 }'

И если меньше 100, то алертить начинает. Тоже выручало пару раз, когда на каком-нибудь маленьком сервере место закончится неожиданно.

С этими произвольными скриптами вообще много чего можно придумать. RAID health checks итд. У меня даже есть скрипт, проверяющий штрафы на мою машину (это не в России; я не в курсе, предоставляет ли ГИБДД подобный API) - я его приделал к Salmon, чтобы меня заалертил :) Т.к. тут есть местные проблемы со своевременными уведомлениями о штрафах. Необычный use case, но мне подходит.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 3)
Ответ на: комментарий от powerguy

через dbus и правда, много чего можно вытащить – хорошая идея в комментах

Оно через dbus и вытаскивается, если что; только не в самом GUI приложении, а в демоне.

Вытаскивать в самом приложении мне не нравится идея: мне неуютно выставлять весь dbus наружу, пусть и с аутентификацией итд. У salmon API вообще read-only, то есть attack surface гораздо меньше, чем у dbus.

Ну и еще, забегая вперед, я хочу это на Qubes запилить рано или поздно - там dom0 (где десктопное окружение работает) вообще не имеет доступа в интернет, т.е. нужно будет делать отдельный сервис типа реле, который подключается к демонам salmon, аггрегирует все инциденты, и уже потом по qrexec (Qubes-специфичный протокол, для обмена данными между VM) передает это в GUI-приложение. Так что в Qubes, отдельный демон для сбора данных - единственный вариант.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 2)
Ответ на: комментарий от unclestephen

trollmode> Go вместо Rust? Нет пути!

Ну, как указано в новости, Rust тут тоже есть. GUI-приложение на нем написано.

dimonomid
() автор топика
Ответ на: комментарий от dimonomid

это не в России; я не в курсе, предоставляет ли ГИБДД подобный API

На Госуслугах само придёт. С оповещением на почту.

bbc69
()
Ответ на: комментарий от unclestephen

А чем можно такие гифки записать? тоже хааачу

Я использую https://github.com/phw/peek

Проект не поддерживается уж год (автор объясняет, почему), но я до сих пор не встречал ничего более удобного, особенно если нужно записать только часть экрана, а не весь. Так что пока работает - буду использовать.

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

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 2)
Ответ на: комментарий от bbc69

С оповещением на почту.

А мне вот как раз не нравится «оповещение на почту», т.к. я его прочитаю и, возможно, забуду. Мне нужно, чтобы мигало постоянно. Ну или если я его отложу (snooze) например на пару дней, то через пару дней чтобы снова мигать начало. Я придирчивый и забывчивый.

dimonomid
() автор топика
Ответ на: комментарий от imul

Разворачивать мониторинг посчитал избыточным и… написал свой.

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

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)
Ответ на: комментарий от dimonomid

Так что пока работает - буду использовать.

так потом гопатычем доточить, если работать перестанет

unclestephen ★★★★★
()
Ответ на: комментарий от dimonomid

Я для себя настроил задержку «Прочитано». Т.е. он не сразу почту считает прочитанной, а через какое-то время (15 или 30 секунд, не помню уже). Так что непрочитанные письма глаза мозолят, тем более, что почту я всегда держу открытой.

Для напоминалок я открыл для себя KAlarm, но это уже другая история. Да и штраф заплатить - минутное дело. А если смелый и карту на госуслугах сохранишь, итого меньше.

bbc69
()
Ответ на: комментарий от dimonomid

Да я всё понимаю. Все линуксоиды рано, или поздно, но пишут свой мониторинг. Хотя некоторые не доживают до этого.

imul ★★★★★
()

Смущает то, что использовано два разных языка (Rust и Go).
Из-за этого мейнтейнерам будет вдвое сложнее это опакечивать.
Программа попадёт в меньшее количество дистрибутивов Linux, чем могла бы.

Saakx
()
Ответ на: комментарий от Saakx

Перепиши наоборот: гуи на го, основу на расте. Тогда мейнтейнеры смогут выбирать какой язык им удобнее и пользоваться обоими.

firkax ★★★★★
()
Ответ на: комментарий от Saakx

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

bbc69
()
Ответ на: комментарий от zystem

https://nagstamon.de/ - умеет добавлять иконку в трее для целой кучи мониторингов на выбор.

Видел я его. Иконку в трее он умеет, но сам за systemd-сервисами не следит. Ему нужен отдельный сервер вроде Nagios/Icinga/Prometheus/Alertmanager - то есть снова энтерпрайз-стек. Ну и ни одна из этих систем мониторинга из коробки не поддерживает проверку вида «все включённые systemd-сервисы должны работать», и легко это не настроить, насколько мне известно.

dimonomid
() автор топика
Последнее исправление: dimonomid (всего исправлений: 1)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.