Python监控Nacos状态,异常信息发送到企业微信群

随着微服务架构的普及,服务注册与发现成为了微服务架构中不可或缺的一环。Nacos作为阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,被广泛应用于各大企业中。然而,一旦Nacos出现异常或故障,可能会导致整个微服务架构的瘫痪。因此,对Nacos的状态进行实时监控并设置告警机制显得尤为重要。

本文将介绍如何使用Python编写一个监控Nacos状态的脚本,并在检测到异常时,将告警信息发送到企业微信群中。

一、解决方案

1、监控Nacos状态

使用Python编写脚本,定期(如每分钟)访问Nacos的健康检查接口,获取Nacos服务的健康状态。如果状态异常(如服务不可用、响应时间过长等),则触发告警逻辑。

2、告警逻辑

当Nacos状态异常时,通过企业微信API将告警信息发送至指定的企业微信群。告警信息应包括Nacos服务的状态、异常时间、异常详情等关键信息。

二、实施步骤

1、准备环境

1)、安装Python环境(推荐Python 3.x版本)

2)、安装必要的Python库,requests(用于发起HTTP请求)、apscheduler(用于定时任务).

pip3 install apscheduler
pip3 install requests
2、配置企业微信

创建一个用于接收告警信息的企业微信群,把现有关注告警信息的同事拉到群里面。

48ad0777a18e46c7954ffa493c79064a.png

在企业微信群组天添加一个群机器人,并获机器人的Webhook地址。

3、编写Python脚本

1)、创建一个Python脚本文件(如nacos_monitor.py

2)、在脚本中编写逻辑,定期访问Nacos健康检查接口,并解析返回结果

3)、如果Nacos状态异常,则将告警信息发送至企业微信群,附上官方的企业微信开发者文档地址:

企业微信开发者中心,群机器人配置说明

直接上脚本,需要根据自己的实际情况调整:

#!/usr/bin/python
# -*- coding=utf-8
import json
import time
import datetime
import requests
import os
from apscheduler.schedulers.blocking import BlockingScheduler


class monitorInstance(object):
    def __init__(self):
        # 需要监控的nacos连接信息,地址、账号、密码
        self.nacos_url = 'http://192.168.1.1:8848'
        self.username = 'nacos'
        self.password = 'nacos'
        # 企业微信群组机器人webhook地址
        self.webhook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your-webhook-key'
        print('Nacos ', datetime.datetime.now())
        self.GiveAnAlarm()

    def service_list_params(self, serviceName):
        service_list_params = {
            "namespaceId": "",
            "username": self.username,
            "password": self.password,
            "serviceName": serviceName
        }
        return service_list_params

    def getServiceStatus(self):
        # 请求服务列表
        service_list_url = self.nacos_url + "/nacos/v2/ns/service/list"
        service_list_params = self.service_list_params('')
        try:
            response = requests.get(service_list_url, params=service_list_params, timeout=5)
            print(response.text)
            if response.status_code == 200:
                if response.json().get("message") == 'success':
                    return '200'
            elif response.status_code == 404:
                return '404'
        except requests.exceptions.ReadTimeout:
            return 'ReadTimeout'

    def alarm(self, msg):
        if msg:
            # 告警的信息体,可以根据自己的需要调整
            MessageTitle = '重要告警信息\n>'
            Messagedetails = ''
            headers = {'Content-Type': 'application/json'}
            message = '<font color=\"warning\"> %s</font>\n >%s \n' % (msg[0], msg[1])
            Messagedetails = Messagedetails + message + str(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
            data = {
                'msgtype': 'markdown',
                'markdown': {
                    'content': MessageTitle + Messagedetails
                }
            }
            webhook = self.webhook
            requests.post(url=webhook, data=json.dumps(data), headers=headers)
        else:
            pass

    def GiveAnAlarm(self):
        service_status = self.getServiceStatus()
        if service_status == '200':
            pass
        elif service_status == '404':
            print('请求url错误,请检查配置.')
        elif service_status == 'ReadTimeout':
            msg = ['Nacos服务异常,请火速处理!', self.nacos_url]
            self.alarm(msg)


if __name__ == '__main__':
    scheduler = BlockingScheduler()
    # 监控频率,可以根据实际情况调整
    scheduler.add_job(monitorInstance, 'cron', hour='6-21', minute='*/1')
    print('Press--- Ctrl+{0} to exit'.format('Break' if os.name == 'nt' else 'C'))
    try:
        scheduler.start()
    except KeyboardInterrupt as SystemExit:
        print(SystemExit)
        scheduler.shutdown()

4、运行脚本

将脚本部署到服务器上,并设置为定时任务(如使用Linux的cron),也可以直接用下面的命令:

nohup python -u nacos_monitor.py > nacos_monitor.log &

确保服务器能够访问Nacos服务及企业微信API,也就是说他们的网络是通的。

可以用Telnet、ping等命令进行测试。

5df0e358ef1f40fdbd4b0f98a5242b1a.png

三、其他一些注意事项

1、安全性

保护好企业微信应用的Webhook地址,不要泄露。

使用HTTPS协议访问Nacos服务及企业微信API,因为脚本中记录的明文的Nacos的账号密码,需要保证脚本的安全性。房子Nacos的账号密码泄露。

2、稳定性

监控脚本应具备良好的异常处理能力,避免因网络波动、Nacos服务异常等原因导致脚本崩溃,而导致监控失效。

定期对脚本进行维护和更新,以适应Nacos服务及企业微信API的变更。

3、告警信息

告警信息应简洁明了,突出关键信息,方便管理员快速定位问题.

可根据实际需求设置告警级别(如严重、警告等),以便管理员根据告警级别采取相应的处理措施

四、不重要的总结

通过上述Python脚本,我们可以实现对Nacos状态的实时监控,并在发生异常时通过企业微信群进行告警。

这大大提高了系统的可靠性和运维效率。

当然,实际的监控和告警系统可能还需要考虑更多的因素,如告警阈值的设置、告警信息的丰富度、告警接收人的配置等。

希望本文能为你提供一个良好的起点,帮助你构建更加完善的监控和告警系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tw.Src

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值