这个开源监控神器,让我再也不用半夜被老板电话轰炸了!
周末用python flask框架通过“氛围编程”方式做了一个网站监控(项目地址:https://github.com/dearisyou/Websit_survival_monitoring/tree/master),有粉丝盆友指出Uptime Kuma更好用。今天去学习了下。果然还得多交流,这么好的项目不多点人知道太可惜了!!!再次感谢粉丝盆友分享!
什么是Uptime Kuma
Uptime Kuma项目地址:https://github.com/louislam/uptime-kuma
Uptime Kuma是一个开源的自托管监控工具,界面非常漂亮,功能也很全面。最重要的是,它真的很简单!不像那些传统的监控系统,需要写一堆配置文件,Uptime Kuma基本上点点鼠标就能搞定。
这个项目在GitHub上已经有7.3万多个star了,说明还是很受欢迎的。而且更新也很频繁,作者很活跃,基本上有问题提issue都会得到回复。
安装部署过程
安装Uptime Kuma有好几种方式,我比较推荐用Docker,因为真的很方便。
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
就这一条命令,然后等个几分钟下载镜像,基本就搞定了。当然,如果你的服务器在国内,可能下载会比较慢,建议先配置一下Docker的镜像加速。
[root@webtest ~]# docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Unable to find image 'louislam/uptime-kuma:1' locally
1: Pulling from louislam/uptime-kuma
b338562f40a7: Pull complete
874bf4d93720: Pull complete
b16337721583: Pull complete
7d955db85b85: Pull complete
2c706596bd17: Pull complete
88a5c59ed14f: Pull complete
5a1d0a896c33: Pull complete
e68c2f25b946: Pull complete
2e6c90f010d6: Pull complete
ff15b10fabb8: Pull complete
4f4fb700ef54: Pull complete
d2a400cc8adb: Pull complete
Digest: sha256:431fee3be822b04861cf0e35daf4beef6b7cb37391c5f26c3ad6e12ce280fe18
Status: Downloaded newer image for louislam/uptime-kuma:1
3cce7589efe3ec5b82b34737943163830583425f63268b2ef51b9a1434908348
[root@webtest ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3cce7589efe3 louislam/uptime-kuma:1 "/usr/bin/dumb-init …" 42 seconds ago Up 41 seconds (health: starting) 0.0.0.0:3001->3001/tcp, :::3001->3001/tcp uptime-kuma
[root@webtest ~]#
如果不想用Docker,也可以直接用npm安装:
npm install pm2 -g
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup
pm2 start server/server.js --name uptime-kuma
不过说实话,我还是推荐Docker方式,因为依赖管理会简单很多。
部署完成后,打开浏览器访问 http://你的服务器IP:3001 就能看到界面了。第一次访问会让你创建管理员账号,这个过程很简单,按提示操作就行。
界面和功能体验
十分钟demo体验地址:https://demo.kuma.pet/start-demo
打开Uptime Kuma的界面,第一感觉就是很清爽。不像某些监控系统,界面密密麻麻的,看着就头疼。
主界面就是一个监控项目的列表,每个项目会显示当前状态、响应时间、可用性等信息。绿色表示正常,红色表示异常,一目了然。
添加监控项目也很简单,点击右上角的"+"号,然后选择监控类型。支持的类型还挺多的:
- HTTP/HTTPS监控
- TCP端口监控
- DNS监控
- Docker容器监控
- 数据库监控(MySQL、PostgreSQL等)
- 还有一些特殊的监控类型
我主要用的是HTTP监控,因为我们的业务主要是Web服务。配置的时候只需要填入URL,设置检查间隔,就可以了。默认是60秒检查一次,我一般设置成30秒,这样能更快发现问题。
有个细节我觉得做得很好,就是可以设置关键词监控。比如我们的API接口,正常情况下会返回"success"这个词,如果返回的内容里没有这个词,就说明可能出问题了。这个功能在实际使用中很有用。
告警通知配置
监控系统最重要的就是告警了,Uptime Kuma支持的通知方式非常多,基本上你能想到的都有:
- 邮件通知
- 微信通知
- 钉钉通知
- Slack通知
- Telegram通知
- 还有各种Webhook
我配置了邮件和微信通知。邮件配置比较简单,填入SMTP服务器信息就行。微信通知需要用到企业微信的机器人,稍微复杂一点,但是按照官方文档操作也不难。
告警的频率也可以设置,比如可以设置连续失败多少次才发送告警,避免网络抖动导致的误报。我一般设置成连续失败3次才告警,这样比较合理。
数据统计和图表
Uptime Kuma的统计功能也很不错,可以看到各种维度的数据:
响应时间图表显示了最近一段时间的响应时间变化趋势,这个对于性能优化很有帮助。我发现我们的一个API接口在某个时间段响应时间特别长,后来排查发现是数据库查询的问题。
可用性统计显示了最近24小时、7天、30天的可用性百分比。我们现在基本能保持99.5%以上的可用性,虽然不算特别高,但是对于我们的业务来说够用了。
还有一个心跳图,类似GitHub的贡献图,绿色表示正常,红色表示异常。这个图看起来很直观,能快速了解服务的整体运行情况。
性能和资源占用
Uptime Kuma的性能表现还是不错的。我在一台2核2G的虚拟机上部署,CPU和内存都用的很少。
数据库用的是SQLite,对于中小规模的监控需求完全够用。如果监控项目特别多,也可以考虑切换到MySQL或PostgreSQL。
响应速度也很快,界面操作基本没有延迟。数据更新也很及时,基本上监控项目状态变化后,界面上立马就能看到。
不过有一点需要注意,如果监控项目很多,而且检查间隔设置得很短,可能会对被监控的服务造成一定压力。我之前就遇到过这个问题,把检查间隔设置成了10秒,结果被监控的服务器访问日志里全是监控请求。
与其他监控工具的对比
之前我也用过其他一些监控工具,简单对比一下:
和Nagios相比,Uptime Kuma的优势是简单易用,界面美观。Nagios功能更强大,但是配置复杂,学习成本高。对于小团队来说,Uptime Kuma更合适。
和Zabbix相比,Uptime Kuma更轻量级。Zabbix适合大规模的监控场景,但是对于我们这种几十个监控项目的需求,有点杀鸡用牛刀的感觉。
和一些商业监控服务相比,Uptime Kuma的优势是免费,而且数据完全掌握在自己手里。虽然功能可能没有商业服务那么丰富,但是基本需求都能满足。
一些实用的配置建议
用了这么久,我总结了一些配置上的经验:
监控间隔不要设置得太频繁。我之前为了能更快发现问题,把所有监控都设置成了15秒检查一次,结果发现服务器的网络带宽占用明显增加了。后来调整到60秒,发现效果差不多,但是资源消耗少了很多。
关键词监控真的很有用。我们有个接口正常情况下返回JSON格式的数据,但是有时候会返回HTML错误页面,虽然HTTP状态码还是200,但实际上已经出问题了。设置了关键词监控后,这种问题就能及时发现了。
证书监控也别忘了。现在HTTPS基本是标配,但是证书过期这种事情还是会发生的。Uptime Kuma可以自动检查证书的过期时间,提前提醒你续期。我们就遇到过一次证书快过期了但是忘记续期的情况,幸好有提醒。
数据备份和恢复
这个很重要但是容易被忽略。Uptime Kuma的数据都存储在SQLite数据库里,如果服务器出问题,数据就全没了。
我的做法是定期备份数据目录。如果用Docker部署,数据目录就是挂载的volume。我写了个简单的脚本,每天自动备份到另一台服务器上。
#!/bin/bash
DATE=$(date +%Y%m%d)
docker exec uptime-kuma sqlite3 /app/data/kuma.db ".backup /app/data/backup_$DATE.db"
scp /var/lib/docker/volumes/uptime-kuma/_data/backup_$DATE.db backup-server:/backup/uptime-kuma/
虽然看起来有点麻烦,但是真的很有必要。万一哪天服务器挂了,至少监控数据还在。
一些使用中的小技巧
状态页面功能我后来也启用了。虽然我们的用户不多,但是有个公开的状态页面还是显得比较专业。页面地址可以设置成类似 status.yourdomain.com 这样的子域名。
推送通知的测试功能很好用。配置完通知方式后,一定要测试一下,确保能正常接收到通知。我就遇到过配置看起来没问题,但是实际收不到通知的情况。
监控项目的标签功能也很实用。可以给不同的监控项目打上标签,比如"生产环境"、"测试环境"、"核心服务"等,这样筛选和管理都很方便。
如果监控的服务比较多,建议创建一个监控大屏。把Uptime Kuma的页面投影到办公室的大屏幕上,这样大家都能看到系统的运行状态。虽然有点装逼的嫌疑,但是确实很实用。
最后
Uptime Kuma它可能不是功能最强大的监控工具,但是对于中小团队来说,简单易用比功能强大更重要。
最重要的是,它让我们的服务可用性有了明显提升。以前经常是用户反馈了我们才知道出问题,现在基本上都能提前发现并处理。
而且作为开源项目,你不用担心厂商跑路或者突然涨价的问题。代码都在GitHub上,即使作者不维护了,社区也可以接手继续开发。
如果你还在为选择监控工具而纠结,真的可以试试Uptime Kuma。部署简单,上手容易,基本功能都有,而且完全免费。
对于个人项目或者小团队来说,它绝对是个不错的选择。即使是大公司,用它来监控一些非核心服务也完全没问题。
最后说一句,监控系统不是部署了就完事了,还需要持续的维护和优化。定期检查监控配置,清理无用的监控项目,优化告警规则,这些都很重要。
好的监控系统应该是让你安心的,而不是增加你的负担。Uptime Kuma在这方面做得还是很不错的。
如果这篇文章对你有帮助,别忘了点赞转发支持一下!想了解更多运维实战经验和技术干货,记得关注微信公众号@运维躬行录,领取学习大礼包!!!我会持续分享更多接地气的运维知识和踩坑经验。让我们一起在运维这条路上互相学习,共同进步!
公众号:运维躬行录
个人博客:躬行笔记