Sim, usando o filtro "métrico" no logstash. Na configuração padrão, ele emitirá eventos de métrica a cada 5 segundos para um determinado campo. Ao redefinir o contador a cada 5 segundos, você pode enviar os dados diretamente para o servidor de carbono do Graphite para armazenamento.
input {
file {
path => "/var/log/apache2/access.log"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
# make sure response code is valid
if [response] =~ /\d\d\d/ {
metrics {
# A counter field
meter => "apache.response.%{host}.%{response}"
add_tag => "metric"
clear_interval => "5"
flush_interval => "5"
}
}
}
output {
#stdout { codec => rubydebug }
graphite {
fields_are_metrics => true
# only send metrics collected in the filter
include_metrics => ["^apache\.response\..*"]
#host => "localhost"
#port => "2003"
}
}
A cada 5 segundos, o seguinte evento é criado:
{
"@version" => "1",
"@timestamp" => "2015-05-26T11:38:15.510Z",
"message" => "ip-10-0-0-148",
"apache.response.ip-10-0-0-145.401.count" => 1,
"apache.response.ip-10-0-0-145.401.rate_1m" => 0.0,
"apache.response.ip-10-0-0-145.401.rate_5m" => 0.0,
"apache.response.ip-10-0-0-145.401.rate_15m" => 0.0,
"tags" => [
[0] "metric"
]
}