StatsD 是用於提交指標的通訊協定,以及用來匯總指標資料的 Daemon。您可以設定 Monitoring 代理程式的 StatsD 外掛程式,將代理程式功能設定為 StatsD Daemon,而 StatsD Daemon 可將指標寫入 Monitoring。
使用 StatsD 外掛程式搭配預設設定,是將使用者定義的指標納入 Monitoring 最簡單的方式。StatsD 外掛程式僅適用於 Linux Stackdriver Monitoring 代理程式。
Monitoring 代理程式也可將其他 collectd 指標匯出為使用者定義的指標,但沒有簡單的預設設定。詳情請參閱「從代理程式自訂指標」。
這項功能僅適用於在 Linux 上執行的代理程式。但無法在 Windows 上使用。
探索
Monitoring 不會自動偵測 StatsD。如要使用 StatsD 指標,請按照下一節所述設定 StatsD 外掛程式。
設定 StatsD 外掛程式
必備條件
StatsD 外掛程式需要 5.5.2-356 版或更新版本的 Monitoring 代理程式。如要更新代理程式,請參閱更新代理程式一文。
啟用外掛程式
對執行 Linux 的受支援 VM 執行個體執行下列作業:
使用下列指令下載 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)
預設設定檔會指示代理程式接受預設 StatsD 通訊埠 8125 的 StatsD 指標。
如果您要將一些指標傳送至您自己的 StatsD Daemon,並將其他指標傳送至代理程式的 StatsD Daemon,請變更設定檔中的通訊埠設定。
執行下列指令,重新啟動 Monitoring 代理程式以納入 StatsD 設定:
sudo service stackdriver-agent restart
如要進一步瞭解 collectd
statsd
外掛程式,請參閱「外掛程式:StatsD」。
預設對應至使用者定義的指標
為了讓您快速開始工作,代理程式的 StatsD 外掛程式會隨附預設 collectd 設定,以將 StatsD 指標對應至 Stackdriver 使用者定義指標:
StatsD 外掛程式中的所有指標在 collectd
plugin
元件中都有statsd
。儲存在 collectd
type
元件中的每個 StatsD 指標類型都有對應的使用者定義指標類型名稱。儲存在 collectd
type_instance
元件中的 StatsD 指標名稱會以名稱為metric
的標籤值儲存。指標類型
Timer
的metric
標籤值不同:這個值包含指標名稱與計數器名稱:平均值、上限、下限、總和、第 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 設定的設計旨在讓您快速開始工作。本節可協助您自訂設定,以符合更複雜的需求。
您應該熟悉使用者定義指標。如需指標的簡介,請參閱「指標、時間序列和資源」。詳情請參閱「使用者定義指標總覽」。
您可以自訂下列內容:
您可以變更指派給預設
metric
標籤的值。使用較多標籤值會導致使用者定義指標中有較多的時間序列。使用較少標籤值則會產生較少的時間序列。您可以變更使用者定義的指標類型。而不需要使用預設設定中提供的預先定義類型。例如,您可以識別使用特定名稱的指標,並針對這些指標使用不同的使用者定義指標類型。
如果您變更使用者定義的指標類型,那麼也可以變更與每個類型相關聯的標籤。預設設定有一個標籤,但您可以新增更多標籤,也可以變更標籤鍵。
如果您變更指標類型,則應在 Monitoring API 中定義新的使用者定義指標類型。詳情請參閱下節的「設計指標類型」一節。
範例
假設您使用 StatsD 監控由兩項服務 my_service_a
和 my_service_b
組成的應用程式。針對每個服務,您想將代表失敗要求數的計數器指標匯出至 Monitoring,但不想使用預設 StatsD 指標類型。
連入的 collectd 指標
定義專屬指標類型前,請務必先瞭解收集指標的結構,以及 StatsD 指標如何預設對應至使用者定義的指標。
包括 StatsD 指標在內的 Collectd 指標中有下列元件:
Host, Plugin, Plugin-instance, Type, Type-instance
在此範例中,您要匯出的 StatsD 指標在 collectd 中有下列 ID:
元件 | 預期的值 |
---|---|
主機 | any |
外掛程式 | statsd |
外掛程式執行個體 | unset1 |
類型 | derive 2 |
類型執行個體 | [SERVICE_NAME].GET.[CODE] 3 |
[VALUE] |
任何值4 |
附註:
1 StatsD 外掛程式目前會讓這個元件保持空白。
2 StatsD 計數器指標對應至 collectd derive
類型。3 例如類型例項可能為 my_service_a.GET.500
。4 [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 外掛程式設定 /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
使用者定義的指標資訊會立即開始流入監控。
後續步驟
自訂 StatsD 外掛程式的方式,與自訂 Monitoring 的 collectd 指標相同。詳情請參閱「代理程式中的使用者定義指標」一文中的「參考資料」與「疑難排解」部分。