Kube Notify Plus — Розширене сповіщення як webhook для менеджера сповіщень

Мій перший проєкт на Go завершено xD

Репозиторій: https://github.com/BlackMetalz/KubeNotifyPlus

Огляд

Я витратив 15 хвилин на цей діаграму xD

pic

Особливості:

  • Виконує роль вебхуку для Alertmanager для обробки та управління сповіщеннями.
  • Надсилає детальні сповіщення конкретним користувачам або групам, які відповідають за постраждалі сервіси.
  • У разі аварії пода надає точну причину збою, включаючи деталі стану пода.
  • Підтримка сповіщень для ingress та інших сповіщень у k8s, також підтримує загальні сповіщення — це можливість використовувати це для всіх вебхуків в alert manager.
  • Демонстраційні дані та інші ресурси надані в папці ресурсів.

Приклад правил Prometheus

pic

Це ще не включає ingress.

Огляд сповіщень

  1. Коли сповіщення надсилається в групу системних адміністраторів (яка завжди відповідає за всі сповіщення від системи):

pic

Аварія пода з подіями

pic

Аварія пода через OOM з логами та подіями (ігноруйте друге повідомлення my-app-app-demo xD)

pic

Сповіщення для ingress

pic

Сповіщення для зупиненого вузла

Маппінг сповіщень користувачів

  • Таблиця users: створюєте ім'я користувача та його Telegram ID.

pic

дані таблиці users

  • Таблиця service_mappings: для зв'язування користувача з сервісом, зазвичай це ім'я деплойменту або ім'я ingress, а для користувача — це userID з таблиці users. Я ще не встиг зробити CURD UI для користувачів та маппінгу сервісів xD

pic

дані таблиці servicemappings_

Деплой до k8s

Так, ми повинні деплоїти цей сервіс, щоб отримати ingress як кінцеву точку та додати його до alert manager. Я деплоїв за допомогою свого стеку: https://medium.com/@kienlt.qn/my-devops-journey-with-jenkins-argocd-and-gitops-tools-e61a57201361

Манифест оновлено тут: https://github.com/BlackMetalz/k8s-manifest

І це дуже корисно для виявлення деяких видів витоків (деякі API токени, які я використовував для тестування xD)

pic

Звіт про витоки в Git

pic

Сканер Trivy

Деякі дублікати коду та перевірки покриття за допомогою Sonarqube, але я не зміг зараз створити тестові функції для них, тому пропустив сканування коду (мій CICD pipeline це підтримує xD)

pic

Quality Gate: Failed (Coverage on New Code is less than 80.00%)

Висновки

  • Я тільки почав вивчати Golang, щоб створювати щось нове, що не написано на Python.
  • Я багато чого навчився і запам'ятав з базових понять Go, таких як:
  • Функції повинні починатися з великої літери, якщо ви хочете їх зробити публічними.
  • модульний підхід, не буду все вміщувати в один файл main.go xD
  • тип struct — це круто
  • і ще багато іншого..
  • Хоча код все ще базовий, я гордий ним як системний адміністратор (DevOps на мою думку — це культура роботи або менталітет)
  • У мене є лише ідея створювати інструменти, решта підтримується та покривається ChatGPT/Copilot/ClaudeAI xD (я очікував, що закінчу це за 2 місяці, але не думав, що зможу зробити все за 11 днів)
  • Використовувати Jira — це чудово для відстеження прогресу

pic

Панель інструментів Jira

  • Є кілька моментів, які ще можна покращити:
  • Додати підтримку отримання логів та подій Pod для кількох кластерів k8s.
  • Додати базову аутентифікацію для цього.
  • Додати UI для CURD користувачів та маппінгу сервісів.

Перекладено з: Kube Notify Plus- Enhanced notify as webhook for alert manager

Leave a Reply

Your email address will not be published. Required fields are marked *