StatsD 外掛程式

StatsD 是用於提交指標的通訊協定,以及用來匯總指標資料的 Daemon。您可以設定 Monitoring 代理程式的 StatsD 外掛程式,將代理程式功能設定為 StatsD Daemon,而 StatsD Daemon 可將指標寫入 Monitoring。

如要將自訂指標輸入 Monitoring,最簡單的方式是以預設設定使用 StatsD 外掛程式。StatsD 外掛程式僅適用於 Linux Stackdriver Monitoring 代理程式。

Monitoring 代理程式也可將其他 collectd 指標匯出為自訂指標,但沒有簡單的預設設定。詳情請參閱從代理程式自訂指標一文。

探索

Monitoring 不會自動偵測 StatsD。如要使用 StatsD 指標,請如下一節所述,設定 StatsD 外掛程式。

設定 StatsD 外掛程式

必備條件

StatsD 外掛程式需要 5.5.2-356 版或更新版本的 Monitoring 代理程式。如要更新代理程式,請參閱更新代理程式一文。

啟用外掛程式

對執行 Linux 的受支援 VM 執行個體執行下列作業:

  1. 使用下列指令下載 statsd.conf 並放到 /opt/stackdriver/collectd/etc/collectd.d/ 目錄:

    (cd /opt/stackdriver/collectd/etc/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 Daemon,並將其他指標傳送至代理程式的 StatsD Daemon,請變更設定檔中的通訊埠設定。

  3. 執行下列指令,重新啟動 Monitoring 代理程式以納入 StatsD 設定:

    sudo service stackdriver-agent restart
    

如要瞭解其他 StatsD 外掛程式設定選項,請參閱 collectd.org 中的 Plugin:StatsD 一文。

自訂指標的預設對應

為了讓您快速開始工作,代理程式的 StatsD 外掛程式會隨附預設 collectd 設定,以將 StatsD 指標對應至 Stackdriver 自訂指標:

  • StatsD 外掛程式中的所有指標在 collectd plugin 元件中都有 statsd

  • 儲存在 collectd type 元件中的每個 StatsD 指標類型都有對應的自訂指標類型名稱。

  • 儲存在 collectd type_instance 元件中的 StatsD 指標名稱會以名稱為 metric 的標籤值儲存。

    指標類型 Timermetric 標籤值不同:這個值包含指標名稱與計數器名稱:平均值、上限、下限、總和、第 50 個百分位數以及第 95 個百分位數。

例如,下表顯示支援的 StatsD 指標類型和指標名稱對應至 Monitoring 自訂指標的方式:

StatsD 類型 StatsD 名稱 Stackdriver 指標類型 指標種類 值類型 指標標籤
計數器 my.counter custom.googleapis.com/statsd/derive 累計 Int64 metric:my.counter
取樣 my.gauge custom.googleapis.com/statsd/gauge 取樣 Double metric:my.gauge
設定 my.set custom.googleapis.com/statsd/objects 取樣 Double metric:my.set
計時器1 my.timer custom.googleapis.com/statsd/latency 取樣 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 取樣 (相同) metric:my.timer-count

附註:
1 存在相同名稱 statsd 計時器指標的傳入序列。代理程式會匯總 StatsD 計時器指標,並將摘要資料匯出至 7 個不同的時間序列。

如要進一步瞭解 StatsD 類型,請參閱 StatsD 規格一文。

自訂匯出指標

預設 StatsD 設定的設計旨在讓您快速開始工作。本節可協助您自訂設定,以符合更複雜的需求。

您應該對 Stackdriver 自訂指標很熟悉。如需 Stackdriver 指標的介紹,請參閱指標、時間序列和資源一文。如要進一步瞭解自訂指標,請參閱自訂指標一文。

您可以自訂下列內容:

  • 您可以變更指派給預設 metric 標籤的值。使用較多標籤值會導致自訂指標中有較多的時間序列。使用較少標籤值則會產生較少的時間序列。

  • 您可以變更自訂指標類型,而不需要使用預設設定中提供的預先定義類型。例如,您可以識別使用特定名稱的指標,並針對這些指標使用不同的自訂指標類型。

  • 如果您變更自訂指標類型,那麼也可以變更與每個類型相關聯的標籤。預設設定有一個標籤,但您可以新增更多標籤,也可以變更標籤鍵。

如果您變更指標類型,則您應在 Monitoring API 中定義新的自訂指標類型。詳情請參閱下一節的設計自訂指標類型

範例

假設您使用 StatsD 監控包含 my_service_amy_service_b 兩個服務的應用程式。針對每個服務,您想將代表失敗要求數的計數器指標匯出至 Monitoring,但不想使用預設 StatsD 指標類型。

連入的 collectd 指標

定義您自己的自訂指標類型之前,必須先瞭解 collectd 指標的結構,以及 StatsD 指標預設對應至自訂指標的方式。

包括 StatsD 指標在內的 Collectd 指標中有下列元件:

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

在此範例中,您要匯出的 StatsD 指標在 collectd 中有下列 ID:

元件 預期的值
主機 不限
外掛程式 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 指標類型 指標種類 值類型 指標標籤
計數器 my_service_a.GET.500 custom.googleapis.com/statsd/derive 累計 Int64 metric:my_servce_a.GET.500
計數器 my_service_b.GET.403 custom.googleapis.com/statsd/derive 累計 Int64 metric:my_servce_b.GET.403

預設對應可能會給您帶來一些問題:

  • 這個特定計數器指標 ([SERVICE_NAME].GET.[CODE]) 的自訂指標類型與其他所有計數器指標的都相同。您無法輕鬆取得這個指標的資料,因為 Stackdriver 目前不支援對標籤進行規則運算式搜尋。

  • 您無法輕鬆取得個別服務的資料,或資料中的個別回應碼。例如,您無法輕鬆取得 my_service_a 中發生的錯誤 (各種錯誤) 總數。

  • 預設設定會將所有 StatsD 指標匯出至 Stackdriver,如果您只對特定指標感興趣,成本可能會比較高。

設計自訂指標類型

如需建立自訂指標類型的完整討論,請參閱建立自訂指標一文。

在這個範例中,以下自訂指標類型是資料的合理選擇,因為這個類型僅儲存您感興趣的 StatsD 指標,並且其標籤選項有助於更精確地管理資料:

  • 名稱:custom.googleapis.com/http/request_errors
  • 標籤:
    • service_name (STRING):服務的名稱。
    • response_code (INT64):HTTP 回應碼。
  • 種類:累計
  • 類型:INT64

下表顯示從 StatsD 到 Stackdriver 的所需對應:

StatsD 類型 StatsD 名稱 Stackdriver 指標類型 指標種類 值類型 指標標籤
計數器 my_service_a.GET.500 custom.googleapis.com/http/request_errors 累計 Int64 service_name:my_service_a, response_code:500
計數器 my_service_b.GET.403 custom.googleapis.com/http/request_errors 累計 Int64 service_name:my_service_b, response_code:403

在您設計指標類型之後,請使用 metricDescriptors.create 建立這個類型。如要瞭解如何使用 Monitoring 建立指標類型,請參閱自動建立自訂指標一文。

對應設定

如要將 StatsD 指標匯出至新自訂指標類型,請將預設 StatsD 外掛程式設定的內容 /opt/stackdriver/collectd/etc/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 name:
      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 外掛程式是針對 Monitoring 自訂 collectd 指標的特殊案例。詳情請參閱從代理程式自訂指標一文中的「參考資料」與「疑難排解」部分。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Monitoring
需要協助嗎?請前往我們的支援網頁