V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
ioiioi
V2EX  ›  问与答

这里有人玩graphite吗,有个安装问题想请教。

  •  
  •   ioiioi · 2013-05-29 13:21:43 +08:00 · 5469 次点击
    这是一个创建于 3977 天前的主题,其中的信息可能已经有所发展或是发生改变。
    graphite是取代rrd的一个新生代,最新的稳定版本是0.9.10,然而我在部署一个前端graph-explorer时,碰到一个graphite的bug,该bug在github中已经被修复,现在我的问题是:如何使用git来安装最新版的graphite?
    28 条回复    1970-01-01 08:00:00 +08:00
    adieu
        1
    adieu  
       2013-05-29 13:26:46 +08:00
    你现在是怎么部署的?
    理论上来说 git clone下来之后用python setup.py install安装就行
    sykp241095
        2
    sykp241095  
       2013-05-29 13:27:48 +08:00
    git clone下来后,有setup.py,可以根据你自己的linux发行版做个包。或者直接执行pyhton setup.py ....等。

    最好有个/etc/init.d/carbon-cache,和/etc/init.d/carbon-relay。或者以其他方式起这两个daemon也可以。

    如果要用到graph-explorer,graphite-web是必须的。
    ioiioi
        3
    ioiioi  
    OP
       2013-05-29 16:39:32 +08:00
    @sykp241095
    嗯,我安装完graph-explorer后,看不到图像,启用chrome的javascript console,在network tab中看到有一个地方出错,那就是http://localhost/render,根据graph-explorer的wiki说明,应该是graphite-web的bug导致。

    能否分享下/etc/init.d/carbon-cache和/etc/init.d/carbon-relay,我每次都要手工杀进程,然后./carbon-cache.py start,有点小累。

    另外,我如果重装最新版本的graphite,旧版本的数据如何导入?
    ericFork
        4
    ericFork  
       2013-05-29 21:24:19 +08:00
    @ioiioi 其实 carbon-cache.py 是有 stop 的……

    理论上只要 carbon 和 whipser 没有大变更,把 storage/whisper 下的所有文件 copy 过去就可以了
    ioiioi
        5
    ioiioi  
    OP
       2013-05-29 23:40:17 +08:00
    我今晚一直在跟
    /opt/graphite/storage/log/webapp/error.log
    Target WSGI script '/opt/graphite/conf/graphite.wsgi' cannot be loaded as Python module.
    做斗争,已经参考
    http://ericfarkas.com/posts/statsd-graphite-ubuntu/
    改了
    chown -R www-data:www-data /opt/graphite/storage
    并重启了apache2和carbon-cache.py
    但还是出现同样的错误。
    有木有什么建议?
    ericFork
        6
    ericFork  
       2013-05-29 23:59:48 +08:00
    graphite-web 就是一个 django 的 webapp,推荐用 gunicorn 直接跑……不要再用 apache 了
    ioiioi
        7
    ioiioi  
    OP
       2013-05-30 00:29:11 +08:00
    hmm, 我没接触过gunicorn。相对于apache,有什么优势呢?
    ericFork
        8
    ericFork  
       2013-05-30 01:02:19 +08:00
    @ioiioi 简单地说,部署和管理方便,前面挂个 nginx,抗压性也挺强大的

    貌似 @CMGS 曾经写过一大篇来着,很是详细~
    ioiioi
        9
    ioiioi  
    OP
       2013-05-30 12:53:15 +08:00
    @sykp241095,
    我假如使用了gunicorn,或者是graphite自带的bin/run-graphite-devel-server.py 该如何让graph-explorer去获取graphite里面的metrics呢?
    sykp241095
        10
    sykp241095  
       2013-05-30 18:04:06 +08:00
    在config.py里设置你的graphite_url,比如:

    graphite_url = 'http://graphitehost:8000'

    然后还得需要一个cron,这个cron是必须的,来定期从这个url里GET所有的metric信息。

    具体的参照 https://github.com/vimeo/graph-explorer#configuration-of-graph-explorer
    ioiioi
        11
    ioiioi  
    OP
       2013-05-30 23:04:53 +08:00
    @sykp241095
    我相信你有对比过其它的frontend,你觉得哪一种最成熟,最实用?
    ericFork
        12
    ericFork  
       2013-05-30 23:26:34 +08:00
    @ioiioi 我不会告诉你 @sykp241095 现在就在用 graph-explorer 的
    ioiioi
        13
    ioiioi  
    OP
       2013-05-31 08:50:21 +08:00
    @ericFork,呵呵,你们在一起工作吧?能不能跟我们分享下douban的监控系统体系结构。
    sykp241095
        14
    sykp241095  
       2013-05-31 10:07:25 +08:00
    @ioiioi
    我也是碰巧找到了这个,觉得已经很好,就没调研其他的了。
    我觉得graph-explorer已经不错了,可以自定义查询条件,而不是写死在代码里,比较灵活。

    如果你用的是最新的代码,性能上会很好,还支持用gunicorn起多个worker。
    ioiioi
        15
    ioiioi  
    OP
       2013-05-31 12:45:21 +08:00
    @sykp241095
    你的graphite版本是?
    我重装了graphite,用的是0.9.x,应该是0.9.10,然后git clone最新版的graph-explorer,在grapht-explorer的debug tab,可以看到metrics,通过search也能看到targets matching: 62/376,可就是无法限制图片,通过chrome的javascript console,看到render有error。

    你没遇到这种问题吗?
    sykp241095
        16
    sykp241095  
       2013-05-31 16:13:25 +08:00
    @ioiioi
    在我们包系统里是0.9.10-r1,应该和0.9.10有些差别。不过如果不用apache来起graphite-web的话,影响应该不大。我们是用gunicorn来起的。

    我这边的graph-explorer一点问题都没有,我用的chrome。
    sykp241095
        17
    sykp241095  
       2013-06-03 10:01:41 +08:00
    推荐个新鲜出炉的: https://github.com/huoxy/graphite-observer
    一个实时的可以针对单个指标的监控dashboard。

    插件支持。比如有个插件是sa.py,那么对应的可访问url是http://<ip>:<port>/dashboard/sa

    sa.py里会定义一个list,它的每个元素都是一个dict。
    dict(desc = 'hostA cpu', path = 'servers.hostA.cpu.total.user', max = 400, min = 0)
    每一个dict对应页面里的一个泡泡。

    在第一次访问/dashboard/sa的时候,会将插件里的配置下方到browser。再由客户端判断这个指标的状态,判断依据是这个指标过去1分钟的平均值是否在max和min之间。如果是False,在页面里的泡泡会不断的膨胀缩小,非常明显,起警示的作用。

    页面左下角还有实时的检测log,当鼠标悬浮在一个泡泡时,右下角会实时显示这个泡泡所对应指标的状态。
    ioiioi
        18
    ioiioi  
    OP
       2013-06-03 13:28:34 +08:00
    @sykp241095
    这个是你写的?真厉害!

    我花了一个周末时间,终于搞定nginx(reverse proxy)+graphite+gunicorn+graph-explorer+supervisor。
    但在nginx的配置中还是有些疑问:

    1. graph-explorer通过gunicorn -w 4 app:'default_app()' -b 0.0.0.0:8001启动
    2. graphite 通过/usr/local/bin/gunicorn_django -u www-data -g www-data -b 0.0.0.0:8000 --log-file=... /opt/graphite/webapp/graphite启动,配置中的graphite_url写成http://localhost:8001

    通过chrome的javascript console,看到http://localhost/render error,说是 Access-Control-Allow-Origin denied,于是我就配置nginx作为反向代理,graph-explorer的config.py配置成透过nginx来获取graphite的数据,这样才能成功看到图像,但我总觉得这种实现方式不够干净,你是怎么实现的呢?
    ioiioi
        19
    ioiioi  
    OP
       2013-06-03 13:32:59 +08:00
    其实我需要的frontend应该是etsy开发的dashboard,它可以将一大堆开源网管软件整合输出到一个dashboard中,因为我相信没有一款开源网管软件可以通吃,所以多者并存是常态,但是sa在不同的界面间切换就很痛苦,所以迫切需要一个可以整合多种输出到统一页面中的dashboard。

    graph-explorer只是方便搜索到某一个metrics及其历史记录而已,其作用很像logstash+kibana。
    ioiioi
        20
    ioiioi  
    OP
       2013-06-03 13:34:07 +08:00
    etsy的dashboard估计又要废了,作者已经好久没有更新了,开源软件选型的成本很高,根本不知道下一秒会发生什么。
    sykp241095
        21
    sykp241095  
       2013-06-03 13:35:15 +08:00
    @ioiioi

    太复杂了。。。我不敢弄这么复杂,我没有用webserver,直接用http://<ip>:<port>/来访问的,所以我不能对你的这种实现方式给出建议。
    sykp241095
        22
    sykp241095  
       2013-06-03 13:39:01 +08:00
    @ioiioi

    我们打算用三套:

    1,graphite-web: graphite自带的dashboard,作为最基本的。
    2,graph-explorer: ad-hoc的需求,即时查询的dashboard;有汇总的特性,如将多个图放到一个页面。
    3,graphite-observer: 自定义dashboard,比如我就关注a,b,c三个指标,那么我可以将这三个指标放在一个页面里。
    ericFork
        23
    ericFork  
       2013-06-03 13:46:34 +08:00
    http://d.pr/i/iiwQ

    graphite-observer 的简单效果截图
    ioiioi
        24
    ioiioi  
    OP
       2013-06-03 15:58:26 +08:00
    @ericFork

    sorry,我看不懂这张图的意思。
    ericFork
        25
    ericFork  
       2013-06-03 17:19:06 +08:00
    @sykp241095 上面说:

    「在第一次访问/dashboard/sa的时候,会将插件里的配置下方到browser。再由客户端判断这个指标的状态,判断依据是这个指标过去1分钟的平均值是否在max和min之间。如果是False,在页面里的泡泡会不断的膨胀缩小,非常明显,起警示的作用。

    页面左下角还有实时的检测log,当鼠标悬浮在一个泡泡时,右下角会实时显示这个泡泡所对应指标的状态。」

    @ioiioi 就是上面这个的图
    ioiioi
        26
    ioiioi  
    OP
       2013-06-04 11:27:24 +08:00
    @sykp241095

    我看到你在github的diamond中提到将某个collector的单位由KB改成B,我现在正在用diamond来搜集服务器的性能数据,但是遇到一个问题,diamond的单位要么是byte,要么是bit,当数值很大时,在graphite中画的图很难看,有什么办法可以动态调整单位?collectd似乎可以动态调整,譬如disk plugin捕获的数值在graphite可以显示成GB。

    另外,你们选用哪一种来捕获数据,diamond、collectd or else?
    ioiioi
        27
    ioiioi  
    OP
       2013-06-04 11:28:43 +08:00
    @ericFork

    有空我再试试,现在还在挑metrics collector的阶段。
    sykp241095
        28
    sykp241095  
       2013-06-04 12:11:16 +08:00
    @ioiioi
    我们用diamond。

    对于单位,我比较倾向于使用byte。那个是死的,插件默认支持byte/bit两种;有一些collector支持kb等大单位,但需要collector自身支持的。


    至于如何换算单位,我觉得应该交给绘图的工具来做。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3564 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:45 · PVG 08:45 · LAX 17:45 · JFK 20:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.