Назад | Перейти на главную страницу

Как с помощью Logstash я могу построить счетчики состояний Apache HTTPd в Graphite без Statsd?

Я хотел бы отправить статистику журнала 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"
    ]
}