监控服务并展示服务可用性百分比有时候是必要的。对于一些成熟的 PAAS 云平台或者大型公司,都有些类似UptimeRobot这样的服务来展示服务的可用性,对于非专业技术人员也能通过页面展示清楚的知道自己使用的服务是否稳定,下面是 UptimeRobot 的 uptime 页面,简洁直观看出哪些服务在什么时候出现问题:
虽然服务也可以使用 Prometheus 的 blackbox_exporter 和 Grafana 结合进行监控、展示以及计算服务可用 SLA,但是在监控的实现上以及展示还是有些复杂,相对于 UptimeRobot 无论从颜值还是功能上都让人难以拒绝。但它是收费,忒…
花钱固然爽,但是不花钱又能白嫖的话那就更爽了。在 long long ago 我们也介绍了一款与 UptimeRobot 比肩的开源的项目 Uptime Kuma,其功能与 UptimeRobot 不差上下,现在可以白嫖的有了,但是如何将现有的业务批量的迁移到 UptimeKuma 上呢?难道要手动逐个增加吗?
UptimeKuma 到目前位置并没有增加 API 的计划,大家可以关注此ISSUE,但是在 issue 中发现@MedAziz11实现了基于 API 管理监控项、用户、标签等。安装部署很简单,但是依旧存在很多问题,不过大神还在持续维护。
version: "3.9"
services:
kuma:
container_name: uptime-kuma
image: louislam/uptime-kuma:latest
ports:
- "3001:3001"
restart: always
volumes:
- uptime-kuma:/app/data
api:
container_name: backend
image: medaziz11/uptimekuma_restapi
volumes:
- ./db:/db:rwx
restart: always
environment:
- KUMA_SERVER=http://kuma:3001
- KUMA_USERNAME=test
- KUMA_PASSWORD=123test.
- ADMIN_PASSWORD=admin
depends_on:
- kuma
ports:
- "8000:8000"
volumes:
uptime-kuma:
提示:在部署好之后,打开 uptimekuma,先登录下,然后再通过 API 访问!!!
TOKEN=$(curl -X -L 'POST' -H 'Content-Type: application/x-www-form-urlencoded' --data 'username=admin&password=admin' http://127.0.0.1:8000/login/access-token/ | jq -r ".access_token")
curl -L -H 'Accept: application/json' -H "Authorization: Bearer ${TOKEN}" http://127.0.0.1:8000/monitors/
部署好之后,可使用上述命令测试是否正常。我是直接部署到 K8s 上:
NAME READY STATUS RESTARTS AGE
prod-uptimekuma-api-56cbcf6f5d-csrrr 1/1 Running 0 10d
prod-uptimekuma-b7f8d7984-mpdpf 1/1 Running 0 10d
整到这里,我们就还需要采集数据,然后通过 UptimeKumaAPI 喂进去,大概如下:
这里不得不说下,目前 uptimekuma 的数据存储使用的是 SQLite
社区让支持关系型数据库的声音很大,但至少目前尚未有实质性进展…关于这个问题可以跟进这些 issue
- https://github.com/louislam/uptime-kuma/pull/1139
- https://github.com/louislam/uptime-kuma/issues/953
继续我们的主题,我们还需要写点代码,主动的从网关、DNS 解析、日志平台处采集一些服务的数据(域名、IP、端口、Healthz 等),在聚合后发起 http 请求通过 API 写入到 UptimeKuma,除了主从采集的数据外,有时候手动在 UptimeKuma 增加的监控配置我们也需要同步到数据库中。这样不仅防止数据丢失,也方便服务迁移维护。
存储在 MySQL、consul 中的数据,也是可以直接通过自动发现的方式喂给 Prometheus,这样也就实现了自动化监控,无需手动热加载配置文件了。
当然这里核心应该就是写的那点代码了,这个以后找时间再说吧,大概就是几个方面:
- 解析网关的配置信息,例如
- 如果你使用的是原生的 Nginx 做网关,这里需要解析 Nginx 的配置文件落库
- 如果你使用的 Apisix,它有现成的 api 支持,解析出数据很简单
- 获取阿里云 DNS 解析记录,落库
- 标签维护管理,因为 uptimekuma 以及 prometheus 中都会用到
- 聚合采集到的数据
- 数据同步定时任务等
有时间再写写具体的实现逻辑,大概思路是这样,大家也可以一起交流。
本文主要介绍如何通过 UptimeKuma 监控服务,以及如何批量自动化采集并管理服务监控项来达到提高服务稳定性,大家在工作中这一部分是怎么做的?一起交流交流,多沟通,互相学习!
评论区