TIDB-由飞书接收报警

一、背景

由于公司的办公软件由企业微信转到了飞书,所以报警也由企业微信转到飞书了,而altermanager的输出格式是飞书不接受的,飞书接受的消息格式可以从官网找到飞书链接
这时就有两种办法解决,第一种,自己写个服务,接收altermanager的消息,然后进行转换发给飞书,第二种是使用开源工具,如prometheusalert考虑到一些原因,最终选择了方案一

二、搭建

1.飞书操作

1.1 建群
点击下图所示加号建群,随意写个群组名
在这里插入图片描述
1.2创建机器人
点击群图标即可创建机器人,点击添加即可在这里插入图片描述
1.3 生成webook
记录webook地址,是之后要用到的
在这里插入图片描述

2.写服务来接收处理消息

2.1 python服务文本到飞书示例

import requests
import arrow
from flask import Flask
from flask import request
import json
app1 = Flask(__name__)
@app1.route('/send', methods=['POST'])
def send():
    url = 'https://open.larksuite.com/open-apis/bot/v2/hook/*****'   # lark的weboook
    dict1 = dict()
    data = json.loads(request.data)
    #print(data)
    alerts = data['alerts'] 
    for output in alerts:
        try:
            message = output['annotations']['message']
        except KeyError:
            try:
                message = output['annotations']['description']
            except KeyError:
                message = 'null'
        info = "**告警类型**: %s \n\n" % output['labels']['alertname'] + "**告警详情** : %s \n\n" % message + "**告警状态**: %s \n\n" % output['status'] + "**触发时间**: %s \n\n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ') + "**触发结束时间**: %s \n" % arrow.get(output['endsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ')
        # 转换为飞书接受的格式(文本)
        send_data = {
			    "msg_type": "text",
                            "content": {
			                            "text":  info
			           }
                    }
        send_data = json.dumps(send_data)
        print(send_data)
        req = requests.post(url, data=send_data)
        result = req.json()
        #调用api提交信息给短信平台api
        # r = requests.post(url_test_api,data=j)
    return 'ok'


if __name__ == '__main__':
    app1.run(debug=True,host='0.0.0.0',port=5100)

2.1 python服务富文本到飞书示例

