StatsD プラグイン

StatsD は指標を送信するためのプロトコルであり、指標データを集計するためのデーモンです。モニタリング エージェントの StatsD プラグインを構成することで、エージェントを Monitoring に指標を書き込む StatsD デーモンとして機能させることができます。

ユーザー定義指標を Monitoring に送信するには、StatsD プラグインをデフォルト構成のまま使用するのが最も簡単な方法です。StatsD プラグインは Linux Stackdriver Monitoring エージェントでのみ使用できます。

Monitoring エージェントは他の collectd 指標をユーザー定義指標としてエクスポートすることもできますが、そのための単純なデフォルト構成はありません。詳しくは、エージェントからのユーザー定義指標をご覧ください。

注: この機能は、Linux で実行されているエージェントでのみ使用できます。Windows では使用できません。

状況把握

Monitoring は StatsD を自動的に検出しません。StatsD 指標を使用するには、次のセクションの説明に従って StatsD プラグインを構成します。

StatsD プラグインの構成

要件

StatsD プラグインは、バージョン 5.5.2-356 以降のモニタリング エージェントを必要とします。エージェントを更新するには、エージェントの更新をご覧ください。

プラグインの有効化

Linux を実行しているサポート対象の VM インスタンスで次の操作を行います。

  1. 次のコマンドを使用して、statsd.conf をダウンロードして /etc/stackdriver/collectd.d/ に配置します。

    (cd /etc/stackdriver/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/statsd.conf)
    
  2. このデフォルト構成ファイルは、デフォルトの StatsD ポート 8125 で StatsD 指標を受け入れるように設定されています。

    一部の指標を独自の StatsD デーモンに送信し、その他の指標をエージェントの StatsD デーモンに送信する場合は、構成ファイルでポート設定を変更してください。

  3. 次のコマンドを実行して、モニタリング エージェントを再起動して StatsD 構成を読み込みます。

    sudo service stackdriver-agent restart
    

collectd statsd プラグインの詳細については、プラグイン StatsD をご覧ください。

ユーザー定義指標へのデフォルト マッピング

速やかに使用を開始できるように、エージェントの StatsD プラグインには、StatsD 指標を Stackdriver のユーザー定義指標にマッピングするデフォルトの collectd 構成が付属しています。

  • StatsD プラグインからの指標はすべて、collectd plugin コンポーネントが statsd になっています。

  • 各 StatsD 指標タイプ(collectd type コンポーネントに保持されている)には、対応するユーザー定義指標タイプ名があります。

  • StatsD 指標名(collectd type_instance コンポーネントに保持されている)は、metric というラベルの値として保持されます。

    指標タイプ Timer では metric ラベルの値が他とは異なり、指標名とカウンタ名(average、upper、lower、sum、percentile-50、percentile-95)の両方がラベルの値に含まれます。

たとえば、次の表は、サポートされている StatsD 指標タイプと指標名が Monitoring のユーザー定義指標にどのようにマッピングされるかを示します。

StatsD タイプ StatsD の名前 Stackdriver の指標タイプ 指標の種類 値の型 指標ラベル
Counter my.counter custom.googleapis.com/statsd/derive Cumulative Int64 metric:my.counter
ゲージ my.gauge custom.googleapis.com/statsd/gauge Gauge Double metric:my.gauge
設定 my.set custom.googleapis.com/statsd/objects Gauge Double metric:my.set
Timer 1 my.timer custom.googleapis.com/statsd/latency Gauge Double metric:my.timer-average
(同じ) (同じ) (同じ) metric:my.timer-upper
(同じ) (同じ) (同じ) metric:my.timer-lower
(同じ) (同じ) (同じ) metric:my.timer-sum
(同じ) (同じ) (同じ) metric:my.timer-percentile-50
(同じ) (同じ) (同じ) metric:my.timer-percentile-95
custom.googleapis.com/statsd/gauge Gauge (同じ) metric:my.timer-count

注:
1 同じ名前の statsd タイマー指標の受信シーケンスがあります。エージェントはこれらの StatsD タイマー指標を集計し、集計データを 7 つの異なる時系列にエクスポートします。

StatsD タイプについて詳しくは、StatsD の仕様をご覧ください。

エクスポートする指標のカスタマイズ

StatsD のデフォルト構成は、速やかに使用を開始できるように設計されています。このセクションは、より複雑なニーズに合わせて構成をカスタマイズする場合にお読みください。

ユーザー定義指標に精通している必要があります。指標の概要については、指標、時系列、リソースをご覧ください。詳しくは、ユーザー定義指標の概要をご覧ください。

次のものをカスタマイズできます。

  • デフォルトの metric ラベルに割り当てられる値を変更できます。使用するラベルの値を増やすと、ユーザー定義指標の時系列の数も増えます。 使用するラベルの値を少なくすると、時系列の数も少なくなります。

  • ユーザー定義指標タイプは変更できます。必ずしも、デフォルト構成で提供されている事前定義されたタイプを使用しなくてもかまいません。たとえば、ある特定の名前で指標を識別し、それらに対して異なるユーザー定義指標タイプを使用できます。

  • ユーザー定義指標タイプを変更する場合、各タイプに関連付けられたラベルも変更できます。デフォルト構成ではラベルは 1 つだけですが、ラベルの数を増やしたり、ラベルのキーを変更したりできます。

指標タイプを変更する場合は、Monitoring API で新しいユーザー定義指標タイプを定義する必要があります。詳細については、次のセクションの指標タイプの設計をご覧ください。

StatsD を使用して 2 つのサービス、my_service_amy_service_b で構成されるアプリケーションをモニタリングしているとします。各サービスについて、失敗したリクエストの数を表すカウンタ指標を Monitoring にエクスポートします。デフォルトの StatsD 指標タイプは使用しません。

