#microsoft-teams #azure-aks
Вопрос:
Мои модули работают на кластере AKS. Всякий раз, когда мои модули перезапускались, я должен был получать уведомление на канале моей команды, есть ли какие-либо статьи или команды для настройки уведомления?
Комментарии:
1. Эй, Входящий Webhook позволяет любым внешним приложениям отправлять уведомления по каналам команд. Пожалуйста, обратитесь к — Веб- крючки и соединитель и создайте входящий веб-крючок
Ответ №1:
Для этого же вы можете использовать инструменты или приложения, такие как botkube : https://www.botkube.io/
Также проверьте Kubewatch : https://github.com/bitnami-labs/kubewatch
Вы также можете реализовать Grafana с помощью Prometheus и диспетчера оповещений для мониторинга и получения системы оповещений. : https://github.com/grafana-operator/grafana-operator
Однако, если вы не можете найти какие-либо инструменты или приложения, вы можете записать пользовательский сценарий python, node или любого языка, с которым вы хорошо знакомы, и отслеживать любое событие перезапуска модуля и отправлять событие slack hook.
Поделившись одним примером кода python с проверкой запуска или сбоя модуля и отправкой уведомления slack, вы можете обновить логику в соответствии с потребностями.
from kubernetes import client, config, watch
import json
import requests
import time
logger = logging.getLogger('k8s_events')
logger.setLevel(logging.DEBUG)
# If running inside pod
#config.load_incluster_config()
# If running locally
config.load_kube_config()
v1 = client.CoreV1Api()
v1ext = client.ExtensionsV1beta1Api()
w = watch.Watch()
mydict={}
webhook_url = '';
while True:
pod_list= v1.list_namespaced_pod("default");
for i in pod_list.items:
for c in i.status.container_statuses:
if(c.ready == True):
if i.metadata.name in mydict:
print("Inside mydict If");
print("Pod updated : ",i.metadata.name);
print("My dict value : ",mydict);
mydict[i.metadata.name]['end_time'] = i.status.conditions[1].last_transition_time;
dt_started = mydict[i.metadata.name]['start_time'].replace(tzinfo=None);
dt_ended = mydict[i.metadata.name]['end_time'].replace(tzinfo=None);
duration = str((dt_ended - dt_started).total_seconds()) ' Sec';
fields = [{"title": "Status", "value": "READY", "short": False }, {"title": "Pod name", "value": i.metadata.name, "short": False }, {"title": "Duration", "value": duration, "short": False }, {"title": "Service name", "value": c.name, "short": False } ]
if c.name not in ('conversation-auto-close-service-scheduler','admin-service-trail-fllow-up-scheduler','bot-trial-email-scheduler','conversation-service-scheduler','faq-service-scheduler','nlp-service-scheduler','refresh-add-on-scheduler','response-sheet-scheduler'):
text = c.name " Pod is started";
data = {"text": text, "mrkdwn": True, "attachments" : [{"color": "#FBBC05", "title": "Pod Details", "fields" : fields, "footer": "Manvar", "footer_icon": "https://cdn.test.manvar.com/assets/manvar-icon.png"}, ], }
print("Final data to post: ",data);
response = requests.post(webhook_url, data=json.dumps(data),headers={'Content-Type': 'application/json'});
del mydict[i.metadata.name]
if response.status_code != 200:
raise ValueError('Request to slack returned an error %s, the response is:n%s' % (response.status_code, response.text));
time.sleep(1);
else:
mydict[i.metadata.name] = {"start_time": i.status.conditions[0].last_transition_time,"end_time": i.status.conditions[1].last_transition_time};