ServerAdmin.ru
31.6K subscribers
843 photos
57 videos
23 files
2.99K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
​​Существует небольшая, но очень полезная утилита в Linux - jo. Она создаёт json вывод из поданных в неё данных. Покажу на условном примере:
# jo name=vova name=sasha name=dima
{"name":"vova","name":"sasha","name":"dima"}

А вот более прикладной пример, который может существенно упростить некоторые проверки в мониторинге. Формируем массив из файлов в директории:
# jo -p -a /backup/mysql/*
[
  "/backup/mysql/daily_mysql_2021-09-28_16h11m_Tuesday.sql.gz",
  "/backup/mysql/daily_mysql_2021-09-29_16h15m_Wednesday.sql.gz",
  "/backup/mysql/daily_mysql_2021-09-30_16h14m_Friday.sql.gz"
]

Можно этот же массив предварительно отсортировать по дате с помощью ls:
# ls -t | jo -p -a
Свежие файлы будут отображаться первыми. Потом с помощью JSONPath $[0] можно получить имя самого свежего файла или самого старого: $[-1:].

Ещё практический пример. Массив процессов на хосте сразу с исключением дублей:
# ps ax | awk '{print $5}' | jo -a -p | uniq
[
.....
  "/usr/bin/newrelic-infra-service",
  "/usr/bin/newrelic-infra",
  "/bin/sh",
  "/usr/sbin/mysqld",
  "/usr/sbin/sshd",
  "/usr/sbin/rpc.mountd",
  "/usr/sbin/rpc.idmapd",
......
]

В зависимости от ключей ps можно формировать нужный список с различными сортировками.

Можно сразу же сформировать данные для LLD правил автообнаружения Zabbix:
# jo -a {#DOMAIN}:ya.ru {#DOMAIN}:r0.ru
["{#DOMAIN}:ya.ru","{#DOMAIN}:r0.ru"]
Не надо заморачиваться на баше с проставлением запятых и скобок.

Утилита jo, наравне с jq, однозначно пригодится тем, кто много работает с JSON. К тому же живёт в базовых репах и без проблем устанавливается:
# apt install jo
# dnf install jo

Исходники - https://github.com/jpmens/jo

#bash #linux #zabbix #json
👍69👎3
Насколько мне известно, у Zabbix до сих пор нет стандартного шаблона для мониторинга за временем оплаты домена. Про крайней мере мне такой неизвестен. Если он уже есть и я его упустил, прошу подсказать.

В разное время я реализовывал различные способы решения этой задачи. Все они один за одним собирались в статью на сайте:

Мониторинг времени делегирования домена в zabbix

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

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

Прикинул, как можно сделать так же удобно, реализовав всю логику только в шаблоне Zabbix, в том числе в нём же в макросах вести список доменов, но при этом без внешнего сервиса. Решил для этого воспользоваться готовым экспортером для Prometheus. Он удобен тем, что отдаёт метрики по HTTP, а значит их можно забирать заббиксом напрямую через его HTTP Агент.

Рассказываю по шагам, как всё настроил.

1️⃣ Поднимаю на любой своей машине в докере domain_exporter. Можно тут же на сервере Zabbix.

2️⃣ В шаблоне Zabbix создаю правило обнаружения с любым типом. Для примера взял тип Внутренний Zabbix и ключ zabbix[boottime]. Значения этого ключа нам не нужны, так как мы их сразу же будем преобразовывать.

3️⃣ В правиле обнаружения настроил предобработку типа JavaScript с таким кодом:

var domains = '{$DOMAINS}'.split(/\s+/);
var data = [];
for (var i = 0; i < domains.length; i++) {
  data.push({ "{#DOMAIN}": domains[i] });
}
return JSON.stringify({ data: data });

Берём список доменов из макроса {$DOMAINS} и преобразуем их в строку:

{
 "data": [
  { "{#DOMAIN}": "serveradmin.ru" },
  { "{#DOMAIN}": "example.com" }
 ]
}

Это формат, который принимают прототипы айтемов и триггеров.

4️⃣ Создал в шаблоне макросы:

◽️{$DOMAINS} = serveradmin.ru example.com # разделитель доменов - пробел;
◽️{$PROM_URL} = http://10.30.52.9:9222/probe # адрес экспортера;
◽️{$WARN_DAYS} = 30 # порог в днях для триггера со статусом предупреждение;
◽️{$CRIT_DAYS} = 5 # порог в днях для триггера со статусом критический.

5️⃣ Создал прототип айтема с типом HTTP Agent. В качестве урла указал {$PROM_URL}, а для передачи имени домена использовал поля запроса:

target ⇨ {#DOMAIN}

То есть итоговый урл для получения данных будет такой: http://10.30.52.9:9222/probe?target={#DOMAIN}. А если развернуть lld-макрос, то такой: http://10.30.52.9:9222/probe?target=serveradmin.ru.

6️⃣ В прототипе айтема сделал предобработку:

Шаблон Prometheus ⇨ domain_expiry_days

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

7️⃣ В это же правило автообнаружения добавил 2 триггера.

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

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

Шаблон публикую отдельно следующей публикацией. Проверял на версии Zabbix 7.0. Необходимо его импортировать на сервер и заполнить макросы либо в самом шаблоне, либо переопределить их после прикрепления к любому хосту.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#zabbix
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍97👎2