在logstash中向Ganglia发送多个动态指标

时间:2014-06-13 15:38:15

标签: ruby logstash ganglia

我想要从不同的程序(节点)实例发送的消息数量。 这些节点动态显示。消息格式如下:

node01 - I feel like I'm loosing the grip.
node02 - I'm sad.
node02 - I'm loosing the reason to live.

我会在Logstash中使用metrics过滤器来解析日志并统计统计信息 然后将它们发送到Ganglia进行展示。 但是,Logstash中每次调用ganglia输出只允许发送一个统计信息 (不是像Graphite输出中的数组)。 我只知道如何实现我的Logstash配置 使用节点名称的硬编码:

input { stdin { } }

filter
{
    grok { match => [ "message", "%{WORD:instance} - %{GREEDYDATA:data}" ] } 

    metrics
    { 
        meter => "events.%{instance}"
        add_tag => "metric"
        flush_interval => 1
    }
}

output 
{

    if "metric" in [tags]
    {
        ganglia
        {
            group => "node01"
            host => "239.2.11.71"
            metric => "events"
            metric_type => "uint32"
            value => "%{events.node01.rate_1m}"
        }

        ganglia
        {
            group => "node02"
            host => "239.2.11.71"
            metric => "events"
            metric_type => "uint32"
            value => "%{events.node02.rate_1m}"
        }

        stdout { codec => rubydebug { } }
    }
}

也许您可以建议我如何创建与节点名称无关的配置? 我想过在events过滤器中循环遍历ruby数组 (允许你编写任意代码), 并创建新事件,但我不知道如何从代码创建新事件。

我还想过使用multiline分割事件,但我不知道如何翻译 events数组可拆分的东西。我想我可以在gsub过滤器中使用mutate,但是 我不知道如何在数组上使用它以及如何从中获取节点名称。

更新

我检查了包含的解决方案,它也不起作用,我认为Logstash只使用一种类型的一个输出。我必须克隆我的输出并分别标记它们才能使它工作(不确定这是否可行)。无论如何,这不是理想的解决方案,我只想更好地呈现我想要实现的目标。

0 个答案:

没有答案