Fluentd에서 HTTP 상태 코드를 집계하고 Datadog에서 시각화 or 모니터링

----------------
추가: 2015/10/12
Dogstatsd 를 이용한 집계를 Dogstatsd에서 Datadog에 사용자 지정 메트릭을 보내는 방법 ~Fluentd와의 연계와 함께 ~ - TAKUMI SAKAMOTO’S BLOG 에 썼으므로, ​​함께 읽어 주시면 좋겠습니다.
----------------

Datadog에서 Apache의 상태 코드를 모니터링하는 방법입니다. 아래와 같이 시각화하거나 5xx 가 일정수 이상이 되면 경고를 날리는 것 같은 것을 할 수 있게 됩니다. 예제는 apache 라고 써 있습니다만, nginx 에서도 거의 같은 방법으로 할 수 있을 것입니다.


<source>
    type tail
    format ltsv
    time_format %d/%b/%Y:%H:%M:%S %z
    path /var/log/httpd/access_log
    pos_file /tmp/access_log.pos
    tag apache.access
</source>

<match apache.access>
    type datacounter
    tag apache.status
    aggregate tag
    count_key status
    pattern1 2xx ^2\d\d$
    pattern2 3xx ^3\d\d$
    pattern3 4xx ^4\d\d$
    pattern4 5xx ^5\d\d$
</match>

# record_reformer がフィールド名の . を上手く扱えない
# rename_key でフィールド名を書き換える
<match apache.status>
    type rename_key
    append_tag renamed
    rename_rule1 ^apache\.access_(.+_count) apache_${md[1]}
</match>

# fluent-plugin-dd が必要とするデータ構造に変換する
# グループ毎に集計できるように tag を指定しておく
# {
#   "metric":"some.metric.name",
#   "value":100.0,
#   "tag":"any.tag",
#   "type":"gauge"
# }
<match apache.status.renamed>
    type copy
    <store>
      type record_reformer
      tag  datadog.apache.status
      <record>
        metric apache.status_2xx_count
        tag    group:web
        value  ${apache_2xx_count}
      </record>
    </store>
    <store>
      type record_reformer
      tag  datadog.apache.status
      <record>
        metric apache.status_3xx_count
        tag    group:web
        value  ${apache_3xx_count}
      </record>
    </store>
    <store>
      type record_reformer
      tag  datadog.apache.status
      <record>
        metric apache.status_4xx_count
        tag    group:web
        value  ${apache_4xx_count}
      </record>
    </store>
    <store>
      type record_reformer
      tag  datadog.apache.status
      <record>
        metric apache.status_5xx_count
        tag    group:web
        value  ${apache_5xx_count}
      </record>
    </store>
</match>

# ホスト毎に集計できるように hostname をつける
<match datadog.**>
    type forest
    subtype dd
    <template>
        dd_api_key xxxx
        host       ${hostname}
    </template>
</match>

덧붙여서 Datadog에서 위에 붙인 것 같은 그래프는 아래와 같은 JSON으로 만들 수 있습니다.
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:apache.status_2xx_count{group:web}, sum:apache.status_3xx_count{group:web}, sum:apache.status_4xx_count{group:web}, sum:apache.status_5xx_count{group:web}",
      "type": "area"
    }
  ],
  "events": []
}

좋은 웹페이지 즐겨찾기