前言

上周六上午出了一个事故,核心业务接口挂了2个小时没人知道,直到看到数据后不对劲经排查才发现是接口挂了导致的。

然后赶紧启动服务,随后开始查询问题出在哪里,先是看 Nginx 日志发现很大,Nginx 被错误日志打到有45个G,直接 vim 压根打不开。

然后根据 split -b 1G nginx.error.log errLog_ 命令把错误日志按每个文件 1G 来分割成了45个文件,方便查看日志排查问题。
WX20240819-221139@2x.png

vim 最早的 errLog_aa 文件发现其中最早的报错是 upstream prematurely closed connection while reading response header from upstream

这个报错可能是由于数据量突增导致的,然后发现确实从周五开始请求量和数据量突增,加上是单台机器导致了服务被打挂。

解决

加机器

首先肯定是加机器来分摊压力,用 Nginx 部署负载均衡

接口状态监控

其次是要找一个可以监控接口状态的,如果说接口挂了可以发邮件被动知晓的,又不想很重的。

就找到了本次讲的 uptime-kuma

uptime-kuma 支持监控 https 接口的响应码,并可以配置在异常状态的情况下发邮件或飞书等等渠道通知到你。

安装

这里使用 docker-compose 来安装,文件内容如下

1
2
3
4
5
6
7
8
9
10
11
version: '3.3'

services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- ./uptime-kuma-data:/app/data
ports:
- "3001:3001" # <Host Port>:<Container Port>
restart: always

然后执行 docker-compose up -d 命令,正常的话容器就会启动起来。

功能很简单,点击添加监控项可以监控你想要的,这里就不赘述了。

通知

其实这个网站部署后基本也不会自己主动来看,我们需要被动的接收告警,

参考文章

Docker系列 Uptime Kuma监测网站连通性
使用 Uptime Kuma 监测网站可用性
从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对