import requests
import arrow
from flask import Flask
from flask import request
import json
app1 = Flask(__name__)
print(3)
@app1.route('/send', methods=['POST'])
def send():
    url = 'https://open.larksuite.com/open-apis/bot/v2/hook/****'  
    dict1 = dict()   #定义一个字典用来存放清理过后的数据,最后需要把这个数据推送给其他应用
    data = json.loads(request.data)
    #print(data)
    alerts = data['alerts']         
    for output in alerts:
        try:
            message = output['annotations']['message']
        except KeyError:
            try:
                message = output['annotations']['description']
            except KeyError:
                message = 'null'
        title = "警告: %s" %  output['labels']['alertname']
        warning_info =  " %s \n" % message.replace(',', '\n').replace(':', ':  ')
        warning_status = " status:  %s \n" % output['status']
        warning_start_time = " start_time:  %s \n" % arrow.get(output['startsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ')
        warning_end_time = " end_time:  %s \n" % arrow.get(output['endsAt']).to('Asia/Shanghai').format('YYYY-MM-DD HH:mm:ss ZZ')

        send_data = {
        "msg_type": "post",
        "content": {
                "post": {
                        "zh_cn": {
                                "title": title,
                                "content": [[{
                                                        "tag": "text",
                                                        "text": warning_info
                                                },
                                               {
                                                        "tag": "text",
                                                        "text": warning_status
                                                },
                                             {
                                                        "tag": "text",
                                                        "text": warning_start_time
                                                },
                                             {
                                                        "tag": "text",
                                                        "text": warning_end_time
                                                }

                                           ]]
                        }
                }
        }
}
        send_data = json.dumps(send_data)
        print(send_data)
        req = requests.post(url, data=send_data)
        result = req.json()
        #调用api提交信息给短信平台api
        # r = requests.post(url_test_api,data=j)
    return 'ok'


if __name__ == '__main__':
    app1.run(debug=True,host='0.0.0.0',port=5100)

写这个服务用来接受altermanager的消息并格式化后发给飞书,启动服务即可

3.altermanager的处理

3.1 编辑conf下的alertmanager.yml

route:
  # A default receiver
  receiver: "feishubook"

  # The labels by which incoming alerts are grouped together. For example,
  # multiple alerts coming in for cluster=A and alertname=LatencyHigh would
  # be batched into a single group.
  group_by: ['env','instance','alertname','type','group','job']

  # When a new group of alerts is created by an incoming alert, wait at
  # least 'group_wait' to send the initial notification.
  # This way ensures that you get multiple alerts for the same group that start
  # firing shortly after another are batched together on the first
  # notification.
  group_wait:      30s

  # When the first notification was sent, wait 'group_interval' to send a batch
  # of new alerts that started firing for that group.
  group_interval:  3m

  # If an alert has successfully been sent, wait 'repeat_interval' to
  # resend them.
  repeat_interval: 1h


receivers:
- name: 'feishubook'
  webhook_configs:
  - url: 'http://python程序的ip:5100/send'

3.2 重启alterrmanager服务

重启后飞书即可收到报警消息了

中科支付中台系统的架构设计通常围绕着高效集成多种支付渠道、保障支付安全、提供个性化支付服务等目标展开。该系统架构在设计时通常包括以下几个关键层级和技术组件: 1. **接入层**:负责与前端应用(如电商平台、移动应用等)进行交互,接收支付请求并返回支付结果。接入层需要支持多种协议(如HTTP、HTTPS、RESTful API等),并具备负载均衡、流量控制等功能,以确保高并发场景下的稳定性和响应能力。 2. **业务逻辑层**:这是支付中台的核心部分,负责处理支付流程中的核心业务逻辑,包括支付路由、支付方式选择、交易状态管理、订单处理等。为了实现灵活的支付方式集成,系统通常采用微服务架构[^2],将不同的支付渠道、风控策略、用户身份验证等功能模块化,便于扩展和维护。 3. **支付渠道集成层**:该层负责对接各类支付渠道,如支付宝、微信支付、银联、跨境支付接口等。为了统一支付流程并降低接入复杂度,系统通常会引入适配器模式,为每种支付方式封装统一的接口,屏蔽底层差异[^1]。 4. **安全与风控层**:支付中台必须具备强大的安全机制,包括数据加密、身份认证、防重放攻击、交易风险控制等。通常会集成风控引擎,结合规则引擎和机器学习模型,对交易行为进行实时监控和风险评估,防止欺诈交易和账户盗用。 5. **数据存储层**:该层负责存储交易记录、用户信息、支付配置、日志等数据。为了支持高并发写入和查询,通常采用分布式数据库、缓存(如Redis)、消息队列(如Kafka)等技术组合,确保数据的高可用性和一致性。 6. **运维与监控层**:包括日志管理、性能监控、报警系统、服务治理等功能。通过Prometheus、Grafana、ELK等工具实现系统的可观测性,确保支付中台在大规模部署下的稳定运行。 在技术选型方面,中科支付中台可能采用以下技术栈: - **后端开发框架**:Spring Boot、Node.js 等高并发框架 - **服务治理**:Dubbo、Spring Cloud、Kubernetes 等微服务治理方案 - **数据库**:MySQL、PostgreSQL、MongoDB、TiDB- **缓存与消息队列**:Redis、Kafka、RabbitMQ 等 - **安全机制**:OAuth2、JWT、SSL/TLS、AES 加密等 此外,系统设计还强调模块化、可插拔性,以便快速接入新的支付方式和风控策略,满足不同行业和场景的支付需求[^1]。 ### 示例代码:支付路由逻辑(Node.js + Express) ```javascript const express = require('express'); const app = express(); // 模拟支付路由逻辑 app.post('/pay', (req, res) => { const { paymentMethod, amount } = req.body; // 根据支付方式选择对应的支付渠道 let gateway; switch (paymentMethod) { case 'alipay': gateway = 'Alipay Gateway'; break; case 'wechat': gateway = 'WeChat Pay Gateway'; break; case 'unionpay': gateway = 'UnionPay Gateway'; break; default: return res.status(400).json({ error: 'Unsupported payment method' }); } // 模拟调用支付渠道 setTimeout(() => { res.json({ status: 'success', gateway, amount, transactionId: Math.random().toString(36).substr(2, 9) }); }, 200); }); app.listen(3000, () => { console.log('Payment service is running on port 3000'); }); ``` ###
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值