首页 > 其他分享 >循序渐进--从零开始建设k8s监控之alertmanager+发送飞书(三)

循序渐进--从零开始建设k8s监控之alertmanager+发送飞书(三)

时间:2025-01-08 10:26:59浏览次数:1  
标签:__ alertmanager name -- prometheus msg 告警 k8s

前言

书接上文,prometheus已经安装好了,监控数据是有了,我们需要对其进行告警,并且可以发送到对应的平台,比如飞书、钉钉等,这里选择用飞书来测试

环境准备

组件 版本
操作系统 Ubuntu 22.04.4 LTS
docker 24.0.7
alertmanager v0.27.0

下载编排文件

本文所有的编排文件,都在这里

▶ cd /tmp && git clone git@github.com:wilsonchai8/installations.git && cd installations/prometheus

安装alertmanager

alertmanager主要用作对prometheus发来的告警进行响应,包括发送、抑制等

▶ cd installations/prometheus
▶ kubectl apply -f alertmanager.yaml

检查是否启动

▶ kubectl -n prometheus get pod -owide | grep alertmanager
alertmanager-5b6d594f6c-2swpw        1/1     Running   0          69s   10.244.0.17    minikube       <none>           <none>

访问页面

▶ kubectl get node -owide
NAME       STATUS   ROLES           AGE    VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
minikube   Ready    control-plane   6d2h   v1.26.3   192.168.49.2   <none>        Ubuntu 20.04.5 LTS   6.8.0-45-generic   docker://23.0.2

▶ kubectl -n prometheus get svc | grep alertmanager
alertmanager         NodePort   10.110.182.95    <none>        9093:30297/TCP   70s

http://192.168.49.2:30297

测试alertmanager

1. 定义一个测试的deployment

▶ kubectl create deployment busybox-test --image=registry.cn-beijing.aliyuncs.com/wilsonchai/busybox:latest -- sleep 33333
deployment.apps/busybox-test created

▶ kubectl get pod
NAME                           READY   STATUS    RESTARTS   AGE
busybox-test-fcb69d5f9-tn8vx   1/1     Running   0          6s

2. 定义告警规则

我们定义当deployment的副本是为0就告警,修改prometheus configmap

在最底部追加,相当于新增一个配置文件,里面专门定义告警规则

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-cm
  labels:
    name: prometheus-cm
  namespace: prometheus
