Logstash 有条件输出到 statsd - 基于 haproxy 请求 URI

Logstash 有条件输出到 statsd - 基于 haproxy 请求 URI

我有 Logstash 1.4.2 版本使用该HAPROXYHTTP模式分析 haproxy 日志,并且它已经将计数器和时间信息发送到 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"
          ]
        }
      }
    }
  }

相关内容