Я хотел бы отправить статистику журнала Apache HTTPd, например 200 статусов, в Graphite / Carbon. Logstash выглядит идеально, но все примеры, которые я видел, используют Statsd в качестве счетчика состояний. Это означает запуск сервера Statsd (или включение Statsd в Collectd 5.x).
Есть ли способ для Logstash записывать счетчики непосредственно в графит / углерод?
Да, с помощью фильтра «метрика» в logstash. В конфигурации по умолчанию он будет генерировать метрические события каждые 5 секунд для данного поля. Сбрасывая счетчик каждые 5 секунд, вы можете отправлять данные прямо на углеродный сервер Graphite для хранения.
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"
}
}
Каждые 5 секунд создается следующее событие:
{
"@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"
]
}