LINUX.ORG.RU

Выпуск минималистичной программы для мониторинга jsonmon 3

 jsonmon,


0

2

Выпущена третья версия минималистичной программы для мониторинга jsonmon. Программа написала на языке Go, и функциональность её довольно скромна по сравнению с системами мониторинга вроде Nagios или Zabbix. С другой стороны, jsonmon значительно проще конфигурировать. Иными словами:

  • У jsonmon есть конфигурационный файл, в котором описываются web- и shell-проверки.
  • У jsonmon есть JSON API для просмотра статуса и простой пользовательский интерфейс к нему.
  • jsonmon умеет отправлять уведомления по почте и/или с помощью плагинов (в комплекте плагин для Slack).
  • jsonmon не требует ничего, кроме Unix-like-системы, /bin/sh (для shell-команд) и настроенного sendmail (для работы почтовых уведомлений).

В настоящее время официально собираются релизы для Linux и OS X. В планах создание RPM/DEB-репозитория для удобной установки. Переход к версии 3 обусловлен упрощением формата конфигурационного файла с целью избежать ошибок из-за неверного задания конфигурации.

P.S. По следам дискуссии на OpenNet ещё два сравнения:

  • от Monit эта программа отличается тем, что ставится не обязательно на тот сервер, что надо мониторить (удобно, если надо мониторить падение всей площадки, например);
  • от Munin — ориентацией на уведомления, а не на построение графиков.

>>> Документация

anonymous

Проверено: Falcon-peregrinus ()
Последнее исправление: Falcon-peregrinus (всего исправлений: 3)

Ответ на: комментарий от Pavval

Разрешаю реализовать на этом любой мониторинг чего угодно.

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

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

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

И ещё потом километровыми однострочниками из всех утилит и перла сверху выгрепывать значения, чтоб ваще дух юникса и все дела.

anonymous
()

написала на языке Go

М-да

от Monit эта программа отличается тем, что ставится не обязательно на тот сервер, что надо мониторить (удобно, если надо мониторить падение всей площадки, например);

Внезапно у заббикса есть агент и сервер, и агент ставится на сервак, который надо мониторить, а серверная часть на сторонний хост

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

от Monit эта программа отличается тем, что ставится не обязательно на тот сервер, что надо мониторить (удобно, если надо мониторить падение всей площадки, например);

Внезапно у заббикса есть агент и сервер, и агент ставится на сервак, который надо мониторить, а серверная часть на сторонний хост

Как это у тебя вообще в голове сконкатенировалось?

По сабжу: в плане инвентори оно ничего не умеет?

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

А зачем ты на митинги ходишь?

Потому что на петинги не пускают.

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

да там всё просто: таблица с названиями проверок и их статусом (ok зелёное, fail красное). при наводе мыши на статус — показывается since, при наводе на проверку — её команда. веб-проверки сделаны ссылками. рефрешится раз в 5 секунд при переключении статуса оно алёртит количество зафейленных в <title>. сама табличка выглядит где-то так: https://www.dropbox.com/s/7ntss308cruu5ap/jsonmon.png?dl=0

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

По сабжу: в плане инвентори оно ничего не умеет?

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

ну, или не понял вопроса, пожалуйста, поподробнее.

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

Как минимум у XML есть схема. Далее у XML есть несколько осей (хотя откуда тебе знать что это такое). Отсюда XPath и XSLT

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

Мониторинга чего блеать?

