某日凌晨,由于线上突发微信玩家无法登陆,排查发现微信接口报错。

处理过程

  1. 立马群里通知研发,测试等,跟进情况
  2. 由于是大规模且只有微信登陆失败,通过测试反馈登陆视频,判断还未到和后端服务器连接,且其他登陆渠道可以登陆,排除后端服务故障可能,问题很可能在微信接口调用这一步

  3. 通知研发排查微信接口相关调用是否有异常,研发反馈api.weixin.qq.com接口超时,正常应该有返回。
  4. 在服务器上试了下curl api.weixin.qq.com,长时间无响应。确认是访问该地址异常。
  5. 2种可能,一种是服务器所在AWS地域到api.weixin.qq.com存在网络问题,一种是微信接口本身问题。
  6. 通知AWS排查是否存在相关网络原因,同时查看微信接口文档,发现默认api.weixin.qq.com接口节点所在是香港,还有两个接口sh.api.weixin.qq.com,sz.api.weixin.qq.com,测试其他两个接口可以访问,与此同时,AWS相关人员也反馈有其他公司遇到同类问题。
  7. 问题找到了,那么就只有切换接口地址,但是由于地址是写死在程序里,如果需要切换,需要重启相关程序,会影响业务,且国外正是白天,所以只有先批量本地解析。把 api.weixin.qq.com 本地解析到sh.api.weixin.qq.com 所在的ip,临时解决,快速恢复业务。

后续优化:

运维方向:

增加微信接口监控:

  • 自定义脚本

    #!/bin/bash#2020年5月7日16:40:38#author:Vaedit############################################微信api地址apiaddr1='api.weixin.qq.com'apiaddr2='sh.api.weixin.qq.com'apiaddr3='sz.api.weixin.qq.com'#钉钉接口地址webhookwebhook='https://oapi.dingtalk.com/robot/send?access_token=xxxx'#需要@的用户手机号phonelist=(xxx xxx)#处理手机号格式phones=''phone_lenth=${#phonelist[@]}phone_lenth_1=`expr $phone_lenth - 1`for ((i=0;i<$phone_lenth;i++));do  if [ "$i" -eq 0 ];then      phones="\"${phonelist[i]}\","  elif [ "$i" -eq "$phone_lenth_1" ];then      phones="${phones}\"${phonelist[i]}\""  else      phones="${phones}\"${phonelist[i]}\","  fidone# 发送钉钉消息sendding(){Message=${1}curl "$webhook" \ -H 'Content-Type: application/json' \ -d "{\"msgtype\": \"text\",   \"text\": {      \"content\": \"消息内容:$Message\"   },  \"at\": {      \"atMobiles\": [$phones], \"isAtAll\": false   }}"}for i in `seq 1 3`;do  eval "apiaddr=\$apiaddr${i}"  return_code=$(curl -I -m 3 -o /dev/null -s -w %{http_code} $apiaddr)  if [ "$return_code" -ne 301 ];then      echo ${apiaddr}不可达      sendding "${apiaddr}无法访问,注意查看"  fidone

    通过crontab创建定时任务,触发告警

  • zabbix自定义监控项

    #!/bin/bash#2020年5月7日16:40:38#author:Vaedit############################################微信api地址apiaddr1='api.weixin.qq.com'apiaddr2='sh.api.weixin.qq.com'apiaddr3='sz.api.weixin.qq.com'errcode=1for i in `seq 1 3`;do  eval "apiaddr=\$apiaddr${i}"  return_code=$(curl -I -m 3 -o /dev/null -s -w %{http_code} $apiaddr)  if [ "$return_code" -ne 301 ];then      errcode=0  fidoneecho $errcode
程序方向:

提出建议,改进程序,是否能优化接口冗余,一个接口地址不行时,切换调用另一个接口。

©著作权归作者所有:来自51CTO博客作者Vaedit的原创作品,如需转载,请与作者联系,否则将追究法律责任

更多相关文章

  1. 态路小课堂丨QSFP-DD封装模式光模块接口类型:LC/MPO12/MPO16/MPO2
  2. 深入理解Java的接口和抽象类
  3. 《吐血整理》-顶级程序员工具集
  4. VLAN间如何实现互连?干货奉上!!!
  5. 只需 2 步,定位集成融云时的崩溃与错误 - iOS 篇
  6. 退出进程 替换接口
  7. 换IP
  8. 阿里云_弹性公网IP地址(EIP)切换到新的ECS的方法
  9. 迪芝伦(Digilent)推出全新开发板PYNQ-Z1,支持python

随机推荐

  1. [Android][Android(安卓)Studio] *.jar
  2. android布局初步
  3. android:visibility||view.setVisibility
  4. Android面试题笔记(一)
  5. android selector的 使用
  6. Android Dev Tips (持续更新)
  7. 第一个Android工程
  8. 博客技术资料整理
  9. 【自学Android】使用DataBinding,ViewMod
  10. android答题系统(二):实现主界面入口和查询