data:
  prometheus.yml: |-
    global:
      scrape_interval: 5s
      evaluation_interval: 5s

    alerting:
      alertmanagers:
        - static_configs:
            - targets: ['alertmanager:9093']

    rule_files:
      - /etc/prometheus/*.rules

    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
        - targets: ['localhost:9090']

      - job_name: "prometheus-kube-state-metrics"
        static_configs:
          - targets: ["kube-state-metrics.kube-system:8080"]

      - job_name: 'kubernetes-nodes'
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        kubernetes_sd_configs:
        - role: node
        relabel_configs:
        - source_labels: [__address__]
          regex: '(.*):10250'
          replacement: '${1}:9100'
          target_label: __address__
          action: replace
        - action: labelmap
          regex: __meta_kubernetes_node_label_(.+)

# 从这里是新加的
  prometheus.rules: |-
    groups:
    - name: test alert
      rules:
      - alert: deployment replicas is 0
        expr: kube_deployment_spec_replicas == 0
        for: 30s
        labels:
          severity: slack
        annotations:
          summary: deployment replicas is 0

然后重启prometheus,查看告警是否生效

3. 触发告警

▶ kubectl scale --replicas=0 deploy busybox-test

等待些许片刻,查看alertmanager页面

已经有告警触发了

发送到飞书

我们已经有一个告警了,但是目前没法通知出来,需要给他告警到飞书去

1. 创建飞书的告警群组,并创建机器人拿到机器人的webhook

webhook:

https://open.feishu.cn/open-apis/bot/v2/hook/*******************

2. 创建发送消息的服务

这里我们选用python tornado web服务来接收从alertmanager发送的告警信息

from tornado.ioloop import IOLoop
import tornado.httpserver as httpserver
import tornado.web
import requests
import json

WEBHOOK_URL = 'https://open.feishu.cn/open-apis/bot/v2/hook/********'

def send_to_feishu(msg_raw):
    headers = { 'Content-Type': 'application/json' }
    for alert in msg_raw['alerts']:
        msg = '## 告警发生 ##\n'
        msg += '\n'
        msg += '告警:{}\n'.format(alert['labels']['alertname'])
        msg += '时间:{}\n'.format(alert['startsAt'])
        msg += '级别:{}\n'.format(alert['labels']['severity'])
        msg += '详情:\n'
        msg += '    deploy:{}\n'.format(alert['labels']['deployment'])
        msg += '    namespace:{}\n'.format(alert['labels']['namespace'])
        msg += '    content:{}\n'.format(alert['annotations']['summary'])
        data = {
            'msg_type': 'text',
            'content': {
                'text': msg
            }
        }
        res = requests.Session().post(url=WEBHOOK_URL, headers=headers, json=data)
        print(res.json())

class SendmsgFlow(tornado.web.RequestHandler):
    def post(self, *args, **kwargs):
        send_to_feishu(json.loads(self.request.body.decode('utf-8')))

def applications():
    urls = []
    urls.append([r'/sendmsg', SendmsgFlow])
    return tornado.web.Application(urls)

def main():
    app = applications()
    server = httpserver.HTTPServer(app)
    server.bind(10000, '0.0.0.0')
    server.start(1)
    IOLoop.current().start()

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt as e:
        IOLoop.current().stop()
    finally:
        IOLoop.current().close()

本脚本已上传至仓库

3. 修改alertmanager configmap

修改alertmanager的configmap,把webhook_configs改为sendmsg的api地址

apiVersion: v1
kind: ConfigMap
metadata:
  name: alertmanager-config
  namespace: prometheus
data:
  alertmanager.yml: |-
    global:
      resolve_timeout: 5m
    route:
      group_by: ['alertname', 'cluster']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 5m
      receiver: default
    receivers:
    - name: 'default'
      webhook_configs:
        - url: 'http://127.0.0.1:10000/sendmsg'

重启alertmanager

4. 检查飞书

至此,一个简单告警流程制作完成

联系我

  • 联系我,做深入的交流


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

标签:__,alertmanager,name,--,prometheus,msg,告警,k8s
From: https://www.cnblogs.com/MrVolleyball/p/18658026

相关文章

  • docker-compose安装mysql.211216
    0.安装docker-compose参见本站另外文章1.目录结构:按以下目录结构mkdir文件夹和相关文件**mysql目录下的data为数据目录,mysql的数据表、二进制日志文件就在这里。.env文件包含了一些变量,这些变量可以在docker-compose.yml文件中通过${variable_name}来引用。2.创......
  • AI 与 Mermaid 使用教程之流程图 - 从入门到精通
    本文由 Mermaid中文文档 整理而来,并且它同时提供了一个Mermaid在线编辑器,支持在线编辑与生成流程图。在文章的末尾我们将介绍如何使用AI来自动生成Mermaid流程图。Mermaid流程图-基本语法流程图由节点(几何形状)和边(箭头或线)组成。Mermaid代码定义了如何创建节点和边,并......
  • 探讨云计算如何助力电商平台提升管理效率
    一、数字化技术推动电商管理发展的重要性电商行业的竞争日益激烈,消费者对购物体验的要求不断提高。电商企业必须通过数字化手段提升效率、优化流程,并通过数据驱动的决策来提高客户满意度和运营效益。而大数据、人工智能和云计算等技术的融合应用,为电商平台提供了新的解决方案。......
  • FileSystemManager.accessSync
    FileSystemManager.accessSync(stringpath)以Promise风格调用:不支持小程序插件:支持,需要小程序基础库版本不低于2.19.2微信鸿蒙OS版:支持相关文档:文件系统功能描述FileSystemManager.access的同步版本参数stringpath要判断是否存在的文件/目录路径(本地路......
  • 前端学习openLayers配合vue3(两个坐标之间线的绘制)
    上节我们学了点的绘制,今天我们来学习一下线的绘制关键代码constlineLayer=newVectorLayer({source:newVectorSource(),});map.addLayer(lineLayer);letfeature=newFeature({//北京到上海的经纬度geometry:newLineString([[116.46,39.92],......
  • golang OpcUaClient
    实现功能packagemainimport("fmt""log""opcuaclient/util/plugin/client/opcclient""os""os/signal""syscall")funcmain(){OPCUATest()//监听操作系统信号,阻塞直到接收到信号......
  • SRCNN数据预处理
    #判断某个文件是否是图像#enswith判断是否以指定的.png,.jpg,.jpeg结尾的字符串#可以根据情况扩充图像类型,加入.bmp、.tif等defis_image_file(filename):returnany(filename.endswith(extension)forextensionin[".png",".jpg",".jpeg"])#读取图像转为YCbCr......
  • 忽略string 属性控制警告
    <ProjectSdk="Microsoft.NET.Sdk.Web"><PropertyGroup><TargetFramework>net8.0</TargetFramework><Nullable>disable</Nullable><ImplicitUsings>enable</ImplicitUsings></PropertyGr......
  • Excel---使用小技巧
    在日常工作中,经常会遇到需要使用Excel的时候,下面总结记录一下日常使用的小技巧:一、表格外,其余部分空白怎么做?原理:去掉【网格线】然后数据表格加边框即可。操作:1、去网格线:点【视图】去掉【网格线】2、加边框:点【开始】点【边框】二、常用的公式1、SUM()求和可以跨表求和:SU......
  • java中反射的基本使用
    一、参考文档:https://www.cnblogs.com/chanshuyi/p/head_first_of_reflection.htmlchatgpt问答 二、前言反射是java的一个特性,是java提供的一种机制。反射允许程序在运行时查询和操作类的信息。反射对很多高级功能(框架设计、动态代理等)都很有用。反射提供了很多......