这两天,家里这边下雨,所以早晨大概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. 云平台余额告警信息没有修改已离职人员的
  2. 日常巡检没有巡检到等

后续

增加电话告警

少不了内部批斗。然后一个研发大牛建议针对重点告警开通电话告警功能。

搜索了一圈,采用https://push.spug.cc的电话告警是可以的。
点击https://push.spug.cc/library/4,点击使用模版。
2024-07-08T07:36:56.png

勾选短信和电话
2024-07-08T07:37:24.png

分别调整短信和电话设置,
2024-07-08T07:37:52.png

添加三个手机号的电话和短信设置,
2024-07-08T07:38:35.png

保存后,复制链接
2024-07-08T07:39:01.png

复制链接到夜莺的回调,
2024-07-08T07:39:29.png

调用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

最后修改:2024 年 07 月 11 日
如果觉得我的文章对你有用,请随意赞赏