监控系统目标

  1. 实时状态展

  2. 故障信息告

  3. 周期性报

  4. 性能监控

监控系统指标

  1. 监测频

根据目前平台提供的服务标准,监测间隔为5分钟。在可能的情况下,尽可能缩短监测间隔

  1. 报警频

对于关键业务,一次错误即报警。对于非关键业务,允许重试3次错误后报警

  1. 报警方

短信/邮件和App报警。以短信通知为主,邮件和App通知为辅

  1. 周报接

平台端提供周报,接收者为运维经理和技术总监

  1. 命名规

监控项的命名,最好保证良好的可读性,便于及时了解故障和理解报表

建议格式如下

    MON_类型_域名/主机/服

Example - MON_HTTP_99DEV_NE

`

## 基础监控

基础监控主要监控基础架构的可用性和资源使用率。

范围包


1. 服务器物理状态。主要指主机是否存活和在线

2. 服务器资源使用状态。主要包括计算资源(CPU和内存)和存储资源(云磁盘,OSS对象存储服务

3. 服务器外部网络状态。主要包括网络延时,丢包率和带宽使用率

4. 云服务使用状态。主要包括各类服务资源使用率,如MySQL连接数等。


以上需求,目前阿里云监控已经可以处理。其他一些高级监控,则交给监控宝完成

more

### 站点监控
  • PING监控。原则上,每台服务器都要设定PING监控,以及时收到宕机提醒。(阈值:500ms

  • DNS监控。监控DNS域名解析,检查是否返回正确的IP地址,用以保证良好的用户访问体验。(阈值:5000ms

  • HTTP监控。检测WebService是否能正常访问,延时是否过大。(阈值:500ms)

    云服务监控

  • ECS云服务

    监控

    CPU使用

    80

    内存使用

    80

    平均负

    根据CPU核数调

    磁盘使用

    80

    mount point:/ & /mnt/data

  • RDS云服务

    监控项

    磁盘空间使用

    80

    IOPS使用

    80

    连接数使用

    80

    CPU使用

    80

    只读实例延迟时

    5

  • SLB负载均

    监控

    流入流

    800Kbp

    流出流

    800Kbp

    非活跃连接

    100

  • OSS开放存

    目前未提供监控功

  • OCS开放缓

    目前未提供监控功能

    服务和性能监控

    内网采集器

    基于安全考虑,API平台的诸多业务应用端口,只对服务期间内网开放,不便做基于互联网传输的监测。因此,API平台应用服务的状态和性能数据,主要通过内网采集器来收集。

    插件式监控平台支持对内网的服务器及服务进行监控,插件通过内部网络获取监控数据, 多个插件的数据汇总给采集器,采集器将这些数据提交到监控宝的中心服务器, 这样只需要采集器所在的服务器与外网连通即可实现对局域网内的服务进行监控, 解决了通过外部网络无法获取内网数据的问题。 插件式监控平台支持更稳定的数据传输,减少网络不稳定带来的问题。reference:插件式监控平台

    服务监控

    Tomcat监控

    监控

    JVM可使用内

    100

    动态调整,视JVM大小而

    平均处理时

    50m

    当前繁忙线程

    10

    动态调整,视最大线程数而

    当前响应时

    500m

    内网TCP监控8080端

    Zookeeper监控

    监控

    当前响应时

    500m

    内网TCP监控2181端

    ActiveMQ监控

    监控

    statu

    自定义脚本监测。状态值为1,服务正常;否则为异常

    ActiveMQ监控实现流程

    1. 使用自定义脚本detect_srv-stat.py持续尝试连接3个ActiveMQ节点的61616端口,连接成功返回值为1,否则为0

    2. 累加连接返回值,如果结果为1,则ActiveMQ服务正常。(ActiveMQ高可用集群,同时只有一个节点存活,所以只返回一个成功返回值1

    3. 累加返回值写入到状态页,通过simp_httpd.py发布Web页面

    4. 内网采集器通过内网URL访问该状态页,判断服务是否正常,报告给监控宝平台

      代码文件如下

    a. detect_srv_stat.py

    ` __author__ = 'chip

    # -*- coding: utf8 -*
    
    import socke
    
    import tim
    
    while 1
    
        sum = 
    
        f_ip = open('ip.list'
    
        f_result = open('result/status.txt','w'
    
        for line in f_ip
    
            ip = line.split()[0
    
            port = int(line.split()[1]
    
            sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM
    
            result = sock.connect_ex((ip,port)
    
            if result == 0
    
                statcode = 
    
                sock.close(
    
            else
    
                statcode = 
    
                sock.close(
    
            sum += statcod
    
        print "sum:%d" % su
    
        # build a status page for jiankongba
    
        f_result.write('<pre>'
    
        f_result.write('\n'
    
        f_result.write('status:' + str(sum)
    
        f_result.write('\n'
    
        f_result.write('</pre>'
    
        f_result.close(
    
        # sleep 60 second,then run agai
    
        time.sleep(60

    `

    b. simp_httpd.py

    ` __author__ = 'chip

        # -*- coding: utf8 -*
    
        import o
    
        import sy
    
        import BaseHTTPServe
    
        from SimpleHTTPServer import SimpleHTTPRequestHandle
    
        # define http director
    
        os.chdir("/usr/local/jkb_agent/module/"
    
        HandlerClass = SimpleHTTPRequestHandle
    
        ServerClass  = BaseHTTPServer.HTTPServe
    
        Protocol     = "HTTP/1.0"
    
        if sys.argv[1:]
    
          port = int(sys.argv[1]
    
        else
    
          port = 899
    
        server_address = ('0.0.0.0', port)
    
        HandlerClass.protocol_version = Protoco
    
        httpd = ServerClass(server_address, HandlerClass)
    
        sa = httpd.socket.getsockname(
    
        print "Serving HTTP on", sa[0], "port", sa[1], "...
    
        httpd.serve_forever(