我想要从不同的程序(节点)实例发送的消息数量。 这些节点动态显示。消息格式如下:
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只使用一种类型的一个输出。我必须克隆我的输出并分别标记它们才能使它工作(不确定这是否可行)。无论如何,这不是理想的解决方案,我只想更好地呈现我想要实现的目标。