有没有这样的服务器监控/警报工具? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
param
V2EX    DevOps

有没有这样的服务器监控/警报工具?

  •  
  •   param 2017-12-27 16:46:37 +08:00 via Android 10934 次点击
    这是一个创建于 2848 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网上找到的服务器监控工具都非常重量级,我只要一个工具能实现以下操作。

    假设有如下场景,我有服务器 H 和服务器 S,在服务器 H 上跑了一个 HTTP 服务,在服务器 S 上跑了一个 scrapy 爬虫。 服务器 H 和服务器 S 各有一个脚本(例如 curl )用于检测服务是否正常工作。监控工具每隔一段时间(如 2 分钟)会执行一次脚本。每次检测完,如果正常工作则向另一服务器报平安,如果超出一定时间都没收到另一服务器报的平安,说明对方挂了,马上执行另一个脚本(如发邮件警报)

    两台服务器同时挂的情况,可能就收不到任何通知,但我有 5、6 台的时候,同时挂的可能性就很少了吧。

    或者有没有平台是专门做这种事情的?让服务器定时报平安,平台发现服务器超时了还不报平安,就要向我发邮件之类的。这样就是只有一台服务器也可以做到。

    第 1 条附言    2017-12-27 20:06:36 +08:00
    其实我不但服务器跑的东西需要检测,我家里路由器还有一些 Android 设备跑的东西也想检测。。
    第 2 条附言    2017-12-28 16:05:20 +08:00
    怎么那么多人说 Zabbix,Zabbix 不“重量级”?
    为了定时发个消息我还要跑个 web server ?还要搞个外网 IP 地址?甚至还要装个数据库?
    我性能最弱的设备是路由器,内存总共 60M。

    我能想到的可行方案是 Python 调用 pushbullet 互发消息,发现有异常的话就给我发通知消息,非要发邮件 /短信之类的话 ifttt 也能做到。在手机 /路由器 /电视盒 /开发板上跑个 Python 也不难。
    我本来以为会有好方案才来问的,然后想着想着用 pushbullet 自己写的话也不难,当然如果已经有好方案的话,还是用别人的好一点。自己写的话,可能代码稍有差错就通知失效。
    48 条回复    2017-12-28 20:22:08 +08:00
    privil
        1
    privil  
       2017-12-27 16:53:17 +08:00
    写脚本可以搞定这种需求,你逻辑想多了,并不需要互相保平安,自检测以及检测其他服务器状态就好了,检测不过就发邮件
    param
        2
    param  
    OP
       2017-12-27 16:54:37 +08:00 via Android
    @privil 网断了话怎么发邮件?电源断了怎么发邮件?
    param
        3
    param  
    OP
       2017-12-27 16:55:38 +08:00 via Android
    最好是,不止能在服务器用。我在家用 Android 设备和路由器上也跑了很多东西。
    privil
        4
    privil  
       2017-12-27 16:56:09 +08:00
    @param #2 按照你的想法每个服务器都定时跑这个脚本,除非全部挂了,不然你始终会收到至少一封邮件
    param
        5
    param  
    OP
       2017-12-27 16:57:45 +08:00 via Android
    @privil 所以需要报平安的机制啊。。。不然怎么知道其它服务器有没有挂。
    twisted1995
        6
    twisted1995  
       2017-12-27 16:57:55 +08:00
    我之前看到过有一款咕咕监控的,你可以去了解一下
    i730
        7
    i730  
       2017-12-27 16:58:26 +08:00 via Android
    ifttt 应该可破
    param
        8
    param  
    OP
       2017-12-27 17:00:11 +08:00 via Android
    还有就是,这些服务器(或者其它设备)可能并没有外网地址。所以可能还要用去中心话的方案来自动发现。新增一项监控的时候不需要每台机都改一遍。
    param
        9
    param  
    OP
       2017-12-27 17:01:29 +08:00 via Android
    如果有可信的第三方平台,就不需要去中心化。以平台为中心就好了。
    privil
        10
    privil  
       2017-12-27 17:07:31 +08:00
    @param #5 那就只做自我检测,报平安,把检测信息带时间戳通过 ssh 方式传递到中心。搞一台阿里云当中心,中心每分钟检测传递过来的信息,没就报警
    param
        11
    param  
    OP
       2017-12-27 17:42:01 +08:00 via Android   1
    @twisted1995 貌似只能监控网站?刚发现一个 uptimerobot.com 但似乎也只能监控网站。

    @i730 ifttt 上都没找到现成的方案,真要用的话估计还得自己写点代码提交到 ifttt。。。

    @privil 你的中心化方案感觉不怎么稳。这样还不如用两台来当中心,然后两台互相监控。。。把流程复杂化了就没那么稳了,自己写的代码稍有偏差可能就让监控失效了,这才是我希望找现成工具的原因。真要自己实现也不是很难,但 bug 就避免不了。

    如果没有现成工具非要自己做的话,我想到的是 pushbullet。。。感觉稳多了
    privil
        12
    privil  
       2017-12-27 17:44:55 +08:00
    @param #11 花多少时间多少精力,看你自己需求要到什么状况,你要搞两地三备份,异地多活,你有钱也行啊
    privil
        13
    privil  
       2017-12-27 17:46:04 +08:00
    看了眼,放 devops 节点了,这是多正经……
    podel
        14
    podel  
       2017-12-27 17:50:27 +08:00
    有一个 SEC (Simple Event Correlator) perl 写的小程序或许可以满足你的需求。要搜全称。(官方的文档写得很详细,但是大部分是英文的,基本上没什么中文资料)
    kimoCHG
        15
    kimoCHG  
       2017-12-27 18:02:05 +08:00
    Zabbix 企业级开源网络监控工具

    https://www.zabbix.com/
    param
        16
    param  
    OP
       2017-12-27 18:22:42 +08:00
    @kimoCHG 这个东西看起来相当复杂啊。。。
    param
        17
    param  
    OP
       2017-12-27 18:23:24 +08:00
    @privil 我是被移到 DevOps 的。。。我本来是放“问与答”的
    @Livid
    Livid
        18
    Livid  
    MOD
    PRO
       2017-12-27 18:31:38 +08:00
    @privil
    @param

    对主题进行节点方面的整理是我们的日常工作。
    lulinux
        19
    lulinux  
       2017-12-27 18:31:50 +08:00 via Android
    shell 脚本+cron
    v2xe2v
        20
    v2xe2v  
       2017-12-27 18:37:42 +08:00
    netdata
    edsion996
        21
    edsion996  
       2017-12-27 19:34:46 +08:00
    类似的产品应该有很多吧,比如
    腾讯云-云拨测

    使用限制
    腾讯云的注册用户,均可以免费使用云拨测。其免费用户,可使用的功能如下:

    1) 14 个拨测点可供选择,覆盖一线城市
    2) 最多可配置 10 个拨测任务
    3) 每个任务最多可配置 5 个拨测点
    4) 每个拨测任务最高拨测频率为 5 分钟一次
    5) 支持所有的基础拨测功能
    6) 支持免费短信告警
    param
        22
    param  
    OP
       2017-12-27 19:37:35 +08:00
    @zjb861107 看了一下,只支持 http、tcp 和 ping,也就是说必须要有外网地址
    Terenc3
        23
    Terenc3  
       2017-12-27 19:40:35 +08:00
    zabbix,不过需要写个脚本让 agent 调用,或用 SNMP。
    param
        24
    param  
    OP
       2017-12-27 19:48:08 +08:00
    @Terenc3
    @kimoCHG
    太重太复杂了,我说了,我只要上面提到的效果。

    pushbullet 或许是一个不错的方案。
    Technetiumer
        25
    Technetiumer  
       2017-12-27 19:48:35 +08:00 via Android
    uptime.io

    你的平安提供一 API,然後用 uptime 查 API 有有“平安”的字符串

    可以根是不是 200 判

    有一定免的用量
    Technetiumer
        26
    Technetiumer  
       2017-12-27 19:49:34 +08:00 via Android
    rrfeng
        27
    rrfeng  
       2017-12-27 19:53:30 +08:00
    看起来感觉楼主是要用几台服务器互相检测存活吧

    显然终极方案是搞一个类似于 raft 或者 paxos 的集群……发现掉线就报警(
    nicevar
        28
    nicevar  
    &bsp;  2017-12-27 20:00:16 +08:00
    我自己做了个简陋的安卓客户端解决这个问题,当时还准备改良一下放 play 上去的,哈哈,看来这个需求还是有的
    param
        29
    param  
    OP
       2017-12-27 20:08:27 +08:00
    @Technetiumer 这个东西貌似。。还是只能发 http 请求检测网站。
    Technetiumer
        30
    Technetiumer  
       2017-12-27 20:12:08 +08:00 via Android
    @param 可以 HTTPS 和 TCP
    Technetiumer
        31
    Technetiumer  
       2017-12-27 20:12:44 +08:00 via Android
    @param 可以查 HTTP 的容有有某字符串,有就是警
    Terenc3
        32
    Terenc3  
       2017-12-27 20:25:50 +08:00
    好吧,其实我也有十几台虚拟机在跑服务,需求和你差不多,告警会同时通过邮件、短信和微信发送。

    监控着电流、电压、湿度、露点、nginx、apache、mariadb、爬虫、ELK 集群、各种小米智能硬件的参数...

    zabbix 是强大,不过确实比较麻烦。
    param
        33
    param  
    OP
       2017-12-27 20:46:50 +08:00
    @Technetiumer 那就必须要在我的设备上跑一个 http server,然后再搞个外网地址。。
    xingwing
        34
    xingwing  
       2017-12-27 20:56:33 +08:00 via iPhone
    小米的 open-falcon
    dasenlin
        35
    dasenlin  
       2017-12-27 21:10:16 +08:00
    http://www.phpservermonitor.org/ php 的,布置相当简单,可检测 80 443 等自定义端口,也可以 ping 检测,显示 ping 值,邮件报警
    param
        36
    param  
    OP
       2017-12-27 21:16:45 +08:00
    @dasenlin 只监控网站没用啊。。
    7654
        37
    7654  
       2017-12-27 21:19:37 +08:00
    @param #24 zabbix+python 效果很好,不管什么样的监控都能对付
    param
        38
    param  
    OP
       2017-12-27 21:26:26 +08:00
    @7654
    @Terenc3
    @kimoCHG

    既然都认为 zabbix 好用,那么请问有没有简化版的 zabbix ?我不要那一套乱七八糟的东西。。
    tianshiyeben
        39
    tianshiyeben  
       2017-12-28 07:01:56 +08:00 via Android
    以前写的服务器监控工具,现在改成单机部署了,不知道是你要的嘛,http://www.wg900.com
    v2gg
        40
    v2gg  
       2017-12-28 08:31:55 +08:00 via Android
    ServerStatus GitHub 上有 可以去看看
    planetx
        41
    planetx  
       2017-12-28 09:35:16 +08:00
    Zabbix 666
    alen
        42
    alen  
       2017-12-28 11:28:22 +08:00
    zabbix+shell/python , nagios
    xlrtx
        43
    xlrtx  
       2017-12-28 15:29:07 +08:00
    每个服务器上部署一个 /health 接口, 每隔一段时间, 所有的机器互相检查对方, 出现超时或返回错误则钉钉机器人报警.
    Admstor
        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 之后返回什么才是正确的进行对比
    这就几乎进一步到了企业业务领域了
    param
        45
    param  
    OP
       2017-12-28 15:55:58 +08:00
    @tianshiyeben
    @v2gg
    @planetx
    @alen
    @xlrtx
    @Admstor
    复杂了大哥,为了定时发个消息我还要跑个 web server ?还要搞个外网 IP 地址?甚至还要装个数据库?
    耗电,浪费资源。我性能最弱的设备是路由器,内存总共 60M。
    VicYu
        46
    VicYu  
       2017-12-28 16:03:15 +08:00
    如果只是想做 up 检测,中心化是抹不开的,找一个能长时间在线的,做 health check 吧,这样简单点
    param
        47
    param  
    OP
       2017-12-28 16:24:33 +08:00
    @VicYu 如果非要中心化的话,我也会分别拿两台机(或两台以上,反正多多益善)作中心。然后两台机(或以上)也互为中心。。

    其实本帖已经没什么需要讨论了,标题“有没有这样的服务器监控 /警报工具?”,结论是“没有”。我还是需要亲手实现一下,实现方案我也有了。

    pushbullet 方案,再加上多机中心方案,确保万无一失了吧。。。

    类似有一个 QQ 群,每个人都有一个客户端,每个人都可以自由加入 /退出,每个人都可以看到哪些人在线,哪些人离线。
    Admstor
        48
    Admstor  
       2017-12-28 20:22:08 +08:00
    自己要求复杂还怪别人方案复杂...
    自己写代码去吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3306 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 11:59 PVG 19:59 LAX 04:59 JFK 07:59
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86