Skip to content

Repository files navigation

ChatOps-бот для управления инцидентами

Этот проект представляет собой бэкенд для интеллектуального ChatOps-бота, предназначенного для управления инцидентами в Kubernetes. Бот получает алерты от Prometheus Alertmanager, сохраняет их в базу данных и предоставляет многоуровневый интерфейс для их расследования и устранения через Telegram.

Архитектура

  • Telegram Gateway: Монолитный сервис на Go.
  • База данных: Локальная SQLite (chatops.db) для хранения пользователей и инцидентов. Предоставлена тестовая.
  • Миграции: Управляются с помощью golang-migrate/migrate.
  • Веб-фреймворк: chi для роутинга HTTP-запросов.
  • Telegram Bot Framework: telebot/v3.
  • ORM: GORM для взаимодействия с базой данных.

Основные возможности

  • Прием вебхуков от Alertmanager: Автоматическое создание инцидентов на основе алертов.
  • Персистентное хранилище: Пользователи и инциденты сохраняются в базе данных SQLite.
  • Гибридный UX: Реализовано два сценария взаимодействия:
    • "Быстрый путь" (Two-Click Workflow): На главном экране инцидента бот предлагает 2-3 наиболее вероятных действия для решения проблемы, сгенерированных на основе лейблов алерта.
    • "Глубокое погружение" (Drill-Down): Пользователь может "провалиться" от инцидента к списку затронутых ресурсов (например, деплойментов), оттуда — к списку их подов, и для каждого пода выполнить специфичные действия (посмотреть логи, описать, удалить).
  • Жизненный цикл инцидента: Инциденты имеют статусы (active, resolved, rejected) и полный, неизменяемый лог аудита всех выполненных действий.

Установка и запуск

Требования

  • Go 1.24+
  • make (опционально, для удобства)

1. Клонирование репозитория

git clone <URL_РЕПОЗИТОРИЯ>
cd chatops-bot

2. Установка зависимостей

go mod tidy

3. Настройка конфигурации

  1. Настройка переменных окружения: Создайте файл .env в корне проекта, скопировав .env.example:

    cp .env.example .env

    Откройте файл .env и укажите ваш токен для Telegram-бота:

    TELEGRAM_BOT_TOKEN="your-telegram-bot-token"
    
  2. Настройка основного конфигурационного файла: Все остальные настройки приложения хранятся в файле config.json.

    • Создайте файл конфигурации: Скопируйте config.example.json в config.json.

      cp config.example.json config.json
    • Отредактируйте config.json: Откройте файл config.json и укажите необходимые параметры:

      • telegram.alert_channel_id: ID вашего Telegram-канала для оповещений.
      • server.webhook_token: Секретный токен для аутентификации Alertmanager.

4. Запуск приложения

go run cmd/chatops-bot/main.go --config=config.json

При первом запуске будут автоматически применены миграции и создан файл chatops.db. Сервер API запустится на порту APP_PORT, а сервер для вебхуков — на ALERT_PORT.

Взаимодействие с ботом

  • /start: Показать приветственное сообщение.
  • /incidents: Показать список активных инцидентов.
  • /history: Показать список последних закрытых инцидентов.
  • /help: Набор комманд

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

Интеграционное тестирование

Для проверки полного цикла получения и обработки алерта без настройки реального Alertmanager можно использовать специальный скрипт.

  1. Запустите приложение, как описано выше.

  2. Выполните скрипт в новом окне терминала:

    ./send-test-alert.sh

    Скрипт отправит тестовый алерт на ваш локальный сервер. Вы можете изменить переменные PORT и TOKEN внутри скрипта или установить переменные окружения ALERT_PORT и WEBHOOK_TOKEN. (можно без токенов)

  3. Проверьте результат в Telegram: после выполнения скрипта в боте должен появиться новый инцидент.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages