StatsD ist ein Protokoll zum Senden von Messwerten und ein Daemon für die Aggregation von Messwertdaten. Durch die Konfiguration des StatsD-Plug-ins des Monitoring-Agents fungiert der Agent als StatsD-Daemon, der Messwerte in Monitoring schreibt.
Die Verwendung des StatsD-Plug-ins mit seiner Standardkonfiguration ist der einfachste Weg, um benutzerdefinierte Messwerte an Monitoring zu senden. Das StatsD-Plug-in ist nur im Stackdriver Monitoring-Agent für Linux verfügbar.
Der Monitoring-Agent kann auch andere collectd-Messwerte als benutzerdefinierte Messwerte exportieren, allerdings gibt es keine einfache Standardkonfiguration. Weitere Informationen finden Sie unter Benutzerdefinierte Messwerte vom Agent.
Diese Funktion ist nur für Agents verfügbar, die unter Linux ausgeführt werden. Es ist unter Windows nicht verfügbar.
Erkennung
Monitoring erkennt StatsD nicht automatisch. Konfigurieren Sie das StatsD-Plug-in wie im nächsten Abschnitt beschrieben, um StatsD-Messwerte zu verwenden.
StatsD-Plug-in konfigurieren
Voraussetzungen
Für das StatsD-Plug-in ist Version 5.5.2-356 oder höher des Monitoring-Agents erforderlich. Informationen zum Aktualisieren des Agents finden Sie unter Agent aktualisieren.
Plug-in aktivieren
Führen Sie auf Ihrer unterstützten VM-Instanz unter Linux folgende Schritte aus:
Laden Sie die Datei statsd.conf herunter und speichern Sie sie mit dem folgenden Befehl im Verzeichnis
/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)
Die Standardkonfigurationsdatei weist den Agent an, StatsD-Messwerte am StatsD-Standardport 8125 anzunehmen.
Wenn Sie einige Messwerte an Ihren eigenen StatsD-Daemon und andere an den StatsD-Daemon des Agents senden möchten, ändern Sie die Porteinstellungen in der Konfigurationsdatei.
Starten Sie den Monitoring-Agent neu, um die StatsD-Konfiguration zu übernehmen. Führen Sie dazu folgenden Befehl aus:
sudo service stackdriver-agent restart
Weitere Informationen zum collectd
statsd
-Plug-in finden Sie unter Plugin:StatsD.
Standardzuordnung zu benutzerdefinierten Messwerten
Das StatsD-Plug-in des Agents umfasst eine collectd-Standardkonfiguration, in der StatsD-Messwerte den benutzerdefinierten Messwerten von Stackdriver zugeordnet werden, um Ihnen einen schnellen Einstieg zu ermöglichen:
Alle Messwerte aus dem StatsD-Plug-in weisen
statsd
in der collectd-Komponenteplugin
auf.Jeder StatsD-Messwerttyp, der in der collectd-Komponente
type
enthalten ist, hat einen entsprechenden benutzerdefinierten Messwerttypnamen.Der StatsD-Messwertname, der in der collectd-Komponente
type_instance
enthalten ist, wird als Wert eines Labels namensmetric
gespeichert.Der Wert des Labels
metric
unterscheidet sich für den MesswerttypTimer
: Er enthält sowohl den Messwertnamen als auch den Namen eines Zählers: "average", "upper", "lower", "sum", "percentile-50" und "percentile-95".
Die folgende Tabelle zeigt beispielsweise, wie die unterstützten StatsD-Messwerttypen und werden benutzerdefinierten Monitoring-Messwerten zugeordnet, um deren Namen zu erfassen:
StatsD-Typ | StatsD-Name | Stackdriver-Messwerttyp | Messwertart | Werttyp | Messwertlabel(s) |
---|---|---|---|---|---|
Zähler | my.counter | custom.googleapis.com/statsd/derive | CUMULATIVE | INT64 | metric:my.counter |
Messgerät | my.gauge | custom.googleapis.com/statsd/gauge | GAUGE | DOUBLE | metric:my.gauge |
Set | my.set | custom.googleapis.com/statsd/objects | GAUGE | DOUBLE | metric:my.set |
Timer1 | my.timer | custom.googleapis.com/statsd/latency | GAUGE | DOUBLE | metric:my.timer-average |
(gleich) | (gleich) | (gleich) | metric:my.timer-upper | ||
(gleich) | (gleich) | (gleich) | metric:my.timer-lower | ||
(gleich) | (gleich) | (gleich) | metric:my.timer-sum | ||
(gleich) | (gleich) | (gleich) | metric:my.timer-percentile-50 | ||
(gleich) | (gleich) | (gleich) | metric:my.timer-percentile-95 | ||
custom.googleapis.com/statsd/gauge | GAUGE | (gleich) | metric:my.timer-count |
Hinweise:
1 Es geht eine Reihe von StatsD-Timer-Messwerten mit demselben Namen ein. Der Agent aggregiert StatsD-Timer-Messwerte und exportiert zusammenfassende Daten in sieben verschiedene Zeitachsen.
Weitere Informationen zu StatsD-Typen finden Sie in der StatsD-Spezifikation.
Exportierte Messwerte anpassen
Der StatsD-Standardkonfiguration wurde für einen schnellen Einstieg entwickelt. Dieser Abschnitt hilft Ihnen dabei, die Konfiguration an komplexere Anforderungen anzupassen.
Sie sollten mit benutzerdefinierten Messwerten vertraut sein. Für eine eine Einführung in Metriken, siehe Messwerte, Zeitachsen und Ressourcen: Weitere Informationen finden Sie unter Übersicht über benutzerdefinierte Messwerte.
Folgende Elemente lassen sich anpassen:
Sie können die Werte ändern, die dem Standardlabel
metric
zugeordnet sind. Je mehr Labelwerte Sie verwenden, desto mehr Zeitachsen erhalten Sie in Ihrem benutzerdefinierten Messwert. Die Verwendung von weniger Labelwerten führt zu weniger Zeitachsen.Sie können die benutzerdefinierten Messwerttypen ändern. Sie müssen die vordefinierten Typen in der Standardkonfiguration nicht verwenden. Beispiel: können Sie Metriken mit einem bestimmten Namen identifizieren und eine andere benutzerdefinierten Messwerttyp.
Wenn Sie die benutzerdefinierten Messwerttypen ändern, können Sie auch die mit jedem Typ verknüpften Labels. In der Standardkonfiguration ist ein einziges Label enthalten, Sie können jedoch weitere Labels hinzufügen oder den Labelschlüssel ändern.
Wenn Sie die Messwerttypen ändern, sollten Sie Ihre neuen benutzerdefinierten Messwerttypen in der Monitoring API definieren. Weitere Informationen finden Sie im folgenden Abschnitt Messwerttyp entwerfen.
Beispiel
Angenommen, Sie verwenden StatsD, um eine Anwendung zu überwachen, die aus den zwei Diensten my_service_a
und my_service_b
besteht. Für jeden Dienst möchten Sie einen Zählermesswert nach Monitoring exportieren, der die Anzahl der fehlgeschlagenen Anfragen angibt. Sie möchten nicht die standardmäßigen StatsD-Messwerttypen verwenden.
Eingehende collectd-Messwerte
Bevor Sie Ihre eigenen Messwerttypen definieren, müssen Sie sich mit der Struktur eines collectd-Messwerts vertraut machen und wissen, wie ein StatsD-Messwert standardmäßig benutzerdefinierten Messwerten zugeordnet wird.
Collectd-Messwerte, einschließlich StatsD-Messwerte, umfassen folgende Komponenten:
Host, Plugin, Plugin-instance, Type, Type-instance
In diesem Beispiel haben die StatsD-Messwerte, die Sie exportieren möchten, in collectd die folgenden Kennzeichnungen:
Komponente | Erwartete Werte |
---|---|
Host | Beliebig |
Plug-in | statsd |
Plug-in-Instanz | Nicht festgelegt1 |
Typ | derive 2 |
Typinstanz | [SERVICE_NAME].GET.[CODE] 3 |
[VALUE] |
Beliebiger Wert4 |
Hinweise:
1 Das StatsD-Plug-in lässt diese Komponente derzeit leer.
2 Ein StatsD-Zählermesswert wird dem collectd-Typ derive
zugeordnet.
3 Eine Typinstanz könnte beispielsweise my_service_a.GET.500
sein.
4 [VALUE] ist in der Regel ein Zeitstempel und eine Zahl mit doppelter Genauigkeit.
Die folgende Tabelle zeigt, wie dieser Messwert standardmäßig zugeordnet wird:
StatsD-Typ | StatsD-Name | Stackdriver-Messwerttyp | Messwertart | Werttyp | Messwertlabels |
---|---|---|---|---|---|
Zähler | my_service_a.GET.500 | custom.googleapis.com/statsd/derive | CUMULATIVE | INT64 | metric:my_servce_a.GET.500 |
Zähler | my_service_b.GET.403 | custom.googleapis.com/statsd/derive | CUMULATIVE | INT64 | metric:my_servce_b.GET.403 |
Die Standardzuordnung könnte Ihnen verschiedene Schwierigkeiten bereiten:
Dieser Zählermesswert (
[SERVICE_NAME].GET.[CODE]
) ist im selben benutzerdefinierten Messwerttyp wie alle anderen Zählermesswerte. Sie können nicht ohne Weiteres nur die Daten dieses Messwerts, da Stackdriver derzeit noch keine mit einem regulären Ausdruck nach Labels.Sie können nicht einfach Daten für einzelne Dienste oder einzelne Antwortcodes in Ihren Daten abrufen. Beispielsweise ist die Gesamtzahl der Fehler (aller Art), die in
my_service_a
aufgetreten sind, nicht problemlos abrufbar.Die Standardkonfiguration exportiert alle StatsD-Messwerte zu Stackdriver, was kostspielig werden könnte, wenn Sie nur an bestimmten Messwerten interessiert sind.
Messwerttyp entwerfen
Ausführliche Informationen zum Erstellen von Messwerttypen finden Sie unter Benutzerdefinierten Messwerttyp erstellen.
Der folgende benutzerdefinierte Messwerttyp ist eine sinnvolle Wahl für die Daten in da es nur den StatsD-Messwert enthält, der für Sie interessant ist, und da die Auswahl der Beschriftungen dazu beiträgt, die Daten besser zu organisieren:
- Typ:
custom.googleapis.com/http/request_errors
- Labels:
service_name
(STRING): der Name des Dienstesresponse_code
(INT64): der HTTP-Antwortcode
- Art: CUMULATIVE
- Werttyp: INT64
Die folgende Tabelle zeigt die gewünschte Zuordnung von StatsD zu Stackdriver:
StatsD-Typ | StatsD-Name | Stackdriver-Messwerttyp | Messwertart | Werttyp | Messwertlabels |
---|---|---|---|---|---|
Zähler | my_service_a.GET.500 | custom.googleapis.com/http/request_errors | CUMULATIVE | INT64 | service_name:my_service_a, response_code:500 |
Zähler | my_service_b.GET.403 | custom.googleapis.com/http/request_errors | CUMULATIVE | INT64 | service_name:my_service_b, response_code:403 |
Nachdem Sie den Messwerttyp entworfen haben, erstellen Sie ihn mit metricDescriptors.create. Informationen dazu, wie Monitoring den Messwerttyp erstellen kann finden Sie unter Messwertdeskriptoren automatisch erstellen.
Zuordnungskonfiguration
Ersetzen Sie den Inhalt der StatsD-Plug-in-Standardkonfiguration /etc/stackdriver/collectd.d/statsd.conf
durch folgenden Code, um den StatsD-Messwert in den neuen benutzerdefinierten Messwerttyp zu exportieren:
<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>
Agent neu starten
Starten Sie Ihren Agent neu, um die neue Konfiguration zu übernehmen. Führen Sie dazu folgenden Befehl auf Ihrer VM-Instanz aus:
sudo service stackdriver-agent restart
Die Informationen zu Ihren benutzerdefinierten Messwerten werden jetzt sofort an Monitoring übertragen.
Nächste Schritte
Das Anpassen des StatsD-Plug-ins erfolgt ebenso wie die Anpassung von collectd-Messwerten für Monitoring. Weitere Informationen findest du unter „Referenz und Fehlerbehebung“ unter Benutzerdefinierte Messwerte vom Agent ansehen.