网上找到的服务器监控工具都非常重量级,我只要一个工具能实现以下操作。
假设有如下场景,我有服务器 H 和服务器 S,在服务器 H 上跑了一个 HTTP 服务,在服务器 S 上跑了一个 scrapy 爬虫。 服务器 H 和服务器 S 各有一个脚本(例如 curl )用于检测服务是否正常工作。监控工具每隔一段时间(如 2 分钟)会执行一次脚本。每次检测完,如果正常工作则向另一服务器报平安,如果超出一定时间都没收到另一服务器报的平安,说明对方挂了,马上执行另一个脚本(如发邮件警报)
两台服务器同时挂的情况,可能就收不到任何通知,但我有 5、6 台的时候,同时挂的可能性就很少了吧。
或者有没有平台是专门做这种事情的?让服务器定时报平安,平台发现服务器超时了还不报平安,就要向我发邮件之类的。这样就是只有一台服务器也可以做到。
1
privil 2017-12-27 16:53:17 +08:00
写脚本可以搞定这种需求,你逻辑想多了,并不需要互相保平安,自检测以及检测其他服务器状态就好了,检测不过就发邮件
|
3
param OP 最好是,不止能在服务器用。我在家用 Android 设备和路由器上也跑了很多东西。
|
6
twisted1995 2017-12-27 16:57:55 +08:00
我之前看到过有一款咕咕监控的,你可以去了解一下
|
7
i730 2017-12-27 16:58:26 +08:00 via Android
ifttt 应该可破
|
8
param OP 还有就是,这些服务器(或者其它设备)可能并没有外网地址。所以可能还要用去中心话的方案来自动发现。新增一项监控的时候不需要每台机都改一遍。
|
9
param OP 如果有可信的第三方平台,就不需要去中心化。以平台为中心就好了。
|
10
privil 2017-12-27 17:07:31 +08:00
@param #5 那就只做自我检测,报平安,把检测信息带时间戳通过 ssh 方式传递到中心。搞一台阿里云当中心,中心每分钟检测传递过来的信息,没就报警
|
11
param OP @twisted1995 貌似只能监控网站?刚发现一个 uptimerobot.com 但似乎也只能监控网站。
@i730 ifttt 上都没找到现成的方案,真要用的话估计还得自己写点代码提交到 ifttt。。。 @privil 你的中心化方案感觉不怎么稳。这样还不如用两台来当中心,然后两台互相监控。。。把流程复杂化了就没那么稳了,自己写的代码稍有偏差可能就让监控失效了,这才是我希望找现成工具的原因。真要自己实现也不是很难,但 bug 就避免不了。 如果没有现成工具非要自己做的话,我想到的是 pushbullet。。。感觉稳多了 |
13
privil 2017-12-27 17:46:04 +08:00
看了眼,放 devops 节点了,这是多正经……
|
14
podel 2017-12-27 17:50:27 +08:00
有一个 SEC (Simple Event Correlator) perl 写的小程序或许可以满足你的需求。要搜全称。(官方的文档写得很详细,但是大部分是英文的,基本上没什么中文资料)
|
15
kimoCHG 2017-12-27 18:02:05 +08:00
|
19
lulinux 2017-12-27 18:31:50 +08:00 via Android
shell 脚本+cron
|
20
v2xe2v 2017-12-27 18:37:42 +08:00
netdata
|
21
zjb861107 2017-12-27 19:34:46 +08:00
类似的产品应该有很多吧,比如
腾讯云-云拨测 使用限制 腾讯云的注册用户,均可以免费使用云拨测。其免费用户,可使用的功能如下: 1) 14 个拨测点可供选择,覆盖一线城市 2) 最多可配置 10 个拨测任务 3) 每个任务最多可配置 5 个拨测点 4) 每个拨测任务最高拨测频率为 5 分钟一次 5) 支持所有的基础拨测功能 6) 支持免费短信告警 |
23
Terenc3 2017-12-27 19:40:35 +08:00
zabbix,不过需要写个脚本让 agent 调用,或用 SNMP。
|
24
param OP |
25
Technetiumer 2017-12-27 19:48:35 +08:00 via Android
|
26
Technetiumer 2017-12-27 19:49:34 +08:00 via Android
|
27
rrfeng 2017-12-27 19:53:30 +08:00
看起来感觉楼主是要用几台服务器互相检测存活吧
显然终极方案是搞一个类似于 raft 或者 paxos 的集群……发现掉线就报警( |
28
nicevar 2017-12-27 20:00:16 +08:00
我自己做了个简陋的安卓客户端解决这个问题,当时还准备改良一下放 play 上去的,哈哈,看来这个需求还是有的
|
29
param OP @Technetiumer 这个东西貌似。。还是只能发 http 请求检测网站。
|
30
Technetiumer 2017-12-27 20:12:08 +08:00 via Android
@param 可以 HTTPS 和 TCP
|
31
Technetiumer 2017-12-27 20:12:44 +08:00 via Android
@param 還可以檢查 HTTP 的內容有沒有某個字符串,沒有就是報警
|
32
Terenc3 2017-12-27 20:25:50 +08:00
好吧,其实我也有十几台虚拟机在跑服务,需求和你差不多,告警会同时通过邮件、短信和微信发送。
监控着电流、电压、湿度、露点、nginx、apache、mariadb、爬虫、ELK 集群、各种小米智能硬件的参数... zabbix 是强大,不过确实比较麻烦。 |
33
param OP @Technetiumer 那就必须要在我的设备上跑一个 http server,然后再搞个外网地址。。
|
34
xingwing 2017-12-27 20:56:33 +08:00 via iPhone
小米的 open-falcon
|
35
dasenlin 2017-12-27 21:10:16 +08:00
http://www.phpservermonitor.org/ php 的,布置相当简单,可检测 80 443 等自定义端口,也可以 ping 检测,显示 ping 值,邮件报警
|
38
param OP |
39
tianshiyeben 2017-12-28 07:01:56 +08:00 via Android
以前写的服务器监控工具,现在改成单机部署了,不知道是你要的嘛,http://www.wg900.com
|
40
v2gg 2017-12-28 08:31:55 +08:00 via Android
ServerStatus GitHub 上有 可以去看看
|
41
planetx 2017-12-28 09:35:16 +08:00
Zabbix 666
|
42
alen 2017-12-28 11:28:22 +08:00
zabbix+shell/python , nagios
|
43
xlrtx 2017-12-28 15:29:07 +08:00
每个服务器上部署一个 /health 接口, 每隔一段时间, 所有的机器互相检查对方, 出现超时或返回错误则钉钉机器人报警.
|
44
Admstor 2017-12-28 15:30:13 +08:00
我觉得楼主思路就不对
相互监控会存在逻辑冲突,你两个设备相互监控逻辑冲突还算能解决,设备多了之后就没法解决,你自己考虑是不是这样? 这也就为什么目前所有比较成熟成规模的监控系统设计都是中心化,高可用也是尽可能保证监控高可用,好在监控系统一般并不会特别庞大,并发上面也远远小于业务系统,所以做到高可用算是很简单了.在你的例子中,我觉得实际上仅需要一台设备作为监控即可,监控本身可以定时给你发邮件表示自己存活,或者你干脆引入第三方免费监控对自己的监控存活检测即可,目前几个比较成熟的第三方检测,基本都能保证 99.99SLA,我认为无论对个人还是中小企业这都足够 然后监控项目方面,http 略过不提 其他设备方面你基本上总是需要一个特定的端口来做响应吧,那么对这个端口进行适当的监控就可以了,这点上现在主流的监控软件都能做到,cacti nagios zabbix 都可以,win 上还有个商用软件 Advanced Host Monitor https://www.ks-soft.net/hostmon.eng/也基本可以做到 至于你需要更细致的监控,那么就跟你的业务有关了 例如你是跑 nginx 还是 apache,在 snmp 里都有对应 OID 来进行性能监控分析,你自己写的程序那自然你自己才清楚需要那些监控,甚至 http 方面也可以监控 post 之后返回什么才是正确的进行对比 这就几乎进一步到了企业业务领域了 |
45
param OP |
46
VicYu 2017-12-28 16:03:15 +08:00
如果只是想做 up 检测,中心化是抹不开的,找一个能长时间在线的,做 health check 吧,这样简单点
|
47
param OP @VicYu 如果非要中心化的话,我也会分别拿两台机(或两台以上,反正多多益善)作中心。然后两台机(或以上)也互为中心。。
其实本帖已经没什么需要讨论了,标题“有没有这样的服务器监控 /警报工具?”,结论是“没有”。我还是需要亲手实现一下,实现方案我也有了。 pushbullet 方案,再加上多机中心方案,确保万无一失了吧。。。 类似有一个 QQ 群,每个人都有一个客户端,每个人都可以自由加入 /退出,每个人都可以看到哪些人在线,哪些人离线。 |
48
Admstor 2017-12-28 20:22:08 +08:00
自己要求复杂还怪别人方案复杂...
自己写代码去吧 |