Loading... 这两天,家里这边下雨,所以早晨大概7:30才睁眼,然后溜了一眼手机,几百个报警。掏出笔记本,远程办公室中控机,一片红。我嘞个去,俺两只爪子都颤了。 连上平台一看,没有续费,大爷的。三天自动给停了,后来发现,财务这块预警之前留的是以前同事的。 赶紧摇人,没起床呢。赶紧通知领导以及重点客户。 骑了个电驴子去了公司。路上两个领导也打了电话,大概沟通了一下。财务也在紧急前往公司路上。 到了公司,先安排打款。但是过了几分钟没有到账,原来还是需要人工10:00到了工位确认。领导等不及,你5万,他10万的先用信用卡凑够了怼上了。 先关闭长连接上线分配服务。避免对后端服务器造成压力。 打开列表,开始逐步恢复,从mariadb、redis、rabbitmq、zookeeper、fastdfs、opentsdb、zookeeper等逐步恢复,也包括容器集群的3台master。中间遇到了有的数据库居然无法登录,有的把vip地址加到了堡垒机里面等错误。 然后恢复容器集群: marathon-lb:居然没有了容器镜像,幸好当时有镜像导入到一个节点的本地,使用docker save加载,然后拷贝到另外一台机器用同样的方式加载。然后重启marathon-lb。 discoveryserver:这个就比较操蛋了,容器镜像也可以下载,也显示启动,但是里面就是没有instance。卡了将近1个小时,最后临时把instance数量由1调整为2,先暂时用着。 其他服务:同样,还是通过调整instance数量加倍,暂时先跑起来。 打开长连接分配服务,开始上线。几十万的设备上线过程中,大概停了2次,把redis的exporter进程搞挂了。好在大概20分钟左右,全部服务重启完毕。 服务启动完成,物联网设备连接成功后,有些用户无法登录,等其他问题。发现,还是有些服务没有起来,但是容器集群dcos判定起来了。于是,还是将数量增加1倍先跑起来。 整个恢复过程大概从9:40到12:40,持续3个小时。 到15:40左右,有些服务大概是回过味儿来了,已经把没有的instance给回收掉了。 ![2024-07-04T07:47:53.png][1] 总结,本次由于运维的我没有尽到责任,包括 1. 云平台余额告警信息没有修改已离职人员的 2. 日常巡检没有巡检到等 # 后续 ## 增加电话告警 少不了内部批斗。然后一个研发大牛建议针对重点告警开通电话告警功能。 搜索了一圈,采用https://push.spug.cc的电话告警是可以的。 点击https://push.spug.cc/library/4,点击使用模版。 ![2024-07-08T07:36:56.png][2] 勾选短信和电话 ![2024-07-08T07:37:24.png][3] 分别调整短信和电话设置, ![2024-07-08T07:37:52.png][4] 添加三个手机号的电话和短信设置, ![2024-07-08T07:38:35.png][5] 保存后,复制链接 ![2024-07-08T07:39:01.png][6] 复制链接到夜莺的回调, ![2024-07-08T07:39:29.png][7] ## 调用uapi增加余额不足2000告警 ``` #!/bin/env python3 # -*- coding: utf-8 -*- """ Homepage: https://github.com/ucloud/ucloud-sdk-python3 Examples: https://github.com/ucloud/ucloud-sdk-python3/tree/master/examples Document: https://docs.ucloud.cn/opensdk-python/README Filename: /opt/categraf/conf/input.exec/ucloud_zcyun_jifei.py """ from ucloud.core import exc from ucloud.client import Client import json def main(): client = Client({ "public_key": "xxx", "private_key": "xxx", "base_url": "https://api.ucloud.cn" }) try: resp = client.ubill().get_balance({ }) except exc.UCloudException as e: print(e) else: #print(resp) return resp if __name__ == '__main__': data = main() # 解析JSON数据 account_info = data['AccountInfo'] # 定义固定的前缀和项目标签 prefix = "ucloud" project_label = 'project="zcyun"' # 遍历AccountInfo中的每个字段并输出 for key, value in account_info.items(): print(f"{prefix}{{ {project_label}, name=\"{key}\"}} {value}") ``` ``` #!/bin/bash #Filename: /opt/categraf/conf/input.exec/ucloud_zcyun_jifei.sh /opt/categraf/conf/input.exec/ucloud_zcyun_jifei.py 2>/dev/null ``` ![2024-07-11T08:52:36.png][8] [1]: https://www.sddts.cn/usr/uploads/2024/07/1026613706.png [2]: https://www.sddts.cn/usr/uploads/2024/07/2304987234.png [3]: https://www.sddts.cn/usr/uploads/2024/07/173001492.png [4]: https://www.sddts.cn/usr/uploads/2024/07/2797382518.png [5]: https://www.sddts.cn/usr/uploads/2024/07/1518980235.png [6]: https://www.sddts.cn/usr/uploads/2024/07/1544161779.png [7]: https://www.sddts.cn/usr/uploads/2024/07/1259870910.png [8]: https://www.sddts.cn/usr/uploads/2024/07/4150100694.png 最后修改:2024 年 07 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