Евгений Горяев
Разработка, поддержка и развитие сайтов

Мониторинг сервера для веб-проектов с DataDog

Обложка для статьи Мониторинг сервера для веб-проектов с DataDog

Про datadog я узнал, в 2017 году из одного из любимых IT-подкастов DevZen. С тех пор этот мой надежный помощник в наблюдении за моими серверами и работоспособностью сайтов, которые я поддерживаю. В этой статье я расскажу какие модули для агента datadog я использую и как их настраиваю для того, чтобы получать уведомления о проблемах. При этом, мне вплоне хватает бесплатного аккаунта (платный я тоже пробовал - но это оказалось слишком дорого для меня, а бесплатный - просто идельный).

Инфраструктура: как я запускаю сайты

Для начала пару слов о том, как я запускаю несколько сайтов на одном сервере: для этого я, конечно, использую docker и docker-compose. Как балансировщик и reverse-proxy выступает nginx или traefik. Таким образом, каждый сайт запускается в своем окружении, в своей подсети, с сервисами, которые ему необходимы только ему. При этом, обеспечивается полная изоляция проектов друг от друга и на уровне сети и на уровне файловой системы:

Инфраструктура сервера

Установка dadadog agent

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

DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=XXX DD_SITE="datadoghq.com" bash -c "$(curl -L 
https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"

Далее необходимо отдельной командой установить модуль для сбора метрик traefik, если вы используете его (я в последнее время - да). Делать это необходимо от имени пользователя dd-agent.

sudo -u dd-agent datadog-agent integration install -t datadog-traefik==1.0.0

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

usermod -aG docker dd-agent

Конфигурирование DataDog Agent

После того, как агент установлен, необходимо создать или отредактировать несколько конфигураций.

Docker

Активируем мониторинг докера:

/etc/datadog-agent/conf.d/docker.d/conf.yaml

init_config:
instances:
    - url: "unix://var/run/docker.sock"
      new_tag_names: true

Диски

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

/etc/datadog-agent/conf.d/disk.d/conf.yaml

init_config:
instances:
  - use_mount: false
    file_system_blacklist:
      - tmpfs
      - none
      - shm
      - nsfs
      - netns
      - binfmt_misc
      - autofs
    mount_point_blacklist:
      - /var/lib/docker/(containers|overlay2)/
      - /run/docker/
      - /sys/kernel/debug/
      - /run/user/1000/

Traefik

Если вы используете traefik, то активируем его с помощью конфига:

/etc/datadog-agent/conf.d/traefik.d/conf.yaml

init_config:
instances:
  - host: localhost 

Кроме того, в конфиг traefik необходимо добавить следующий блок:

metrics:
  datadog:
    addEntryPointsLabels: true

Nginx

Если вы используете nginx, то активируем его с помощью конфига: /etc/datadog-agent/conf.d/nginx.d/conf.yaml

init_config:
instances:
  - nginx_status_url: http://localhost:8831/nginx_status

А так же создаем файл с конфигом, который открывает порт для мониторинга nginx: /etc/nginx/sites-enabled/nginx_status

server {
    listen 8831;
    location /nginx_status {
        stub_status;
        }
}

Проверки по HTTP протоколу

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

/etc/datadog-agent/conf.d/http_check.d/conf.yaml

init_config:
instances:
  - name: akvilon.expert
    url: https://akvilon.expert
    timeout: 5
    http_response_status_code: 200
    seconds_warning: 3

  - name: volvofix.ru
    url: https://volvofix.ru
    timeout: 5
    http_response_status_code: 200
    seconds_warning: 3

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

Хосты в панеле DadaDog

Опираясь на получаемые данные, можно с легкостью настроить алерты на такие события, как:

  • отсутствие свободного места на дисках или в оперативной памяти
  • проблемы с работоспособностью сайтов: даунтайм или долгие ответы
  • скорое истечение tls сертификатов
  • даунтайм всего сервера

Используя datadog в бесплатном режиме нескольк лет, я убедился, что это прекрасный инструмент и незаменимый помощник для мониторнга инфраструктуры. Кроме того, у него еще миллион других возможностей и функций, которые можно использовать при поддержке веб-проектов: например, синтетические браузерные тесты.

Надеюсь, вам была полезна эта информация!