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

 

Речь пойдёт про Gatus (https://github.com/TwiN/gatus). С его помощью очень удобно создавать Status Page. Сразу покажу, как это будет выглядеть:

 

https://status.twin.sh

 

И сразу же простой пример, как это настраивается. Там всё максимально просто и быстро. Мы будем проверять следующие условия:

 

◽️Подключение к сайту zabbix.com проходит успешно, а его IP равен 188.114.99.224. Так как этот домен резолвится в разные IP, можно будет увидеть, как срабатывает проверка.

◽️Сайт github.com отдаёт код 200 при подключении и содержит заголовок страницы GitHub: Let’s build from here · GitHub.  

◽️Сайт ya.ru отдаёт код 200 и имеет отклик менее 10 мс. На практике он будет больше, посмотрим, как срабатывает триггер. По этой проверке будет уведомление в Telegram.

◽️Домен vk.com имеет сертификат со сроком истечения не менее 48 часов и делегирование домена не менее 720 часов.  

 

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

# mkdir gatus && cd gatus
# touch config.yaml
alerting:
  telegram:
    token: "1393668911:AAHtEAKqxUH7ZpyX28R-wxKfvH1WR6-vdNw"
    id: "210806260"

endpoints:
  - name: Zabbix Connection
    url: "https://zabbix.com"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"
      - "[IP] == 188.114.99.224"

  - name: Github Title
    url: "https://github.com"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[BODY] == pat(*<title>GitHub: Let’s build from here · GitHub</title>*)"

  - name: Yandex response
    url: "https://ya.ru"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[RESPONSE_TIME] < 10"
    alerts:
      - type: telegram
        send-on-resolved: true

  - name: VK cert & domain
    url: "https://vk.com"
    interval: 5m
    conditions:
      - "[CERTIFICATE_EXPIRATION] > 48h"
      - "[DOMAIN_EXPIRATION] > 720h"

Запускаем Docker контейнер и цепляем к нему этот файл:

# docker run -p 8080:8080 -d \
--mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml \
--name gatus twinproduction/gatus

Идём по IP адресу сервера на порт 8080 и смотрим на свой мониторинг. Данные могут храниться в оперативной памяти, sqlite или postgresql базе. Если выберите последнее, то вот готовый docker-compose  для этого. По умолчанию данные хранятся в оперативной памяти и после перезапуска контейнера пропадают.  

version: "3.9"
services:
  postgres:
    image: postgres
    volumes:
      - ./data/db:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=gatus
      - POSTGRES_USER=username
      - POSTGRES_PASSWORD=password
    networks:
      - web

  gatus:
    image: twinproduction/gatus:latest
    restart: always
    ports:
      - "8080:8080"
    environment:
      - POSTGRES_USER=username
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=gatus
    volumes:
      - ./config:/config
    networks:
      - web
    depends_on:
      - postgres

networks:
  web:

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

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