受信 collectd 指標

独自の指標タイプを定義する前に、collectd 指標の構造と、StatsD 指標がデフォルトでユーザー定義指標にどのようにマッピングされるかを理解しておくことが重要です。

collectd 指標(StatsD 指標もその 1 つです)には次のコンポーネントが含まれます。

    Host, Plugin, Plugin-instance, Type, Type-instance

この例では、エクスポートする StatsD 指標は次の collectd 識別子を持ちます。

コンポーネント 期待される値
ホスト 任意
プラグイン statsd
プラグイン インスタンス 設定なし 1
derive2
タイプ インスタンス [SERVICE_NAME].GET.[CODE]3
[VALUE] 任意値 4

:
1 StatsD プラグインでは、現在このコンポーネントは設定されていません。
2 StatsD カウンタ指標は collectd derive タイプにマッピングされます。3 たとえば、タイプ インスタンスは my_service_a.GET.5004 [VALUE] は通常、タイムスタンプと倍精度数です。

次の表に、この指標がデフォルトでどのようにマップされるかを示します。

StatsD タイプ StatsD の名前 Stackdriver の指標タイプ 指標の種類 値の型 指標ラベル
Counter my_service_a.GET.500 custom.googleapis.com/statsd/derive Cumulative Int64 metric:my_servce_a.GET.500
Counter my_service_b.GET.403 custom.googleapis.com/statsd/derive Cumulative Int64 metric:my_servce_b.GET.403

このデフォルト マッピングには次のような問題があります。

  • この特定のカウンタ指標([SERVICE_NAME].GET.[CODE])は、他のすべてのカウンタ指標と同じユーザー定義指標タイプに属します。Stackdriver は現時点でラベルの正規表現検索をサポートしていないため、この指標のデータだけを簡単に取得することはできません。

  • データから個々のサービスまたは個々のレスポンス コードに関するデータは、簡単に取得できません。たとえば、my_service_a で発生するエラー(全種類)の合計数は、簡単に取得できません。

  • デフォルト構成ではすべての StatsD 指標が Stackdriver にエクスポートされます。関心のある指標が一部だけの場合、すべての StatsD 指標をエクスポートすると余計なコストがかかる可能性があります。

指標タイプの設計

指標タイプの作成について詳しくは、ユーザー定義指標タイプを作成するをご覧ください。

この例のデータでは次のユーザー指標タイプを使用するのが妥当です。そうすれば、関心のある StatsD 指標のみが保持されるとともに、ラベルによってデータをうまく整理できます。

  • タイプ: custom.googleapis.com/http/request_errors
  • ラベル:
    • service_name(STRING): サービスの名前。
    • response_code(INT64): HTTP レスポンス コード。
  • 種類: CUMULATIVE
  • 値の型: INT64

次の表に、StatsD から Stackdriver への望ましいマッピングを示します。

StatsD タイプ StatsD の名前 Stackdriver の指標タイプ 指標の種類 値の型 指標ラベル
Counter my_service_a.GET.500 custom.googleapis.com/http/request_errors Cumulative Int64 service_name:my_service_a、response_code:500
Counter my_service_b.GET.403 custom.googleapis.com/http/request_errors Cumulative Int64 service_name:my_service_b、response_code:403

指標タイプの設計が済んだら、metricDescriptors.create を使用して指標タイプを作成します。Monitoring で指標タイプを自動的に作成する方法について詳しくは、指標記述子の自動作成をご覧ください。

マッピング構成

StatsD 指標を新しいユーザー定義指標タイプにエクスポートするには、StatsD プラグインのデフォルト構成 /etc/stackdriver/collectd.d/statsd.conf の内容を次のコードで置き換えます。

<Plugin statsd>
  Host "127.0.0.1"
  Port "8125"
  DeleteSets true
  TimerPercentile 50.0
  TimerPercentile 95.0
  TimerLower true
  TimerUpper true
  TimerSum true
  TimerCount true
</Plugin>

LoadPlugin match_regex
LoadPlugin target_set
LoadPlugin target_replace

# Insert a new rule in the default "PreCache" chain, to divert your metrics.
PreCacheChain "PreCache"
<Chain "PreCache">
  # The following rule does all the work for your metric:
  <Rule "rewrite_request_errors">
    # Do a careful match for just your metrics; if it fails, drop down
    # to the next rule:
    <Match regex>
      Plugin "^statsd$"
      TypeInstance "^.*\\.GET\\..*$"    # Match on type instance.
    </Match>

    <Target "set">
      # Specify the metric descriptor type:
      MetaData "stackdriver_metric_type" "custom.googleapis.com/http/request_errors"
      # Initialize the labels from the "type_instance" label; clean the values up in the next Target below.
      MetaData "label:service_name" "%{type_instance}"
      MetaData "label:response_code" "%{type_instance}"
    </Target>

    <Target "replace">
      # Remove ".GET.[code]" to get the real service name.
      MetaData "label:service_name" "\\.GET\\.[0-9]*$" ""
      # Remove "[service].GET." to get the real response code.
      MetaData "label:response_code" "^[^\\.]*\\.GET\\." ""
    </Target>
  </Rule>
</Chain>

エージェントの再起動

VM インスタンスで次のコマンドを実行することにより、エージェントを再起動して新しい構成を読み込みます。

sudo service stackdriver-agent restart

ユーザー定義の指標情報は、すぐに Monitoring に流れ込みます。

次のステップ

StatsD プラグインのカスタマイズは、collectd 指標を Monitoring のためにカスタマイズする場合と同じ要領で行います。詳しくは、エージェントからのユーザー定義指標のリファレンスとトラブルシューティングをご覧ください。