zoukankan      html  css  js  c++  java
  • Statsd+Graphite+Grafana:搭建web监控系统

    简单介绍

    Statsd:一个nodejs的客户端,用于向graphite的收集器发送数据,使用各类编程语言的客户端响起发送timer,counter等统计数据后,其通过udp定时向graphite发送数据。

    • Statsd 最早是 2008 年 Flickr 公司用 Perl 写的针对 Graphite、datadog 等监控数据后端存储开发的前端网络应用,2011 年 Etsy 公司用 node.js 重构。
    • statsd狭义来讲,其实就是一个监听UDP(默认)或者TCP的守护程序,根据简单的协议收集statsd客户端发送来的数据,聚合之后,定时推送给后端,如graphite和influxdb等,再通过grafana等展示。

    Graphite:Graphite 是用 Python 模仿 RRDtools 写的时间序列数据库套件。包括三个部分:

    • carbon: 是一个Twisted守护进程,监听处理数据;
    • whisper: 存储时间序列的数据库;
    • webapp: 一个用 Django 框架实现的网页应用。
    • 我们这里使用其接收Statsd收集上来的的数据,并存储监控数据;

    Grafana:是一个开源的强有力的数据展示、量化分析工具,数据源包括 graphite、prometheus、mysql、influxdb 等等,可以直接在页面上组装语句,另外还可以对资源实现可用性和性能监控报警,同时还支持集成OpenLDAP;

    Statsd

    容器启动

    docker run -d 
        -p 8125:8125/udp 
        -p 8126:8126 
        -v /home/statsd/config.js:/usr/src/app/config.js 
        statsd

    注意配置
    statsd提供默认的配置文件Config.js。可以参考相应的注释按需配置,接下来将简单介绍一些配置项。
    statsd 默认监听8125来收集udp包,这里将收集的数据发送到graphite。

    {
        graphitePort: 2003,
        graphiteHost: "10.10.10.124",
        port: 8125,
        backends: [ "./backends/graphite" ]
    }

    快速测试:通过nc向statsd发送数据

    statsd接收的数据格式如下:

    <metricname>:<value>|<type>

    nc发送

    echo "foo:1|c" | nc -u -w0 127.0.0.1 8125

    StatsD 支持汇总的数据类型:counter、timer、gauge和set。

    Metirc Type: Counting
    最简单的metric应该就是counter,也就是通常的计数功能,StatsD会将收到的counter value累加,然后在flush的时候输出,并且重新清零。所以我们用counter就能非常方便的查看一段时间某个操作的频率,譬如对于一个HTTP服务来说,我们可以使用counter来统计request的次数,finish这个request的次数以及fail的次数。

    echo "foo:1|c" | nc -u -w0 127.0.0.1 8125

    Metirc Type: Gauges
    不同于Counter,Gauge在下次flush的时候是不会清零的,另外,gauge通常是在client进行统计好在发给StatsD的,譬如, capacity:100|g 这样的gauge,即使我们发送多次,在StatsD里面,也只会保存100,不会学counter那样进行累加。

    Metirc Type: Set
    Set用来计算某个metric unique事件的个数,譬如对于一个接口,可能我们想知道有多少个user访问了,我们可以这样:

    StatsD就会展示这个request metric只有1,2两个用户访问了。

    request:1|s
    request:2|s
    request:1|s

    Metirc Type: Timing

    timers用来记录一个操作的耗时,单位ms。statsd会记录平均值(mean)、最大值(upper)、最小值(lower)、累加值(sum)、平方和(sum_squares)、个数(count)以及部分百分值。

    rpt:100|g

    如下是在一个flush期间,发送了一个rpt的timer值100。以下是记录的值。

    count_80: 1,    
    mean_80: 100,
    upper_80: 100,
    sum_80: 100,    
    sum_squares_80: 10000, 
    std: 0,     
    upper: 100,
    lower: 100,
    count: 1,
    count_ps: 0.1,
    sum: 100,
    sum_squares: 10000,
    mean: 100,
    median: 100 

    对于百分数相关的数据需要解释一下。以90为例。statsd会把一个flush期间上报的数据,去掉10%的峰值,即按大小取cnt*90%(四舍五入)个值来计算百分值。
    举例说明,假如10s内上报以下10个值。

    1,3,5,7,13,9,11,2,4,8

    则只取10*90%=9个值,则去掉13。百分值即按剩下的9个值来计算。

    $KEY.mean_90   // (1+3+5+7+9+2+11+4+8)/9
    $KEY.upper_90  // 11
    $KEY.lower_90  // 1

    Graphite

    容器运行

    docker run -d 
     --name ops-graphite 
     --restart=always 
     -p 8880:80 
     -p 2003-2004:2003-2004 
     -p 2023-2024:2023-2024 
     -p 8125:8125/udp 
     -p 8126:8126 
     -v /home/graphite/whisper:/opt/graphite/storage/whisper:rw 
     -v /home/graphite/redis:/var/lib/redis:rw 
     -v /home/graphite/log:/var/log:rw 
     graphiteapp/graphite-statsd

    可通过浏览器访问 graphite 页面,http://公网ip:8880,默认用户名:root,密码:root。

     grafana

    容器运行

    docker run -d --name grafana -p 3000:3000 grafana/grafana:master

     grafana配置graphtte数据源

    添加 graphite 数据源,配置用户名密码,测试连接状态

    Name:Graphite

    URL:http://公网ip:8880

    Auth:勾选

    Basic Auth Details:

     -user:root

       -Password:root

  • 相关阅读:
    Django——不同版本
    04爬取拉勾网Python岗位分析报告
    24 两两交换链表中的节点
    UniGUI学习之UniImage(39)
    Delphi7开发简单文件传输
    Javaday03(补充day02运算符,流程控制)
    java中代码块,构造方法和普通方法的代码执行顺序
    +=隐式类型转换
    关于switch中的default
    Java操作JSON数据(5)--jettison操作JSON数据
  • 原文地址:https://www.cnblogs.com/-wenli/p/13661292.html
Copyright © 2011-2022 走看看