Initial commit: Message Gateway project
- FastAPI приложение для отправки мониторинговых алертов в мессенджеры - Поддержка Telegram и MAX/VK - Интеграция с Grafana, Zabbix, AlertManager - Автоматическое создание тикетов в Jira - Управление группами мессенджеров через API - Декораторы для авторизации и скрытия эндпоинтов - Подробная документация в папке docs/ Автор: Сергей Антропов Сайт: https://devops.org.ru
This commit is contained in:
642
README.md
Normal file
642
README.md
Normal file
@@ -0,0 +1,642 @@
|
||||
# Message Gateway
|
||||
|
||||
Приложение для отправки мониторинговых алертов из Grafana, Zabbix и AlertManager в мессенджеры (Telegram, MAX/VK) и создания тикетов в Jira.
|
||||
|
||||
**Автор:** Сергей Антропов
|
||||
**Сайт:** https://devops.org.ru
|
||||
|
||||
## Описание
|
||||
|
||||
Message Gateway - это микросервис, который принимает webhooks от систем мониторинга (Grafana, Zabbix, AlertManager) и отправляет уведомления в различные мессенджеры (Telegram, MAX/VK). Также поддерживает автоматическое создание тикетов в Jira на основе алертов. Поддерживает фильтрацию по стоп-словам, форматирование сообщений через Jinja2 шаблоны и интеграцию с Prometheus для сбора метрик.
|
||||
|
||||
### Поддержка мессенджеров
|
||||
|
||||
- **Telegram** - Полная поддержка текстовых сообщений, медиа (фото, видео, аудио, документы) и тредов
|
||||
- **MAX/VK** - Поддержка текстовых сообщений и медиа (треды не поддерживаются)
|
||||
|
||||
## Документация
|
||||
|
||||
Подробная документация разделена на отдельные файлы в папке [`docs/`](docs/):
|
||||
|
||||
### Основная документация
|
||||
|
||||
- 📖 [Настройка ботов](docs/bots.md) - как создать ботов в Telegram и MAX/VK
|
||||
- 📖 [Конфигурация групп](docs/groups.md) - как настроить группы мессенджеров
|
||||
- 📖 [Шаблоны сообщений](docs/templates.md) - как работают шаблоны Jinja2
|
||||
- 📖 [Конфигурация Jira Mapping](docs/jira-mapping.md) - как настроить маппинг алертов в Jira
|
||||
- 📖 [Отправка сообщений](docs/messaging.md) - как работает отправка сообщений
|
||||
|
||||
### Настройка систем мониторинга
|
||||
|
||||
- 📖 [Настройка Grafana](docs/monitoring/grafana.md) - как настроить Grafana для отправки алертов
|
||||
- 📖 [Настройка Zabbix](docs/monitoring/zabbix.md) - как настроить Zabbix для отправки алертов
|
||||
- 📖 [Настройка AlertManager](docs/monitoring/alertmanager.md) - как настроить AlertManager для отправки алертов
|
||||
|
||||
### API документация
|
||||
|
||||
- 📖 [API для управления группами](docs/api/groups.md) - управление группами мессенджеров через API
|
||||
- 📖 [API для отправки сообщений](docs/api/message.md) - отправка простых сообщений в мессенджеры
|
||||
- 📖 [API для проверки здоровья](docs/api/health.md) - проверка здоровья и готовности приложения
|
||||
- 📖 [API для отладки](docs/api/debug.md) - сохранение JSON данных для отладки
|
||||
- 📖 [Декораторы API](docs/api/decorators.md) - декораторы для авторизации и скрытия эндпоинтов
|
||||
|
||||
## Возможности
|
||||
|
||||
- ✅ Отправка алертов из Grafana в мессенджеры (Telegram, MAX/VK)
|
||||
- ✅ Отправка алертов из Zabbix в мессенджеры (Telegram, MAX/VK)
|
||||
- ✅ Отправка алертов из AlertManager в мессенджеры (Telegram, MAX/VK)
|
||||
- ✅ Поддержка отправки в треды Telegram (не поддерживается для MAX/VK)
|
||||
- ✅ **Поддержка нескольких мессенджеров (Telegram, MAX/VK)**
|
||||
- ✅ **Отправка простых текстовых сообщений**
|
||||
- ✅ **Отправка фото, видео, аудио и документов**
|
||||
- ✅ **Управление группами мессенджеров (CRUD)**
|
||||
- ✅ **Защита управления группами API ключом**
|
||||
- ✅ **Автоматическое создание тикетов в Jira**
|
||||
- ✅ **Настройка маппинга алертов в Jira тикеты**
|
||||
- ✅ Фильтрация по стоп-словам
|
||||
- ✅ Форматирование сообщений через Jinja2 шаблоны
|
||||
- ✅ Метрики Prometheus
|
||||
- ✅ Интеграция с OpenTelemetry
|
||||
- ✅ Кэширование конфигурации групп
|
||||
- ✅ Асинхронная обработка запросов
|
||||
- ✅ Валидация данных через Pydantic
|
||||
- ✅ Подробное логирование
|
||||
|
||||
## Требования
|
||||
|
||||
- Python 3.11+
|
||||
- Docker и Docker Compose
|
||||
- Telegram Bot Token (для Telegram)
|
||||
- MAX/VK Access Token (для MAX/VK, опционально)
|
||||
- Конфигурация групп мессенджеров (config/groups.json)
|
||||
- Пароль для управления группами (опционально, для CRUD операций)
|
||||
- Jira API Token (опционально, для интеграции с Jira)
|
||||
|
||||
## Установка
|
||||
|
||||
### 1. Клонирование репозитория
|
||||
|
||||
```bash
|
||||
git clone <repository-url>
|
||||
cd message-gateway
|
||||
```
|
||||
|
||||
### 2. Настройка переменных окружения
|
||||
|
||||
Создайте файл `.env` на основе `.env.example`:
|
||||
|
||||
```bash
|
||||
cp env.example .env
|
||||
```
|
||||
|
||||
Отредактируйте `.env` и укажите необходимые переменные:
|
||||
|
||||
```env
|
||||
# Telegram настройки
|
||||
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
|
||||
TELEGRAM_ENABLED=true
|
||||
|
||||
# MAX/VK настройки (опционально)
|
||||
MAX_ACCESS_TOKEN=your_max_access_token_here
|
||||
MAX_API_VERSION=5.131
|
||||
MAX_ENABLED=false
|
||||
|
||||
# Общие настройки мессенджеров
|
||||
DEFAULT_MESSENGER=telegram
|
||||
|
||||
# Настройки мониторинга
|
||||
GRAFANA_URL=http://grafana.example.com
|
||||
ZABBIX_URL=https://zabbix.example.com
|
||||
|
||||
# Jira настройки (опционально)
|
||||
JIRA_ENABLED=false
|
||||
JIRA_URL=https://jira.example.com
|
||||
JIRA_EMAIL=user@example.com
|
||||
JIRA_API_TOKEN=your_jira_api_token_here
|
||||
JIRA_PROJECT_KEY=MON
|
||||
JIRA_DEFAULT_ASSIGNEE=user@example.com
|
||||
JIRA_DEFAULT_ISSUE_TYPE=Bug
|
||||
JIRA_CREATE_ON_ALERT=true
|
||||
JIRA_CREATE_ON_RESOLVED=false
|
||||
```
|
||||
|
||||
### 3. Настройка конфигурации групп
|
||||
|
||||
Отредактируйте `config/groups.json` и добавьте группы мессенджеров.
|
||||
|
||||
> 📖 **Подробная документация:** [Конфигурация групп](docs/groups.md)
|
||||
|
||||
```json
|
||||
{
|
||||
"monitoring": {
|
||||
"messenger": "telegram",
|
||||
"chat_id": -1001234567890,
|
||||
"thread_id": 0,
|
||||
"config": {}
|
||||
},
|
||||
"alerts": {
|
||||
"messenger": "telegram",
|
||||
"chat_id": -1001234567891,
|
||||
"thread_id": 0,
|
||||
"config": {}
|
||||
},
|
||||
"max_alerts": {
|
||||
"messenger": "max",
|
||||
"chat_id": "123456789",
|
||||
"thread_id": null,
|
||||
"config": {
|
||||
"access_token": "optional_override_max_token"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Примечания:**
|
||||
- `messenger` - тип мессенджера (`telegram`, `max`) - обязательное поле
|
||||
- `chat_id` - ID чата (может быть числом для Telegram или строкой для MAX/VK) - обязательное поле
|
||||
- `thread_id` - ID треда в группе (только для Telegram, `0` для основной группы, `null` для MAX/VK)
|
||||
- `config` - дополнительная конфигурация для мессенджера (например, `access_token` для MAX/VK)
|
||||
|
||||
### 4. Настройка конфигурации маппинга Jira
|
||||
|
||||
Отредактируйте `config/jira_mapping.json` и настройте маппинг алертов в Jira тикеты.
|
||||
|
||||
> 📖 **Подробная документация:** [Конфигурация Jira Mapping](docs/jira-mapping.md)
|
||||
|
||||
```json
|
||||
{
|
||||
"alertmanager": {
|
||||
"default_project": "MON",
|
||||
"default_assignee": null,
|
||||
"default_issue_type": "Bug",
|
||||
"default_priority": "High",
|
||||
"mappings": [
|
||||
{
|
||||
"conditions": {
|
||||
"severity": "critical",
|
||||
"namespace": "production"
|
||||
},
|
||||
"project": "MON",
|
||||
"assignee": null,
|
||||
"issue_type": "Bug",
|
||||
"priority": "Highest",
|
||||
"labels": ["critical", "production", "alertmanager"]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Запуск приложения
|
||||
|
||||
#### Использование Docker Compose
|
||||
|
||||
```bash
|
||||
# Первый запуск (сборка и запуск)
|
||||
make up-build
|
||||
|
||||
# Последующие запуски
|
||||
make up
|
||||
|
||||
# Или напрямую через docker-compose
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
#### Использование Makefile
|
||||
|
||||
```bash
|
||||
make help # Показать справку по всем командам
|
||||
make build # Собрать Docker образ
|
||||
make up # Запустить приложение
|
||||
make up-build # Собрать и запустить приложение (рекомендуется для первого запуска)
|
||||
make logs # Показать логи
|
||||
make shell # Открыть shell в контейнере
|
||||
make down # Остановить приложение
|
||||
make status # Показать статус контейнеров
|
||||
make health # Проверить здоровье приложения
|
||||
make ready # Проверить готовность приложения
|
||||
```
|
||||
|
||||
> **Примечание:** Все команды выполняются через Makefile. Скрипты `.sh` больше не используются и были удалены.
|
||||
>
|
||||
> **Подкоманды:** Для удобства использования подкоманд (docker, git, k8s, env) доступны три варианта:
|
||||
> 1. Через переменную CMD: `make docker CMD=build`
|
||||
> 2. Напрямую: `make docker-build`
|
||||
> 3. Через обертку: `./make-wrapper.sh docker build` (для синтаксиса с пробелами)
|
||||
|
||||
Доступные команды:
|
||||
|
||||
**Основные команды:**
|
||||
- `make build` - Собрать Docker образ
|
||||
- `make up` - Запустить приложение
|
||||
- `make up-build` - Собрать и запустить приложение (рекомендуется для первого запуска)
|
||||
- `make down` - Остановить приложение
|
||||
- `make restart` - Перезапустить приложение
|
||||
- `make logs` - Показать логи приложения
|
||||
- `make shell` - Открыть shell в контейнере
|
||||
- `make stop` - Остановить приложение (alias для down)
|
||||
- `make status` - Показать статус контейнеров
|
||||
- `make health` - Проверить здоровье приложения
|
||||
- `make ready` - Проверить готовность приложения
|
||||
|
||||
**Разработка:**
|
||||
- `make dev` - Запустить в режиме разработки
|
||||
- `make test` - Запустить тесты
|
||||
- `make lint` - Запустить линтер
|
||||
- `make format` - Форматировать код
|
||||
- `make install` - Установить зависимости
|
||||
- `make clean` - Очистить Docker образы и контейнеры
|
||||
- `make clean-all` - Очистить все Docker ресурсы (включая volumes)
|
||||
|
||||
**Docker команды:**
|
||||
- `make docker CMD=build` или `make docker-build` - Собрать Docker образ (без docker-compose)
|
||||
- `make docker CMD=tag` или `make docker-tag` - Тегировать Docker образ для registry
|
||||
- `make docker CMD=push` или `make docker-push` - Собрать, тегировать и отправить образ в registry
|
||||
- `make docker CMD=run` или `make docker-run` - Запустить контейнер (без docker-compose)
|
||||
- `make docker CMD=stop` или `make docker-stop` - Остановить контейнер (без docker-compose)
|
||||
- `make docker CMD=logs` или `make docker-logs` - Показать логи контейнера (без docker-compose)
|
||||
- `make docker CMD=shell` или `make docker-shell` - Открыть shell в контейнере (без docker-compose)
|
||||
- `./make-wrapper.sh docker build` - Альтернативный синтаксис через обертку
|
||||
|
||||
**Git команды:**
|
||||
- `make git CMD=status` или `make git-status` - Показать статус репозитория
|
||||
- `make git CMD=pull` или `make git-pull` - Получить изменения из удаленного репозитория
|
||||
- `make git CMD=push ARGS=origin main` или `make git-push` - Отправить изменения в удаленный репозиторий
|
||||
- `make git CMD=add ARGS=file1 file2` или `make git-add ARGS=file1 file2` - Добавить файлы в индекс
|
||||
- `make git CMD=commit ARGS="message"` или `make git-commit ARGS="message"` - Создать коммит
|
||||
- `make git CMD=branch` или `make git-branch` - Показать список веток
|
||||
- `./make-wrapper.sh git status` - Альтернативный синтаксис через обертку
|
||||
- `./make-wrapper.sh git push origin main` - Отправить изменения с аргументами
|
||||
|
||||
**Kubernetes команды:**
|
||||
- `make k8s CMD=contexts` или `make k8s-contexts` - Показать доступные контексты
|
||||
- `make k8s CMD=set-context CONTEXT=prod` или `make k8s-set-context CONTEXT=prod` - Установить контекст
|
||||
- `make k8s CMD=apply` или `make k8s-apply` - Применить манифесты
|
||||
- `make k8s CMD=apply CONTEXT=prod` - Применить манифесты с указанием контекста
|
||||
- `make k8s CMD=delete` или `make k8s-delete` - Удалить ресурсы
|
||||
- `make k8s CMD=status` или `make k8s-status` - Показать статус подов
|
||||
- `make k8s CMD=logs` или `make k8s-logs` - Показать логи подов
|
||||
- `make k8s CMD=shell` или `make k8s-shell` - Открыть shell в поде
|
||||
- `./make-wrapper.sh k8s apply CONTEXT=prod` - Альтернативный синтаксис через обертку
|
||||
|
||||
**Env команды:**
|
||||
- `make env CMD=check` или `make env-check` - Проверить наличие .env файла
|
||||
- `make env CMD=create` или `make env-create` - Создать .env файл из env.example
|
||||
- `make env CMD=create-force` или `make env-create-force` - Принудительно создать .env файл (перезаписать существующий)
|
||||
- `./make-wrapper.sh env check` - Альтернативный синтаксис через обертку
|
||||
|
||||
**Утилиты:**
|
||||
- `make version` - Показать версию проекта
|
||||
- `make psql` - Подключиться к PostgreSQL (если используется)
|
||||
- `make redis-cli` - Подключиться к Redis (если используется)
|
||||
|
||||
## Использование
|
||||
|
||||
### API Endpoints
|
||||
|
||||
> 📖 **Подробная документация API:**
|
||||
> - [API для управления группами](docs/api/groups.md)
|
||||
> - [API для отправки сообщений](docs/api/message.md)
|
||||
> - [API для проверки здоровья](docs/api/health.md)
|
||||
> - [API для отладки](docs/api/debug.md)
|
||||
|
||||
#### Мониторинг (без авторизации)
|
||||
|
||||
Все эндпоинты мониторинга объединены под тегом `monitoring` и **не требуют авторизации**:
|
||||
|
||||
- `POST /api/v1/grafana/{group_name}/{thread_id}` - Отправка алерта из Grafana
|
||||
- `POST /api/v1/zabbix/{group_name}/{thread_id}` - Отправка алерта из Zabbix
|
||||
- `POST /api/v1/alertmanager/{k8s_cluster}/{group_name}/{thread_id}` - Отправка алерта из AlertManager
|
||||
|
||||
> 📖 **Подробная документация:**
|
||||
> - [Настройка Grafana](docs/monitoring/grafana.md)
|
||||
> - [Настройка Zabbix](docs/monitoring/zabbix.md)
|
||||
> - [Настройка AlertManager](docs/monitoring/alertmanager.md)
|
||||
|
||||
**Примечание:** Эндпоинты мониторинга объединены в один файл `app/api/v1/endpoints/monitoring.py` и используют общий тег `monitoring` в Swagger UI.
|
||||
|
||||
#### Управление группами (требуется API ключ)
|
||||
|
||||
- `GET /api/v1/groups/messengers` - Получить список поддерживаемых мессенджеров
|
||||
- `GET /api/v1/groups` - Получить список групп (без API ключа - только названия, с API ключом - полная информация)
|
||||
- `POST /api/v1/groups` - Создать группу
|
||||
- `PUT /api/v1/groups/{group_name}` - Обновить группу
|
||||
- `DELETE /api/v1/groups/{group_name}` - Удалить группу
|
||||
|
||||
> 📖 **Подробная документация:** [API для управления группами](docs/api/groups.md)
|
||||
|
||||
#### Отправка сообщений (требуется API ключ)
|
||||
|
||||
Все эндпоинты для отправки сообщений защищены декоратором `@require_api_key` и **требуют API ключ** в заголовке `X-API-Key`:
|
||||
|
||||
- `POST /api/v1/message/text` - Отправить текстовое сообщение
|
||||
- `POST /api/v1/message/photo` - Отправить фото
|
||||
- `POST /api/v1/message/video` - Отправить видео
|
||||
- `POST /api/v1/message/audio` - Отправить аудио
|
||||
- `POST /api/v1/message/document` - Отправить документ
|
||||
|
||||
**Аутентификация:**
|
||||
- Все эндпоинты требуют заголовок `X-API-Key: your_api_key_here`
|
||||
- API ключ настраивается в переменной окружения `API_KEY` в файле `.env`
|
||||
- В Swagger UI доступна авторизация через кнопку "Authorize" (🔒)
|
||||
|
||||
> 📖 **Подробная документация:** [API для отправки сообщений](docs/api/message.md)
|
||||
|
||||
#### Проверка здоровья (без авторизации)
|
||||
|
||||
- `GET /api/v1/health` - Проверка здоровья и готовности приложения
|
||||
|
||||
> 📖 **Подробная документация:** [API для проверки здоровья](docs/api/health.md)
|
||||
|
||||
#### Отладка
|
||||
|
||||
- `POST /api/v1/debug/dump` - Сохранить JSON данные для отладки
|
||||
|
||||
> 📖 **Подробная документация:** [API для отладки](docs/api/debug.md)
|
||||
|
||||
#### Jira
|
||||
|
||||
**Примечание:** Создание тикетов в Jira происходит автоматически при получении алертов (внутренний процесс). API endpoints для создания тикетов вручную удалены в соответствии с требованиями.
|
||||
|
||||
> 📖 **Подробная документация:** [Конфигурация Jira Mapping](docs/jira-mapping.md)
|
||||
|
||||
### Настройка Webhooks
|
||||
|
||||
> 📖 **Подробная документация:**
|
||||
> - [Настройка Grafana](docs/monitoring/grafana.md)
|
||||
> - [Настройка Zabbix](docs/monitoring/zabbix.md)
|
||||
> - [Настройка AlertManager](docs/monitoring/alertmanager.md)
|
||||
|
||||
## Интеграция с Jira
|
||||
|
||||
### Настройка Jira
|
||||
|
||||
> 📖 **Подробная документация:** [Конфигурация Jira Mapping](docs/jira-mapping.md)
|
||||
|
||||
**Примечание:** Создание тикетов в Jira происходит автоматически при получении алертов (внутренний процесс). API endpoints для создания тикетов вручную удалены в соответствии с требованиями.
|
||||
|
||||
## Стоп-слова
|
||||
|
||||
Приложение поддерживает фильтрацию алертов по стоп-словам. Алерты, содержащие следующие паттерны, не будут отправлены:
|
||||
|
||||
- `InfoInhibitor`
|
||||
- `Watchdog`
|
||||
- `etcdHighCommitDurations`
|
||||
- `etcdHighNumberOfFailedGRPCRequests`
|
||||
- `kubePersistentVolumeFillingUp`
|
||||
- `kubePersistentVolumeInodesFillingUp`
|
||||
|
||||
## Метрики Prometheus
|
||||
|
||||
Приложение отправляет метрики в Prometheus Pushgateway:
|
||||
|
||||
- `tg_monitoring_gateway_api_endpoint_total` - общее количество обращений к эндпоинтам API
|
||||
- `tg_monitoring_gateway_total_messages` - всего сообщений получено
|
||||
- `tg_monitoring_gateway_sent_messages` - сообщений успешно отправлено
|
||||
- `tg_monitoring_gateway_reject_messages` - сообщений отклонено (стоп-слова)
|
||||
- `tg_monitoring_gateway_error_messages` - ошибок отправки сообщений
|
||||
- `tg_monitoring_gateway_firing_messages` - горящих алертов
|
||||
- `tg_monitoring_gateway_critical_messages` - критических алертов
|
||||
- `tg_monitoring_gateway_resolved_messages` - исправленных алертов
|
||||
- `tg_monitoring_gateway_jira_tickets_created` - Jira тикетов создано
|
||||
- `tg_monitoring_gateway_jira_tickets_errors` - ошибок создания Jira тикетов
|
||||
|
||||
## Отправка простых сообщений
|
||||
|
||||
> 📖 **Подробная документация:** [API для отправки сообщений](docs/api/message.md)
|
||||
|
||||
Приложение поддерживает отправку простых сообщений (текст, фото, видео, аудио, документы) в мессенджеры (Telegram, MAX/VK) без привязки к системам мониторинга.
|
||||
|
||||
## Разработка
|
||||
|
||||
### Запуск в режиме разработки
|
||||
|
||||
```bash
|
||||
make dev
|
||||
```
|
||||
|
||||
### Запуск тестов
|
||||
|
||||
```bash
|
||||
make test
|
||||
```
|
||||
|
||||
### Линтинг
|
||||
|
||||
```bash
|
||||
make lint
|
||||
```
|
||||
|
||||
### Форматирование кода
|
||||
|
||||
```bash
|
||||
make format
|
||||
```
|
||||
|
||||
### Просмотр всех доступных команд
|
||||
|
||||
```bash
|
||||
make help
|
||||
```
|
||||
|
||||
### Проверка здоровья приложения
|
||||
|
||||
```bash
|
||||
make health # Проверить здоровье
|
||||
make ready # Проверить готовность
|
||||
```
|
||||
|
||||
### Управление Docker образами
|
||||
|
||||
```bash
|
||||
# Использование через переменную CMD
|
||||
make docker CMD=build # Собрать образ
|
||||
make docker CMD=tag # Тегировать образ
|
||||
make docker CMD=push # Отправить образ в registry
|
||||
|
||||
# Или напрямую
|
||||
make docker-build # Собрать образ
|
||||
make docker-tag # Тегировать образ
|
||||
make docker-push # Отправить образ в registry
|
||||
|
||||
# Или через обертку
|
||||
./make-wrapper.sh docker build
|
||||
./make-wrapper.sh docker push
|
||||
```
|
||||
|
||||
### Работа с Git
|
||||
|
||||
```bash
|
||||
# Использование через переменную CMD
|
||||
make git CMD=status # Показать статус
|
||||
make git CMD=pull # Получить изменения
|
||||
make git CMD=push ARGS=origin main # Отправить изменения
|
||||
make git CMD=add ARGS=file1 file2 # Добавить файлы
|
||||
make git CMD=commit ARGS="message" # Создать коммит
|
||||
|
||||
# Или напрямую
|
||||
make git-status
|
||||
make git-pull
|
||||
make git-push
|
||||
|
||||
# Или через обертку
|
||||
./make-wrapper.sh git status
|
||||
./make-wrapper.sh git push origin main
|
||||
./make-wrapper.sh git commit "Update README"
|
||||
```
|
||||
|
||||
### Работа с Kubernetes
|
||||
|
||||
```bash
|
||||
# Показать доступные контексты
|
||||
make k8s CMD=contexts
|
||||
# или
|
||||
make k8s-contexts
|
||||
# или
|
||||
./make-wrapper.sh k8s contexts
|
||||
|
||||
# Установить контекст
|
||||
make k8s CMD=set-context CONTEXT=prod
|
||||
# или
|
||||
make k8s-set-context CONTEXT=prod
|
||||
# или
|
||||
./make-wrapper.sh k8s set-context CONTEXT=prod
|
||||
|
||||
# Применить манифесты
|
||||
make k8s CMD=apply
|
||||
# или с указанием контекста
|
||||
make k8s CMD=apply CONTEXT=prod
|
||||
# или
|
||||
make k8s-apply
|
||||
# или
|
||||
./make-wrapper.sh k8s apply CONTEXT=prod
|
||||
|
||||
# Показать статус подов
|
||||
make k8s CMD=status
|
||||
# или
|
||||
make k8s-status
|
||||
|
||||
# Показать логи подов
|
||||
make k8s CMD=logs
|
||||
# или
|
||||
make k8s-logs
|
||||
|
||||
# Открыть shell в поде
|
||||
make k8s CMD=shell
|
||||
# или
|
||||
make k8s-shell
|
||||
```
|
||||
|
||||
### Работа с .env файлом
|
||||
|
||||
```bash
|
||||
# Проверить наличие .env файла
|
||||
make env CMD=check
|
||||
# или
|
||||
make env-check
|
||||
# или
|
||||
./make-wrapper.sh env check
|
||||
|
||||
# Создать .env файл из env.example
|
||||
make env CMD=create
|
||||
# или
|
||||
make env-create
|
||||
# или
|
||||
./make-wrapper.sh env create
|
||||
|
||||
# Принудительно создать .env файл
|
||||
make env CMD=create-force
|
||||
# или
|
||||
make env-create-force
|
||||
# или
|
||||
./make-wrapper.sh env create-force
|
||||
```
|
||||
|
||||
## Развертывание в Kubernetes
|
||||
|
||||
1. Создайте Secret с переменными окружения:
|
||||
|
||||
```bash
|
||||
kubectl create secret generic message-gateway-secret \
|
||||
--from-literal=telegram_bot_token=your_token \
|
||||
--from-literal=grafana_url=http://grafana.example.com \
|
||||
--from-literal=jira_enabled=true \
|
||||
--from-literal=jira_url=https://jira.example.com \
|
||||
--from-literal=jira_email=user@example.com \
|
||||
--from-literal=jira_api_token=your_jira_api_token \
|
||||
-n message-gateway
|
||||
```
|
||||
|
||||
2. Примените манифесты:
|
||||
|
||||
```bash
|
||||
# Использование make
|
||||
make k8s CMD=apply
|
||||
# или с указанием контекста
|
||||
make k8s CMD=apply CONTEXT=prod
|
||||
# или напрямую
|
||||
make k8s-apply
|
||||
# или через обертку
|
||||
./make-wrapper.sh k8s apply CONTEXT=prod
|
||||
|
||||
# Или напрямую через kubectl
|
||||
kubectl apply -f kubernetes.yaml
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
|
||||
```
|
||||
message-gateway/
|
||||
├── app/
|
||||
│ ├── api/
|
||||
│ │ └── v1/
|
||||
│ │ ├── endpoints/ # Эндпоинты API
|
||||
│ │ │ ├── jira.py # Эндпоинты Jira
|
||||
│ │ │ ├── message.py # Эндпоинты для отправки сообщений
|
||||
│ │ │ ├── groups.py # Эндпоинты для управления группами
|
||||
│ │ │ └── ...
|
||||
│ │ └── router.py # Роутер API
|
||||
│ ├── core/ # Основные утилиты
|
||||
│ │ ├── config.py # Конфигурация
|
||||
│ │ ├── telegram_client.py # Клиент Telegram
|
||||
│ │ ├── jira_client.py # Клиент Jira
|
||||
│ │ ├── jira_mapping.py # Управление маппингом Jira
|
||||
│ │ ├── jira_utils.py # Утилиты для работы с Jira
|
||||
│ │ ├── groups.py # Управление группами
|
||||
│ │ ├── metrics.py # Метрики Prometheus
|
||||
│ │ └── utils.py # Вспомогательные утилиты
|
||||
│ ├── models/ # Модели Pydantic
|
||||
│ │ ├── jira.py # Модели Jira
|
||||
│ │ ├── message.py # Модели для отправки сообщений
|
||||
│ │ ├── group.py # Модели для управления группами
|
||||
│ │ ├── grafana.py # Модели Grafana
|
||||
│ │ ├── zabbix.py # Модели Zabbix
|
||||
│ │ ├── alertmanager.py # Модели AlertManager
|
||||
│ │ └── ...
|
||||
│ ├── modules/ # Модули обработки алертов
|
||||
│ └── main.py # Точка входа приложения
|
||||
├── config/ # Конфигурационные файлы
|
||||
│ ├── groups.json # Конфигурация групп Telegram
|
||||
│ └── jira_mapping.json # Конфигурация маппинга Jira
|
||||
├── templates/ # Jinja2 шаблоны
|
||||
│ ├── jira_common.tmpl # Шаблон описания Jira тикета
|
||||
│ └── ...
|
||||
├── docker-compose.yaml # Docker Compose конфигурация
|
||||
├── Dockerfile # Docker образ
|
||||
├── Makefile # Makefile для управления проектом
|
||||
├── make-wrapper.sh # Обертка для поддержки подкоманд с пробелами
|
||||
├── kubernetes.yaml # Kubernetes манифесты
|
||||
├── requirements.txt # Python зависимости
|
||||
├── env.example # Пример файла окружения
|
||||
└── README.md # Документация
|
||||
```
|
||||
|
||||
## Лицензия
|
||||
|
||||
Apache 2.0
|
||||
|
||||
## Контакты
|
||||
|
||||
- **Автор:** Сергей Антропов
|
||||
- **Email:** sergey@antropoff.ru
|
||||
- **Сайт:** https://devops.org.ru
|
||||
Reference in New Issue
Block a user