DatadogでGoogle LoadBalancerのリクエスト数を見る

# はじめに
この記事は、**Datadog Advent Calendar 2016 9日目**の内容です。
ネタに困っていたのですが、Datadog-Google Cloud Platform Integrationを利用したGoogle Cloud Load Balancing(GCLB)のリクエスト数をDatadog上で見る方法を紹介します。

# Datadog設定

では早速設定してみます。Google Cloud Consoleでもリクエスト数を確認できますが、Datadog側でもリクエスト数を見られるようにします。

## Load Balancing関連で取得できるMetrics

Datadog-Google Cloud Platform Integrationを有効にしてください。
有効にするとloadbalancing関係では以下のようなMetricsが取得できるようになります。各Metricsの意味は[ここ](https://docs.datadoghq.com/integrations/gcp/)やIntegrationの設定画面などで確認してください。

|Metrics|
|:--|
|gcp.loadbalancing.http.backend_latencies.avg|
|gcp.loadbalancing.http.backend_latencies.max|
|gcp.loadbalancing.http.backend_latencies.min|
|gcp.loadbalancing.http.backend_latencies.samplecount|
|gcp.loadbalancing.http.backend_latencies.sumsqdev|
|gcp.loadbalancing.http.frontend_tcp_rtt.avg|
|gcp.loadbalancing.http.frontend_tcp_rtt.max|
|gcp.loadbalancing.http.frontend_tcp_rtt.min|
|gcp.loadbalancing.http.frontend_tcp_rtt.samplecount|
|gcp.loadbalancing.http.frontend_tcp_rtt.sumsqdev|
|gcp.loadbalancing.http.request_bytes_count|
|gcp.loadbalancing.http.request_count|
|gcp.loadbalancing.http.response_bytes_count|
|gcp.loadbalancing.http.response_code_class_percentage|
|gcp.loadbalancing.http.total_latencies.avg|
|gcp.loadbalancing.http.total_latencies.max|
|gcp.loadbalancing.http.total_latencies.min|
|gcp.loadbalancing.http.total_latencies.samplecount|
|gcp.loadbalancing.http.total_latencies.sumsqdev|

結構いっぱいありますね。リクエスト数の他、RTTやlatencyの値が取れるようです。リクエスト数をグラフにするには、`gcp.loadbalancing.http.request_count`を使えば良さそうです。

## グラフ定義

後日余力があればスクリーンショットも貼り付けます。一旦jsonでお茶を濁させてください。
GCLBごとにurlmapを作成していると思いますので、urlmap毎に分割したほうがいいような気がします。
`sum`で足し上げることを忘れずに。また、`count`よりも`rate`の方がわかりやすいと思います。

```json:urlmap毎のリクエスト数
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:gcp.loadbalancing.http.request_count{*} by {url_map_name}.as_rate()",
      "aggregator": "avg",
      "conditional_formats": [],
      "type": "area"
    }
  ]
}
```

```json:特定urlmapのリクエスト数
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:gcp.loadbalancing.http.request_count{url_map_name:<GCLBのurlmap名>}.as_rate()",
      "aggregator": "avg",
      "conditional_formats": [],
      "type": "area"
    }
  ]
}
```

また、以下のようにすると、http/httpsのプロトコル別リクエスト数やレスポンスコード別リクエスト数もグラフにできます

```json:特定urlmapのプロトコル別リクエスト数
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:gcp.loadbalancing.http.request_count{url_map_name:<GCLBのurlmap名>} by {target_proxy_type}.as_rate()",
      "aggregator": "avg",
      "conditional_formats": [],
      "type": "area"
    }
  ]
}
```

```json:特定urlmapのレスポンスコード別リクエスト数
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:gcp.loadbalancing.http.request_count{url_map_name:<GCLBのurlmap名>} by {response_code}.as_rate()",
      "aggregator": "avg",
      "conditional_formats": [],
      "type": "area"
    }
  ]
}
```

他にも`forwarding_rule_name`や`instance_group_name`などの切り口で分割できます。
手元のDatadog環境では過去1時間分の期間でグラフ表示をするとなぜかGoogle Cloud Consoleでみられる数字と大きく乖離します。同じような症状になった場合は過去4時間分などのグラフをみたほうが良さそうです。

# Stackdriver Loggingでの絞り込み

Stackdriver LoggingのLogs-based MetricsでrequestUrlなどを仕分けをしておくと、Datadogでもその値を見ることができます。ちなみに、この設定はStackdriver Monitoringで値を見る際も必要になる設定になります。

これまたスクリーンショットなしです。余力があれば後日貼り付けたいと思います。Stackdriver側でLogging API が先日変わったこともあり、みなさんの環境と微妙に違うかもしれません。

## Stackdriver Logging側設定


Logs-based Metricsは以下の流れで作成できます。以下の説明の名前などは英語版Google Cloud Consoleのものです。日本語版は適宜読み替えてください。

*  Stackdriver Logging -> Logs-based Metrics より「CREATE METRIC」をクリック
*  Filter入力枠へフィルタ内容を入力し、「Submit Filter」をクリック
* Metric Name(必須)とMetric Description(オプション)を入力して「Create Metric」をクリック

上記のMetric Nameで名前をつけると、StackdriverやDatadogでつけた名前で参照することができます

フィルタ例として、特定urlmapでのレスポンス502でログをフィルタするには以下のように書きます。

```text:v2でのフィルタ例(レスポンスコード502でフィルタ)
resource.type = http_load_balancer AND resource.labels.url_map_name = "<GCLBのurlmap名>" AND httpRequest.status = 502
```

特定uriへのアクセス件数を数えたいときなどは以下のようにフィルタを書くことができます。

```text:v2でのフィルタ例(uriでフィルタ)
resource.type = http_load_balancer AND resource.labels.url_map_name = "<GCLBのurlmap名>" AND httpRequest.requestUrl: "://<hostとpath>"
```


## Datadog側設定

Datadog側では`gcp.logging.user.<定義した名前>`で拾うことができます。

```json:ログ指標の件数
{
  "viz": "timeseries",
  "requests": [
    {
      "q": "sum:gcp.logging.user.<定義した名前>{*} / 60",
      "aggregator": "avg",
      "conditional_formats": [],
      "type": "line"
    }
  ]
}
```

60で割っているのは`rate`と同じように単位時間当たりの件数で見たいためです。

# 最後に

DatadogでGCLBのリクエスト数を見る方法を紹介しました。Integrationを有効にすることでリクエスト数を見るためだけにGoogle Cloud Consoleを開く必要がなくなり、Datadog上で他のMetricsと一緒に見られるようになるのは便利ではないかと思います。

手元のDatadog環境はGCPのIntegrationはあまり調子が良くないみたいで、アラート設定はDatadog側だけで設定するのではなく、Stackdriver側でも設定しています。この辺は改善に期待です。