# DevOps

# Сервера и кластеры

Смотрите проект apliteni/infra/inventory.

# Мониторинг

# Мониторинг кластера

Заходим в Rancher. Затем Кластер -> Monitoring -> Enable. Мониторинг на уровне проекта стараемся не заводить, если нет на то причины.

# Мониторинг проекта

  • Поднимаем Prometheus+Grafana в проекте Rancher.
  • Sentry.io - для логирование ошибок приложений и сервисов.

# Мониторинг серверов и VPS

Используем мониторы Site24x7.com.

# Мониторинг кластеров Postgres

  • Смотрите проект apliteni/ansible-roles/apliteni.postgres-monitoring. Там есть всё необходимое для настройки мониторинга на базе Prometheus и Grafana.
  • Опционально настраиваем мониторы Site24x7. Смотрите проект apliteni/ansible-roles/apliteni.site24x7 и apliteni/ansible-roles/apliteni.site24x7-postgres.

# Рекомендации

# Infrastructure As Code

  • Используем Terraform для управления кластером VPS.
  • Если проект деплоится на VPS, его деплой должен быть описан как Ansible Playbook.
  • Каждый проект должен сам себя тестировать и деплоить. Смотрите Gitlab CI/CD.
  • Каждый проект должен как минимум уметь запускаться из docker compose.
  • Скриптовой язык bash. Если требуется сложная логика, используйте PHP. Для производительности - Golang.

# Рекомендации по Ansible

  • Используйте .ini файлы для хранения inventory.
  • Файлы ansible храним в папке ansible/, роли в ansible/roles.
  • Все внешние роли коммитим в репозитории проекта.
  • Исли используете чужую роль, обязательно (!!!), проведите аудит кода. Сейчас множество публичных ролей распространяют вредоносное ПО.
  • Используйте разделитем - в именах ролей. Например, apliteni.postgres-wale .
  • Важные пароли и токены шифруем ansible-vault. Простая инструкция по применению ansible-vault https://gist.github.com/tristanfisher/e5a306144a637dc739e7. Ключ шифрования отправляем как минимум 2 коллегам.

# Рекомендации для docker-compose

  • Имя файла docker-compose.yml.
  • Выносите ENV параметры в .env файл. В репозитории должен быть только .env.example.
  • Для крупных проектов желательно подготовить конфиги для docker-sync
  • Grafana/Prometheus/AlertManager - если нужен кастомный мониторинг, включая отслеживание бизнес показателей

# Рекомендации по документированию проекта

  • Файл для доментирования README.md. Если создаете другой файл, сделайте на него ссылку в README.md.
  • Перечислите пути до логов сервиса и конфиги. Даже если они стандартные, это сэкономит время на их поиски.
  • Заведите секцию Troubleshooting или Решение проблем. После каждого падения сервиса, фиксируйте кратко решение.
  • Периодически перечитывайте README.md, удаляйте устаревшее и лишнее.

# Рекомендации при подключении Sentry.io

Каждое приложение в production режиме должно отсылать ошибки в sentry.io.

# Рекомендации при настройке Site24x7

Что мониторим:

  • Показатели сервера (cpu, ram, disk) с алертами
  • Состояние и нагрузку баз (MySQL, Postgres, Redis)
  • Процессы, которые приведут к остановке обслуживания (haproxy, nginx)

# Рекомендации при развертке новой Grafana

  • Источник данных предпочитаем Prometheus.
  • Доступ к UI должен быть доступен только с нашего VPN. В случае с Rancher, доступ уже ограничивается.
  • Рекомендуемые Dashboard'ы: `
    • 10242 (Node Exporter Full with Node Name)
    • 455 (Postgres Performance)
    • 893 (Docker)
    • 9628 (PostgreSQL database stats)
  • Рекомендуемые плагины:
    • camptocamp-prometheus-alertmanager-datasource
  • Внешние Grafana (не из Rancher) должны использовать авторизацию auth.google
    • [auth.google] allow_sign_up = true - иначе авторизация новых пользователей не будет работать.
    • [users] auto_assign_org_role = Admin - чтобы каждый мог управлять Grafana.
    • [auth] disable_login_form = true - отключить авторизацию по паролю.
    • Удалите пользователя admin.
  • Для некритических ситуаций шлем нотификации в канал #alerts или канал проекта.
  • Важно устранять нотификации, на которые не требуется реакция, чтобы сократить уровень шума.

# Рекомендации при настройке Prometheus

  • Доступ к UI должен быть доступен только с нашего VPN или закрыт вовсе.
  • Рекомендуемые jobs:
    • prom/node-exporter - сервера (cpu, ram, disk)
    • wrouesnel/postgres_exporter - Postgres
    • google/cadvisor - контейнеры

# Рекомендации при настройке AlertManager

  • Для некритических ситуаций шлем нотификации в канал #alerts.
  • Важно устранять нотификации, на которые не требуется реакция, чтобы сократить уровень шума.

# Рекомендации для Terraform

  • Храните состояние в одним из наших Minio хранилище.