Собственная система мониторинга сайтов

Те, кто занимается поддержкой сайтов рано или поздно задумывается как мониторить их доступность. Можно пойти по пути покупки услуг (или пользоваться бесплатными) соответствущих сервисов. Благо их много.

Но тут всегда сталкиваемся с несколькими проблемами: периодичность опроса и гибкость настройки.

Другой вариант поднять свой сервис мониторинга, о чем и пойдет далее речь.

Для наших целей будем использовать следующие сервисы и технологии:

DigitalOcean

Тут все просто. Регистрируемся и создаем дроплет. Можно воспользоваться моей реферальной ссылкой DigitalOcean (referal link).
Для наших целей подойдет с минимальными характеристиками (1Gb / 1CPU). Можно воспользоваться уже специльно подготовленным образом One-click apps с установленным Docker.

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

Monit

Monit - это легковесная система мониторинга. Как одним из видов мониторинга выступает проверка подключение к внешним сервисам по HTTP(S).

Все настройки произвлдятся в виде конфиг файлов с использованием специализированного синтаксиса.

check host example.com with address example.com
    alert monit@example.com
    if failed url http://example.com/ with timeout 5 seconds for 3 cycles then alert

Docker

Можно установить сам monit и на этом остановиться. Но удобнее для переносимости и утилизации системных ресурсов (вдруг мы еще что-то захотим запускать одновременно) использовать Docker. Создаем docker-compose.yml:

version: '2'
services:
  monit:
    image: monit-alpine
    build:
      context: .
      dockerfile: Dockerfile
    restart: always
    hostname: monit
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "5"
    volumes:
      - './monit/monit.d/:/etc/monit.d/'
      - './monit/monitrc:/etc/monitrc'
    restart: always

и создаем в этой же директории Dockerfile

FROM alpine:latest

RUN apk --no-cache add monit

VOLUME /etc/monit.d/

EXPOSE 2812

CMD ["monit", "-I", "-B"]

Запускаем стандартно:

docker-compose up -d