分享 / 技术 · 2020年11月21日 10   0

UptimeRobot服务器在线率监控以及消息推送

UptimeRobot

临近黑五,梳理了一下手上的服务器,发现(吃灰的)服务器是越来越多了,有时候机器出问题离线了也不知道,前段时间看别人分享了一个监控服务器在线率的页面,凭着记忆找到了uptimerobot这个网站,发现他们可以提供免费的服务器在线状况监控,页面简洁美观,当检测到离线时还能向指定邮箱发送警告邮件。 示例可以查看我的status page

uptimerobot主要还是用于监控服务器的在线率情况,如果需要更详细的网络状态监控可以考虑使用smokeping

配置uptimerobot

前往uptimerobot的网站,注册账号,可以选择订阅计划,他们提供了下面三种订阅计划:

订阅计划

免费版只支持50个服务器的监控,pro版可以加钱增加监控的服务器数量,不过pro版支持更短的检测周期更多的通知方式以及历史检测可以保留两年(免费版只能保留两个月,加上当前这个月应该是可以看到过去三个月的信息?)。

这个订阅价格还是比较贵的,我们服务器也没那么多所以免费版就可以了。

注册登录并选择了订阅计划之后便可以前往仪表盘(dashboard)添加服务器,监控类型一般使用ping就可以了,但是考虑到某些服务器没有放行icmp,所以我们也可以使用port方式来监控端口是否开放,还有一些其他的监控方式如http等,可以自己尝试。

添加监控的服务器

添加服务器的时候我们还可以选择警告联系方式,默认只有邮件通知,不过我们可以去设置中加入更多的警告方式。(如果服务器较多,还需要推送到邮件以外的其他地方的同学建议先阅读后面的章节,避免之后又要重复勾选一遍)。

添加完服务器之后,UptimeRobot已经开始检测服务器的在线状况了,不过想要更加直观的查看在线率我们还需要去创建一个Status pages。如果希望自己的状态页向所有人开放,这里不要输入密码。

status

首先点击 Add Status Pages 创建一个状态页再在右边点击 Add all monitors 将所有的监控都添加到状态页即可。我们还可以自定义页面的url,或者直接使用自己的域名,在设置中填上 Custom Domain 并把自己的域名通过CNAME解析到 stats.uptimerobot.com 即可。 可以查看我的监控页 https://uptime.aoyouer.com/

status

消息推送到Telegram私聊

虽然免费版不能快速通过短信通知,但是我们可以借助方便的im工具来告知我们服务器离线/上线信息。

前往 My Settings -> Alert Contacts -> Add Alert Contact 添加联系信息,这里有很多选择,我们以Telegram为例:

添加监控

添加后,我们需要通过Telegram打开下面显示的链接去开始订阅机器人

这个链接包含了参数,以deep linking的形式向UptimeRobot传递了信息,告知了机器人这个Telegram账户想要关联的监控。

之后我们可以测试一下,添加一个ping不通的服务器,过一会之后Telegram成功收到了服务器离线的通知。

离线通知

消息推送到Telegram群聊/频道

这里我用到了IFTTT的服务,根据百科介绍:

IFTTT,是一个新生的网络服务平台,通过其他不同平台的条件来决定是否执行下一条命令。即对网络服务通过其他网络服务作出反应。IFTTT得名为其口号“if this then that”。

相当于通过使用Webhook,UptimeRobot可以通知IFTTT,而IFTTT的Telegram bot则会把相关信息发送到连接到的群组中。

在Telegram中搜索@IFTTT,并使用命令 /connect_group 关联群组。

关联群组

点击Telegram Applets,会跳转到IFTTT的页面,我们需要注册一个IFTTT的账号,然后点击链接关联IFTTT账号与这个群组。

成功连接

关联成功之后我们便可以创建一个应用程序了,点击Create Applet,创建一个webhook。

webhook

创建一个触发器

IF事件添加好了接着添加THEN需要执行的事件:

选择Telegram

选择Send message

send

注意将 Message text改成,或者你喜欢的样式,括号里面的键开头需要大写。

监控提示: {{Value1}}: {{Value2}}. {{Value3}}.
{{EventName}} on {{OccurredAt}}

可以看到,这里可以看到我们之前关联的群组或者频道,这里我们还可以设置信息的格式,还可以包含网页预览,功能还是相当强大的。

IFTTT还可以接着执行更多的操作,不过这里就只以Telegram为例了。

在IFTTT的Webhook信息页面可以得到控制的key https://maker.ifttt.com/use/key 把这个记下来。之后使用 https://maker.ifttt.com/trigger/{event}/with/key/{secret_key} 的链接发送POST请求 event就是我们前面设置的Event Name (uptimerobot),尝试请求一下,可以正常触发即可。

请求成功了

接着我们需要去UptimeRobot的设置页面添加联系方式配置Webhook。

注意POST的内容要以JSON来书写,可以使用 monitorID这样的形式来传递监控的信息,键值对的键名要和send message里面的键对应。

注意URL to Notify 后面要加一个?,添加成功之后我们再添加一个监控测试测试,添加一个无法ping同的服务器,等待几分钟。

成功发送通知

参考

https://medium.com/@jgngo/get-uptime-alerts-in-telegram-b8ff6d542eae