Плюсую. Вероятно, нам остается только догадываться. К тому же, ни скринов ни картинок :(
Прям новость для взрослых с libastral головного мозга, фу.

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

эм, так в новости же написано: «web- и shell-проверки». скрин выше в комментариях есть, но web ui там вторично и опционально.

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

Ну мы так и поняли, что проверяют паутину и ракушки

dmxrand
()

А когда проект сменит протокол они его переименуют штоле?

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

устал от тупого хейтерства

это не хейтерство, это скорее брезгливость была плюс болезненный личный опыт. Про «JSON API» - проблема в самой фразе. Можно написать «REST API, принимающий и отдающий данные в JSON, который может...» - и все ок. Но это уже скорее профессиональная болезнь. От слова KPI меня уже вообще можно хоть берсерком на поле боя выпускать. В плане что слова есть, а смысл в них смазан.

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

про Go - я правда плохо отношусь к Go. В первую очередь потому что ни разу не видел нормального проекта на Go, который не жрал бы проц, у которого не текла бы память, который не был бы завязан на полсотни таких же кривых либ с вечной поломкой совместимости, и у авторов которого не висело бы две дюжины давно протухших PR на гитхабе. Но самая жесть это то что если где надо файл генерить - то эти проекты юзают Go Template. Вот за это я бы убивал. Это самый обрезанный, самый адовый template-движок из всех что я знаю. Спасибо что в последних версиях оно научилось игнорить перенос строки внутри скриптовой части, а то весь template становился на ежа похожим от комментов. Ну и невозможность проверить наличие элемента в массиве штатными средствами (кроме цикла) вкупе с интересной областью определения переменных дают просто фееричные результаты, особенно когда элемент повторяется.

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

который не жрал бы проц, у которого не текла бы память

вы будете смеяться, но именно поэтому прототип сабжа на node.js был переписан на golang. с тех пор всё ок.

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

прототип сабжа на node.js был переписан на golang

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

а про проц - ну так это ж js, что еще с него взять. у Go есть странная тенденция жрать проц на крипте, на https например

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

не, ну тут условие: нужно много одновременных проверок. erlang подошёл бы, но на нём писать RESTful API с конфигом в YAML — это удовольствие ниже среднего. ну, не на яве же?

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

Все остальное да, а вот

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

заинтересовало. Проясни плз.

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

у Go есть странная тенденция жрать проц на крипте, на https например

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

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

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

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

заинтересовало. Проясни плз

смотри. у тебя есть массив [a, b, c, a]. если в массиве есть 'a', то нужно отрендерить строку «здесь был вася», а на 'b' - «здесь был федя». И отрендерить только один раз. Ну ок, пусть это будет строка из конфига nginx или еще чего более осмысленное.

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

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

во-первых, в golang есть struct (который и надо использовать в данном примере). во-вторых, есть break в цикле.

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

есть break в цикле

потому я специально указал что нужно не только 'a', а еще и 'b'. Или на каждый вариант по циклу?

про struct - просвяти, плз. но именно относительно Go Template, который используется в отрыве от самого Go

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

ну ок, смотри. есть заготовка конфига под nginx. в нее приходит массив (это данность, приходит из третьей софтины через десятую). нужно парсить массив чисто силами text/template. если в массиве встречается элемент «https» - даем строку ssl on;.

Короче

{{ range $tag := $service.Tags}}
{{ if eq $tag "https" }}
ssl on;
{{end}}
{{ if eq $tag "server_name" }}
.......
{{end}}

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

вот теперь представь что приходит тебе $service.Tags = ["https", "https"]. Как в этом случае сгенерить строку один раз? условий надо проверить больше одного, если что, так что break не катит.

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

в нее приходит массив (это данность, приходит из третьей софтины через десятую).

никто не мешает его замапить в struct. struct — это по сути как хэш в перле, но статически типизированный (т.е. в нём не может быть два элемента https, возьмётся только последний), т.е. как я понял, это тебе и надо.

т.е. по сути у тебя получается структура с булевыми значениями: https=true, blablabla=false. красивее, конечно, маршалить такую структуру из какого-то стандартного формата, но если приходит массив — реально и из массива.

ну, а дальше никаких циклов, только что-то вроде if newdata.https == true

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

а сам struct разве можно объявить прямо в template? его вроде ж как в коде нужно объявлять, что собственно и является проблемой, т.к. на каждый случае чужой код перепиливать не очень

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

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

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

P.S. на всякий случай: чтобы поле в struct было exported, его надо с заглавной буквы

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

или использовать неподходящую для твоего юзкейса структуру данных или перейти на более подходящую. увы, придётся это делать в коде

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

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

Не везет вам
А JSON API - ну в наше время уже пора принять, что HTTP, JSON - основа обмена данных в сети
Тот же докер - JSON REST API, но слушает и читает UNIX-сокет, хотя может и TCP
Ну а слак - у меня с ним проблем нет. Вот скайп новый течет дико, аж до гигабайта доходит

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

кмк, код и шаблоны мешать - дикость
Пускай скрипт обрабатывает данные, потом передает уже готовый набор шаблону, который их правильно покажет

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

JSON REST API

вот. уже понятнее. еще добавить зачем и что может - и вообще збс. а то «у нас есть JSON API». круто. а у меня есть ноутбук. и что дальше?

Ну а слак - у меня с ним проблем нет.

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

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

тормоза понятие относительное. на вычислениях нода сливает по полной (например позицию у манипулятора робота обсчитывать).

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

Не всегда JSON === REST
Бывает, что на /someurl?key1=value1&key2=value2 выдается JSON - это уже не рест
Slack именно десктопный
Браузерные приложения лучше в хроме гонять, так как V8

винда

Не пользуюсь, не знаю, но на маке и линуксе проблем нет

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

это не минусы golang, а плюсы ruby. сам на это наступал.

в golang можно также решить это топорно: http://stackoverflow.com/questions/15323767/does-golang-have-if-x-in-construc...

но вообще golang-way — это struct, который многие после скриптовых языков просто не понимают, а в самом golang на нём всё и пишется.

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

Пускай скрипт обрабатывает данные, потом передает уже готовый набор шаблону, который их правильно покажет

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

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

в любом template-движке в этом случае можно выкрутиться прямо в шаблоне

только если под темплейт-движками понимать php, erb, ejs и аналоги. они очень разные бывают.

и то, что go template не даёт всандалить туда то, что не относится к _представлению_ данных и не позволяет писать в php-стиле — наверное, это хорошо для будущих поколений.

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

да и согласись - уж наличие элемента в массиве можно было бы и встроить.

ну, это ж не map, и не struct. это именно array, т.е. перечисление. для него доступен только перебор, такой дизайн.

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

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

go template не даёт всандалить туда то, что не относится к _представлению_ данных

т.е. операции сравнения и циклы к ним отнести можно, а запрос наличия элемента в массиве нельзя?

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

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

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

Ну в математике нода и ненужна
Если уж так надо делать расчеты - есть нативные модули

mystery ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.