param
V2EX  ›  DevOps

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

  •  
  •   param · Dec 27, 2017 via Android · 11919 views
    This topic created in 3237 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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

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

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

    https://www.zabbix.com/
    param
    param
    OP
    Dec 27, 2017
    16
    @kimoCHG 这个东西看起来相当复杂啊。。。
    param
    param
    OP
    Dec 27, 2017
    17
    @privil 我是被移到 DevOps 的。。。我本来是放“问与答”的
    @Livid
    Livid
    Livid
    MOD
    PRO
    Dec 27, 2017
    18
    @privil
    @param

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

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

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

    pushbullet 或许是一个不错的方案。
    Technetiumer
    Technetiumer
    Dec 27, 2017 via Android
    25
    uptime.io

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

    還可以根據狀態碼是不是 200 判斷

    有一定免費的用量
    Technetiumer
    Technetiumer
    Dec 27, 2017 via Android
    26
    rrfeng
    rrfeng
    Dec 27, 2017
    27
    看起来感觉楼主是要用几台服务器互相检测存活吧

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

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

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

    既然都认为 zabbix 好用,那么请问有没有简化版的 zabbix ?我不要那一套乱七八糟的东西。。
    tianshiyeben
    tianshiyeben
    Dec 28, 2017 via Android
    39
    以前写的服务器监控工具,现在改成单机部署了,不知道是你要的嘛,http://www.wg900.com
    v2gg
    v2gg
    Dec 28, 2017 via Android
    40
    ServerStatus GitHub 上有 可以去看看
    planetx
    planetx
    Dec 28, 2017
    41
    Zabbix 666
    alen
    alen
    Dec 28, 2017
    42
    zabbix+shell/python , nagios
    xlrtx
    xlrtx
    Dec 28, 2017
    43
    每个服务器上部署一个 /health 接口, 每隔一段时间, 所有的机器互相检查对方, 出现超时或返回错误则钉钉机器人报警.
    Voren
    Voren
    Dec 28, 2017
    44
    我觉得楼主思路就不对
    相互监控会存在逻辑冲突,你两个设备相互监控逻辑冲突还算能解决,设备多了之后就没法解决,你自己考虑是不是这样?

    这也就为什么目前所有比较成熟成规模的监控系统设计都是中心化,高可用也是尽可能保证监控高可用,好在监控系统一般并不会特别庞大,并发上面也远远小于业务系统,所以做到高可用算是很简单了.在你的例子中,我觉得实际上仅需要一台设备作为监控即可,监控本身可以定时给你发邮件表示自己存活,或者你干脆引入第三方免费监控对自己的监控存活检测即可,目前几个比较成熟的第三方检测,基本都能保证 99.99SLA,我认为无论对个人还是中小企业这都足够

    然后监控项目方面,http 略过不提
    其他设备方面你基本上总是需要一个特定的端口来做响应吧,那么对这个端口进行适当的监控就可以了,这点上现在主流的监控软件都能做到,cacti nagios zabbix 都可以,win 上还有个商用软件 Advanced Host Monitor https://www.ks-soft.net/hostmon.eng/也基本可以做到
    至于你需要更细致的监控,那么就跟你的业务有关了
    例如你是跑 nginx 还是 apache,在 snmp 里都有对应 OID 来进行性能监控分析,你自己写的程序那自然你自己才清楚需要那些监控,甚至 http 方面也可以监控 post 之后返回什么才是正确的进行对比
    这就几乎进一步到了企业业务领域了
    param
    param
    OP
    Dec 28, 2017
    45
    @tianshiyeben
    @v2gg
    @planetx
    @alen
    @xlrtx
    @Admstor
    复杂了大哥,为了定时发个消息我还要跑个 web server ?还要搞个外网 IP 地址?甚至还要装个数据库?
    耗电,浪费资源。我性能最弱的设备是路由器,内存总共 60M。
    VicYu
    VicYu
    Dec 28, 2017
    46
    如果只是想做 up 检测,中心化是抹不开的,找一个能长时间在线的,做 health check 吧,这样简单点
    param
    param
    OP
    Dec 28, 2017
    47
    @VicYu 如果非要中心化的话,我也会分别拿两台机(或两台以上,反正多多益善)作中心。然后两台机(或以上)也互为中心。。

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

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

    类似有一个 QQ 群,每个人都有一个客户端,每个人都可以自由加入 /退出,每个人都可以看到哪些人在线,哪些人离线。
    Voren
    Voren
    Dec 28, 2017
    48
    自己要求复杂还怪别人方案复杂...
    自己写代码去吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   652 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    ♥ Do have faith in what you're doing.