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
StatsD wird von Monitoring nicht automatisch erkannt. 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 Messwerttypen und -namen von StatsD den benutzerdefinierten Messwerten von Monitoring zugeordnet werden:
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. Eine Einführung in Messwerte finden Sie unter 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. So besteht die Möglichkeit, Messwerte durch einen bestimmten Namen zu identifizieren und einen anderen benutzerdefinierten Messwerttyp für diese zu verwenden.
Wenn Sie die benutzerdefinierten Messwerttypen ändern, können Sie auch die Labels ändern, die jedem Typ zugeordnet sind. 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 angesiedelt. Sie können nicht einfach nur die Daten dieses Messwerts abrufen, da Stackdriver derzeit keine Suchvorgänge mit regulären Ausdrücken für Labels unterstützt.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 diesem Beispiel, da er nur den StatsD-Messwert enthält, der Sie interessiert, und die gewählten Labels zur besseren Organisation der Daten beitragen:
- 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 Sie Monitoring den Messwerttyp für Sie erstellen lassen können, 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 finden Sie in den Abschnitten „Referenz und Best Practices“ und „Fehlerbehebung“ unter Benutzerdefinierte Messwerte vom Agent.