2016-12-02 196 views
0

我有两组Graphite系列,都是这种格式。第二组是相同的,除了不是“a.b”,它有“x.y”前缀。在Graphite中计算groupByNode()的结果百分比()结果

a.b.ccc.a1.hr 
a.b.ccc.a2.hr 
a.b.ccc.a3.hr 
a.b.ddd.a1.hr 
a.b.ddd.a4.hr 

要通过第三节点组我用groupByNode(a.b.*.*.hr,2,"sumSeries"),这让我两个系列:cccddd。我想把第一组中的cccddd系列分成第二组中的相应系列。如何在地图/缩小功能中使用groupByNode的结果?

回答

1

这是可能的,但棘手的,或者至少我不知道一个更容易的方式来以可扩展的方式做到这一点。

注意,下面的方法使用mapSeries/reduceSeries功能,这些功能仅适用于石墨网master(不0.9.x版本,请参阅下面的手动方法,将在0.9.x版本工作)

我们先从2个seriesLists,每个包含cccddd

groupByNode(a.b.*.*.hr,2,"sumSeries") 
groupByNode(x.y.*.*.hr,2,"sumSeries") 

现在我们需要让他们进入一个包含所有的单品seriesList,所以首先我们将需要让他们重新区分:

aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b") 
aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y") 

现在我们有ccc.a_bddd.a_bccc.x_yddd.x_y,我们可以让他们到一个列表与group

group(
    aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"), 
    aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y") 
) 

现在我们可以在地图上开始/减少:

reduceSeries(
    mapSeries(
    group(
     aliasSub(groupByNode(a.b.*.*.hr,2,"sumSeries"), "$", ".a_b"), 
     aliasSub(groupByNode(x.y.*.*.hr,2,"sumSeries"), "$", ".x_y") 
    ), 
    0 
), 
    "asPercent", 1, "a_b", "x_y" 
) 

在这一点上,我们将有ccc.reduce.asPercentddd.reduce.asPercent,你可以然后包装enire的东西在另一个aliasByNode(<query>, 0)如果你wa nt只是cccddd

这是什么东西做的本质是一样的呼唤:

group(
    alias(asPercent(
    groupByNode(a.b.ccc.*.hr,2,"sumSeries"), 
    groupByNode(x.y.ccc.*.hr,2,"sumSeries"), 
), "ccc"), 
    alias(asPercent(
    groupByNode(a.b.ddd.*.hr,2,"sumSeries"), 
    groupByNode(x.y.ddd.*.hr,2,"sumSeries"), 
), "ddd") 
) 

当然除了它会继续努力的,如果你添加eee