はじめに
この記事は、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の意味はここや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
の方がわかりやすいと思います。
{
"viz": "timeseries",
"requests": [
{
"q": "sum:gcp.loadbalancing.http.request_count{*} by {url_map_name}.as_rate()",
"aggregator": "avg",
"conditional_formats": [],
"type": "area"
}
]
}
{
"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のプロトコル別リクエスト数やレスポンスコード別リクエスト数もグラフにできます
{
"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"
}
]
}
{
"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でログをフィルタするには以下のように書きます。
resource.type = http_load_balancer AND resource.labels.url_map_name = "<GCLBのurlmap名>" AND httpRequest.status = 502
特定uriへのアクセス件数を数えたいときなどは以下のようにフィルタを書くことができます。
resource.type = http_load_balancer AND resource.labels.url_map_name = "<GCLBのurlmap名>" AND httpRequest.requestUrl: "://<hostとpath>"
Datadog側設定
Datadog側ではgcp.logging.user.<定義した名前>
で拾うことができます。
{
"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側でも設定しています。この辺は改善に期待です。