Auspex
Набор утилит мониторинга инфраструктуры WAF.
Утилиты
| Ключ |
Описание |
-ss |
Просмотр занятых портов (интерактивный TUI на bubbletea) |
-c |
Проверка SSL сертификатов (сроки истечения, алерты) |
-p |
Проверка доступности портов из nginx upstream конфигов |
-m |
Проверка совпадений портов Angie ↔ Docker (+ проверка запуска контейнеров) |
-l |
Проверка обновления файлов PT AF access logs |
-sv |
Проверка работоспособности служб systemd |
-d или -dc |
Проверка работоспособности Docker контейнеров |
Структура проекта
auspex/
├── main.go # Точка входа, меню, роутинг CLI-флагов
├── config.go # Глобальная конфигурация (переменные + загрузка из .env)
├── telegram.go # Отправка алертов в Telegram (поддержка HTTP и SOCKS5 прокси)
├── email.go # Отправка алертов по Email (SMTP, AUTH LOGIN)
├── mattermost.go # Отправка алертов в Mattermost (Bot API)
├── certcheck.go # -c: проверка SSL сертификатов
├── portcheck.go # -p: проверка доступности портов
├── matchcheck.go # -m: совпадения Angie ↔ Docker
├── logcheck.go # -l: проверка свежести логов
├── servicecheck.go # -sv: проверка служб systemd
├── dockercheck.go # -d: проверка Docker контейнеров
├── portsview.go # -ss: TUI просмотр занятых портов
├── go.mod
└── README.md
Сборка
go mod tidy
go build -o auspex .
sudo cp auspex /usr/local/bin/auspex
Использование
# Интерактивное меню
./auspex
# Быстрый вызов через флаги
./auspex -ss # TUI просмотр портов
./auspex -c # Проверка сертификатов
./auspex -p # Проверка доступности портов
./auspex -m # Проверка Angie ↔ Docker (все клиенты)
./auspex -m client_name # Проверка конкретного клиента
./auspex -l # Проверка свежести логов
./auspex -sv # Проверка работоспособности служб
./auspex -d # Проверка работоспособности контейнеров
./auspex -w # Проверка веб доступности
./auspex -h # Справка
./auspex -v # Версия
Конфигурация
Конфигурация загружается из /etc/auspex/auspex.env. Если файл не найден — используются значения по умолчанию. Формат файла: KEY=VALUE, комментарии через #.
sudo mkdir -p /etc/auspex
sudo nano /etc/auspex/auspex.env
Полный список параметров
Telegram
| Переменная |
Описание |
По умолчанию |
TELEGRAM_BOT_TOKEN |
Токен бота |
— |
TELEGRAM_CHAT_ID |
ID чата для алертов |
— |
TELEGRAM_HTTP_PROXY |
HTTP прокси: http://user:pass@host:port |
— |
TELEGRAM_SOCKS5_PROXY |
SOCKS5 прокси: host:port |
— |
TELEGRAM_SOCKS5_USER |
Логин SOCKS5 прокси |
— |
TELEGRAM_SOCKS5_PASSWORD |
Пароль SOCKS5 прокси (спецсимволы безопасны) |
— |
Порядок попыток при отправке: HTTP прокси → SOCKS5 → прямое соединение. Если один вариант недоступен — автоматически используется следующий.
Email / SMTP
| Переменная |
Описание |
По умолчанию |
EMAIL_SMTP_HOST |
Адрес SMTP сервера |
— |
EMAIL_SMTP_PORT |
Порт SMTP (STARTTLS) |
587 |
EMAIL_SMTP_USER |
Логин SMTP |
— |
EMAIL_SMTP_PASSWORD |
Пароль SMTP |
— |
EMAIL_FROM |
Адрес отправителя |
— |
EMAIL_TO |
Адреса получателей (через запятую) |
— |
Поддерживается AUTH LOGIN (Exchange/корпоративные серверы). Если EMAIL_SMTP_HOST не задан — отправка молча пропускается.
Mattermost
| Переменная |
Описание |
По умолчанию |
MATTERMOST_URL |
URL сервера: https://mattermost.example.com |
— |
MATTERMOST_BOT_TOKEN |
Токен бота |
— |
MATTERMOST_CHANNEL_ID |
ID канала для отправки |
— |
Используется Bot API (POST /api/v4/posts). HTML-теги из Telegram автоматически конвертируются в Markdown.
PostgreSQL
| Переменная |
Описание |
По умолчанию |
DB_USER |
Пользователь БД |
— |
DB_PASSWORD |
Пароль БД |
— |
DB_NAME |
Название БД |
waf_info |
DB_PORT |
Порт БД |
5432 |
PRIMARY_DB_HOST |
Основной хост БД |
10.100.10.8 |
SECONDARY_DB_HOST |
Резервный хост БД |
10.100.13.5 |
Пути
| Переменная |
Описание |
По умолчанию |
PTAF_BASE_DIR |
Базовая директория PTAF |
/home/install/ptaf |
ANGIE_CONF_DIR |
Директория конфигов Angie |
/etc/angie/http.d |
SSL_DIR |
Директория SSL сертификатов |
/etc/ssl |
NGINX_CONFIG_GLOB |
Glob-путь к nginx конфигам |
/home/install/conf/ptaf-nginx/*/*/*/*.conf |
LOG_DIR |
Директория access логов |
/var/log/ptaf_nginx |
STATE_FILE_PATH |
State-файл portcheck |
/tmp/port_checker_state.json |
SERVICE_STATE_FILE_PATH |
State-файл servicecheck |
/tmp/auspex_service_state.json |
DOCKER_STATE_FILE_PATH |
State-файл dockercheck |
/tmp/auspex_docker_state.json |
Пороги сертификатов
| Переменная |
Описание |
По умолчанию |
CERT_CRITICAL_DAYS |
Критический алерт (дней до истечения) |
3 |
CERT_WARNING_DAYS |
Предупреждение |
15 |
CERT_INFO_DAYS |
Информирование |
30 |
Проверка портов
| Переменная |
Описание |
По умолчанию |
CHECK_TIMEOUT_SEC |
Таймаут TCP-соединения (сек) |
10 |
MAX_RETRIES |
Количество повторов |
3 |
RETRY_DELAY_SEC |
Задержка между повторами (сек) |
2 |
MAX_WORKERS |
Горутин для параллельной обработки |
10 |
Проверка логов
| Переменная |
Описание |
По умолчанию |
LOG_STALE_MINUTES |
Порог устаревшего лога (мин) |
61 |
Проверка служб
| Переменная |
Описание |
По умолчанию |
SERVICES_TO_CHECK |
Службы для проверки (через запятую) |
— |
Пример: SERVICES_TO_CHECK=angie,docker,postgresql
Пример auspex.env
# Telegram
TELEGRAM_BOT_TOKEN=8411463479:AAF0zFi7iXTEC51sBG0Ckc8_S7JD-DuVcoo
TELEGRAM_CHAT_ID=-1001234567890
# HTTP прокси (опционально)
TELEGRAM_HTTP_PROXY=http://10.100.12.4:8888
# SOCKS5 прокси (опционально, fallback после HTTP)
TELEGRAM_SOCKS5_PROXY=212.87.220.230:1080
TELEGRAM_SOCKS5_USER=proxyuser
TELEGRAM_SOCKS5_PASSWORD=ProxyPass!$
# Email
EMAIL_SMTP_HOST=mail.example.com
EMAIL_SMTP_PORT=587
EMAIL_SMTP_USER=auspex@example.com
EMAIL_SMTP_PASSWORD=secret
EMAIL_FROM=auspex@example.com
EMAIL_TO=admin@example.com,devops@example.com
# Mattermost
MATTERMOST_URL=https://mattermost.example.com
MATTERMOST_BOT_TOKEN=831yapr3xxxxxxxxxxx
MATTERMOST_CHANNEL_ID=oun39xxxxxxxxxxxx
# База данных
DB_USER=waf_user
DB_PASSWORD=secret
DB_NAME=waf_info
PRIMARY_DB_HOST=10.100.10.8
SECONDARY_DB_HOST=10.100.13.5
# Службы для проверки
SERVICES_TO_CHECK=angie,docker
# Пороги сертификатов
CERT_CRITICAL_DAYS=3
CERT_WARNING_DAYS=15
CERT_INFO_DAYS=30
Доставка алертов
Все модули с алертами отправляют уведомления во все настроенные каналы независимо друг от друга:
| Канал |
Условие отправки |
| Telegram |
TELEGRAM_BOT_TOKEN и TELEGRAM_CHAT_ID заданы |
| Email |
EMAIL_SMTP_HOST, EMAIL_FROM, EMAIL_TO заданы |
| Mattermost |
MATTERMOST_URL, MATTERMOST_BOT_TOKEN, MATTERMOST_CHANNEL_ID заданы |
Если канал не настроен — он молча пропускается, программа не падает.
State-файлы
Модули -p, -sv, -d сохраняют состояние между запусками и отправляют алерты только при изменении статуса. Это позволяет безопасно запускать их по cron без спама.
| Модуль |
State-файл |
-p portcheck |
/tmp/port_checker_state.json |
-sv servicecheck |
/tmp/auspex_service_state.json |
-d dockercheck |
/tmp/auspex_docker_state.json |
При первом запуске состояние сохраняется, алерты не отправляются.
Пример cron
# Проверка сертификатов — раз в сутки
0 9 * * * root /usr/local/bin/auspex -c >> /var/log/auspex/certcheck.log 2>&1
# Проверка портов — каждые 5 минут
*/5 * * * * root /usr/local/bin/auspex -p >> /var/log/auspex/portcheck.log 2>&1
# Проверка логов — каждый час
0 * * * * root /usr/local/bin/auspex -l >> /var/log/auspex/logcheck.log 2>&1
# Проверка служб — каждые 2 минуты
*/2 * * * * root /usr/local/bin/auspex -sv >> /var/log/auspex/servicecheck.log 2>&1
# Проверка контейнеров — каждые 2 минуты
*/2 * * * * root /usr/local/bin/auspex -d >> /var/log/auspex/dockercheck.log 2>&1
Подробнее
См. ARCHITECTURE.md.