Задачи администратора

  1. Обеспечить сетевую безопасность сервера.
  2. Следить за свободным местом на диске.
  3. Управлять логами.

Рекомендуется настроить мониторинг состояния сервера, на котором установлен Mitigator, с помощью Zabbix, Nagios или подобного им решения.

Сетевая безопасность

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

Если интерфейс управления находится в публичном сегменте, необходимо ограничить доступ ко всем проброшенным портам системными средствами (например, iptables), при помощи firewall либо иными решениями.

Используя возможности сетевой подсистемы Linux, можно настроить маршрутизацию независимо для каждого интерфейса управления и адреса. Рекомендуется использовать отдельные адреса для интерфейса управления (SSH, API, web), для BGP, для опроса серверов в контрмерах GAME и SOUR. Для этого нужно либо владеть двумя и более IP, либо часть сетей должна быть внутренними, например, BGP провайдера может быть доступен по внутреннему адресу. Даже если физический интерфейс один, на него можно назначить несколько адресов. Пример для /etc/network/interfaces, где 192.0.2.2 — основной публичный адрес, а 172.16.0.2 находится в сети провайдера 172.16.0.0/24:

auto eth0
iface eth0 inet static
    # основной адрес, обычно для SSH, API и web
    address 192.0.2.2/24
    gateway 192.0.2.1

    # блок для адреса связи с BGP
    up ip address add 172.16.0.2/24 dev eth0
    down ip address delete 172.16.0.2/24 dev eth0

Место на диске

Для нормального функционирования системы на протяжении значительного времени (год и более) требуется до 100 и более ГБ свободного дискового пространства.

Узнать занимаемое место элементами docker´а (образами, контейнерами, томами) можно при помощи следующей команды:

docker system df

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

Очистить занимаемое неиспользуемыми в настоящий момент элементами место можно следующей командой (требует подтверждения):

docker system prune

Кроме того, место занимается базами данных Postgres (настройки системы) и Graphite (графики).

Это место в процессе эксплуатации Mitigator´а не уменьшается, и объем занимаемого пространства будет только увеличиваться.

Узнать занимаемое базами место можно следующей командой:

du -hs \
    /var/lib/docker/volumes/mitigator_postgres \
    /var/lib/docker/volumes/mitigator_graphite

Логи

В управлении логами два аспекта:

  • логи занимают место на диске;
  • логи могут быть нужны разработчикам для решения проблем.

Настройка логирования

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

{
    "log-driver": "json-file",
    "log-opts": {
      "max-size": "50m",
      "max-file": "2"
    }
}

При изменении daemon.json нужно перезапускать демон Docker´а и Mitigator:

systemctl restart docker
systemctl restart mitigator

Сохранение логов

Логи привязаны к контейнеру, поэтому при его пересоздании они уничтожаются. К пересозданию контейнеров приводят команды:

  • docker-compose down, так как контейнеры удаляются.
  • docker-compose up, если обновились образы.
  • systemctl restart mitigator, так как выполняет команды выше.

Команда docker-compose restart <служба> не теряет логи.

Если необходимо выполнить рестарт и при этом сохранить логи для отладки, сделать это можно следующим образом:

cd /var/lib/docker/containers
find . -name '*-json.log' \
    -exec tar czf /srv/mitigator/logs_$(date +%y%m%d).tgz {} +
cd -