Что получится, если объединить Prometheus, работающий на Kubernetes, умный движок, взаимодействующий с ChatGPT, и мессенджер типа Slack? Вы получите платформу с открытым исходным кодом для поиска и устранения ошибок в Kubernetes под названием Robusta.

В этом посте мы рассмотрим применение Robusta поверх стека мониторинга Prometheus и покажем, почему возникают алерты и как их можно устранить.

Источник: Robusta
Источник: Robusta

Как это работает?

Robusta фокусируется на всем, что происходит после развертывания приложения.

Этот акцент можно определить с помощью трех компонентов.

  • Триггеры: определяют время выполнения (по алертам, логам, событиям, изменениям и так далее).

  • Действия: определяет, что делать (в Robusta есть более 50 встроенных алгоритмов). Мы используем действие для отправки запроса в ChatGPT через API-ключ.

  • Мессенджер: определяет, куда отправлять результат (в нашем случае в Slack).

Вы можете задать его в разделе customPlaybooks следующим образом:

customPlaybooks:
# Add the 'Ask ChatGPT' button to all Prometheus alerts
- triggers:
  - on_prometheus_alert:
      alert_name: KubePodCrashLooping
  actions:
    - chat_gpt_enricher: {}
  sinks:
    - slack

Анимация от Robusta показывает, что происходит за кулисами:

Как настроить Robusta на вашем кластере Kubernetes?

Во-первых, необходимо установить robusta-cli на python. Он позволяет, например, генерировать значения для helm-чарта.

1. Установите Robusta cli на python:

python3 -m pip install -U robusta-cli --no-cache

2. Создайте файл с параметрами для Helm:

Вы должны будете выполнить все перечисленные действия:

robusta gen-config
Robusta reports its findings to external destinations (we call them "sinks").
Well define some of them now.

Configure Slack integration? This is HIGHLY recommended. [Y/n]: Y
If your browser does not automatically launch, open the below url:
https://api.robusta.dev/integrations/slack?id=*****
Youve just connected Robusta to the Slack of: poc-chatgpt-kubernetes
Which slack channel should I send notifications to? # pocs
Configure MsTeams integration? [y/N]: n
Configure Robusta UI sink? This is HIGHLY recommended. [Y/n]: n


Robusta can use Prometheus as an alert source.
If you havent installed it yet, Robusta can install a pre-configured Prometheus.
Would you like to do so? [y/N]: y
Please read and approve our End User License Agreement: https://api.robusta.dev/eula.html
Do you accept our End User License Agreement? [y/N]: y
Last question! Would you like to help us improve Robusta by sending exception reports? [y/N]: y
Saved configuration to ./generated_values.yaml - save this file for future use!
Finish installing with Helm (see the Robusta docs). Then login to Robusta UI at https://platform.robusta.dev

2.1 Вы получите YAML-файл, аналогичный этому:

clusterName: "aks-development"
globalConfig:
  signing_key: ea657a0b******
  account_id: 7935371f******
sinksConfig:
- slack_sink:
    name: main_slack_sink
    slack_channel: pocs
    api_key: xoxb******
enablePrometheusStack: true
enablePlatformPlaybooks: true
runner:
  sendAdditionalTelemetry: true
rsa:
  private: ******
  public: ******

Затем вы можете изменить файл generated_values.yaml для создания нескольких триггеров. Для примера я буду использовать простой и понятный триггер.

3. Установите Robusta с помощью Helm:

kubectl create ns robusta 
helm repo add robusta https://robusta-charts.storage.googleapis.com && helm repo update
helm install robusta robusta/robusta -f ./generated_values.yaml

4. Запустите демонстрацию, чтобы проверить, работает ли триггер (Prometheus) + действие (Logs-Enricher) + sink (Slack):

kubectl apply -f https://raw.githubusercontent.com/robusta-dev/kubernetes-demos/main/pending_pods/pending_pod.yaml

robusta playbooks trigger prometheus_alert alert_name=KubePodCrashLooping namespace=robusta pod_name=example-pod

Вы получите примерно такой результат:

5. Настройте триггер (алерт Prometheus) + действие (ChatGPT) + Sink (Slack).

Для этой части я буду использовать репозиторий kubernetes-chatgpt-bot с robusta-dev и изменю generated_values.yaml следующим образом:

clusterName: "aks-development"
globalConfig:
  chat_gpt_token: sk-dw******
  signing_key: ea657a******
  account_id: 7935371f******
sinksConfig:
- slack_sink:
    name: main_slack_sink
    slack_channel: pocs
    api_key: xoxb******
- robusta_sink:
    name: robusta_ui_sink
    token: eyJhY2NvdW******
enablePrometheusStack: true
# This part is added to the default generated_values.yaml
enablePlatformPlaybooks: true
runner:
  sendAdditionalTelemetry: true
rsa:
  private: ******
  public: ******

# This part is added to the default generated_values.yaml
playbookRepos:
  chatgpt_robusta_actions:
    url: "https://github.com/robusta-dev/kubernetes-chatgpt-bot.git"

# This part is added to the default generated_values.yaml
customPlaybooks:
# Add the 'Ask ChatGPT' button to all Prometheus alerts
- triggers:
  - on_prometheus_alert: {}
  actions:
  - chat_gpt_enricher: {}

Вам не нужно настраивать sink, потому что параметры уже заданы в sinksConfig, и мы будем реагировать на все оповещения Prometheus.

6. Обновите Helm chart, чтобы запустить customPlaybooks:

helm upgrade robusta robusta/robusta --values=generated_values.yaml

7. Запустите демонстрацию, чтобы проверить, работает ли триггер (Prometheus) + действие (ChatGPT) + Slack:

kubectl apply -f https://raw.githubusercontent.com/robusta-dev/kubernetes-demos/main/pending_pods/pending_pod.yaml

robusta playbooks trigger prometheus_alert alert_name=KubePodCrashLooping namespace=robusta pod_name=example-pod

Теперь вы должны увидеть в Slack кнопку «Ask ChatGPT».

Задайте вопрос и получите ответ:

Robusta можно описать тремя пунктами:

  • Механизм автоматизации для Kubernetes

  • Встроенная автоматизация для обогащения и устранения общих предупреждений

  • Инструмент траблшутинга для всего остального.

Это позволяет использовать в один момент времени Robusta, оператор Prometheus, стандартные оповещения Kubernetes и веб-интерфейс, чтобы видеть все алерты, изменения и события в вашем кластере.

Вы также можете написать собственные механизмы автоматизации на Python, например, дополнение ChatGPT и использовать его вместе с движком Robusta в  среде Kubernetes.

От редакции

Разобраться в Kubernetes вы можете в Слёрме. Мы подготовили курсы для специалистов с разным уровнем владения K8s — «Kubernetes база» для системных администраторов и «Kubernetes для разработчиков» — тех, кто хочет разрабатывать приложения под Kubernetes.

А еще у нас есть выгодный комплект: «Kubernetes база» + «Мониторинг и логи в Kubernetes». Узнать больше о программе и записаться можно на нашем сайте.

Комментарии (0)