Условный вывод logstash в statsd - на основе URI запроса haproxy
У меня Logstash версии 1.4.2, анализирующий журналы haproxy с помощью HAPROXYHTTP
шаблон, и он уже отправляет счетчики и информацию о синхронизации в statsd для агрегирования и последующего хранения в Graphite/Whisper.
Теперь я хотел бы подсчитать, сколько раз конкретный элемент пути содержится в компоненте URI, а затем отправить это значение в statsd.
Интересующий меня путь будет: /important/new
Я попытался добавить тег с помощью mutate
и условное регулярное выражение, но результаты пока что показали, что больше журналов совпадают, чем я планировал. Я думаю, что я не понимаю что-то о том, как должна работать секция фильтра.
Моя попытка конфигурации logstash в настоящее время выглядит следующим образом, хотя для краткости я удалил некоторые из рабочих метрик.
input {
file {
type => "haproxy"
path => "/var/log/haproxy/haproxy.log"
}
}
filter {
if [type] == "haproxy" {
grok {
match => { "message" => "%{HAPROXYHTTP}" }
}
if [http_request] =~ /^\/important\/new$/ {
mutate { add_tag => "important" }
}
}
}
output {
if [type] == "haproxy" {
statsd {
host => "statsd-host"
count => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.response_size", "%{bytes_read}"
]
increment => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.hits",
"haproxy.%{important}"
]
timing => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.response_time", "%{time_duration}",
]
}
}
}
Большое спасибо.
1 ответ
Я считаю, что я узнал, как это сделать, поэтому я решил опубликовать свой собственный ответ.
Ключевая часть заключалась в том, чтобы сделать выводной раздел условным для тега. Например:
output {
if [type] == "haproxy" {
statsd {
host => "statsd-host"
count => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.response_size", "%{bytes_read}"
]
increment => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.hits",
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.responses.%{http_status_code}"
]
timing => [
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.response_time", "%{time_duration}",
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.queue_time", "%{time_queue}",
<snip snip more of these>
"haproxy.%{frontend_name}.%{backend_name}.%{server_name}.response_size", "%{bytes_read}"
]
}
if "important" in [tags] {
statsd {
host => "statsd-host"
increment => [
"haproxy.important"
]
}
}
}
}