V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
param
V2EX  ›  DevOps

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

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

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

    假设有如下场景,我有服务器 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
       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
    zjb861107
        21
    zjb861107  
       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  
       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   ·   实用小工具   ·   4296 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 05:32 · PVG 13:32 · LAX 21:32 · JFK 00:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.