StatsD est un protocole d'envoi de métriques et un daemon pour l'agrégation de données métriques. Configurer le plug-in StatsD de l'agent Monitoring conduit à faire fonctionner l'agent comme un daemon StatsD qui écrit des métriques dans Monitoring.
Le moyen le plus simple d'importer vos métriques définies par l'utilisateur dans Monitoring consiste à utiliser le plug-in StatsD avec sa configuration par défaut. Le plug-in StatsD n'est disponible que dans l'agent Stackdriver Monitoring pour Linux.
L'agent Monitoring peut également exporter d'autres métriques collectd en tant que métriques définies par l'utilisateur, mais il n'existe pas de configuration par défaut simple. Pour en savoir plus, consultez Métriques définies par l'utilisateur à partir de l'agent.
Cette fonctionnalité n'est disponible que pour les agents exécutés sous Linux. Elle n'est pas disponible sous Windows.
Discovery
Monitoring ne détecte pas automatiquement StatsD. Pour utiliser les métriques StatsD, configurez le plug-in StatsD comme décrit dans la section suivante.
Configurer le plug-in StatsD
Prérequis
Le plug-in StatsD requiert la version 5.5.2-356 ou une version ultérieure de l'agent Monitoring. Pour mettre à jour l'agent, reportez-vous à la section Mettre à jour l'agent.
Activer le plug-in
Effectuez les opérations suivantes sur votre instance de VM compatible sous Linux :
Téléchargez le fichier statsd.conf et placez-le dans le répertoire
/etc/stackdriver/collectd.d/à l'aide de la commande suivante :(cd /etc/stackdriver/collectd.d/ && sudo curl -O https://raw.githubusercontent.com/Stackdriver/stackdriver-agent-service-configs/master/etc/collectd.d/statsd.conf)Le fichier de configuration par défaut demande à l'agent d'accepter les métriques StatsD sur le port StatsD par défaut, 8125.
Si vous souhaitez envoyer certaines métriques vers votre daemon StatsD et d'autres métriques au daemon StatsD de l'agent, modifiez les paramètres de port dans le fichier de configuration.
Redémarrez l'agent Monitoring pour récupérer la configuration StatsD en exécutant la commande suivante :
sudo service stackdriver-agent restart
Pour plus d'informations sur le plug-in statsd collectd, consultez la section Plug-in:StatsD.
Mappage par défaut aux métriques définies par l'utilisateur
Pour vous aider à démarrer rapidement, le plug-in StatsD de l'agent est fourni avec une configuration collectd par défaut qui mappe les métriques StatsD avec les métriques définies par l'utilisateur Stackdriver :
Toutes les métriques du plug-in StatsD contiennent
statsddans le composant collectdplugin.Chaque type de métrique StatsD, contenu dans le composant
typecollectd, possède un nom de type de métrique défini par l'utilisateur correspondant.Le nom de la métrique StatsD, contenu dans le composant collectd
type_instance, est stocké en tant que valeur d'un libellé appelémetric.La valeur du libellé
metricest différente pour le type de métriqueTimer: elle comprend à la fois le nom de la métrique et un nom de compteur : "average" (moyenne), "upper" (supérieure) "lower" (inférieure), "sum" (somme), "percentile-50" (50e centile) et "percentile-95" (95e centile).
Par exemple, le tableau suivant montre comment les types de métriques StatsD acceptés et le nom de la métrique sont mappés aux métriques définies par l'utilisateur de Monitoring :
| Type StatsD | Nom StatsD | Type de métrique Stackdriver | Type de métrique | Type de valeur | Libellé(s) de la métrique |
|---|---|---|---|---|---|
| Counter | my.counter | custom.googleapis.com/statsd/derive | Cumulé | Int64 | metric:my.counter |
| Gauge | my.gauge | custom.googleapis.com/statsd/gauge | Jauge | Double | metric:my.gauge |
| Set | my.set | custom.googleapis.com/statsd/objects | Jauge | Double | metric:my.set |
| Timer1 | my.timer | custom.googleapis.com/statsd/latency | Jauge | Double | metric:my.timer-average |
| (identique) | (identique) | (identique) | metric:my.timer-upper | ||
| (identique) | (identique) | (identique) | metric:my.timer-lower | ||
| (identique) | (identique) | (identique) | metric:my.timer-sum | ||
| (identique) | (identique) | (identique) | metric:my.timer-percentile-50 | ||
| (identique) | (identique) | (identique) | metric:my.timer-percentile-95 | ||
| custom.googleapis.com/statsd/gauge | Jauge | (identique) | metric:my.timer-count |
Remarques :
1 Il existe une séquence entrante de métriques statistiques statsd du même nom. L'agent agrège les métriques StatsD de type timer et exporte les données récapitulatives vers 7 séries temporelles différentes.
Pour en savoir plus sur les types StatsD, consultez la Spécification StatsD.
Personnaliser les métriques exportées
La configuration par défaut de StatsD est conçue pour vous permettre de démarrer rapidement. Cette section vous aide à personnaliser la configuration pour répondre à des besoins plus complexes.
Vous devez connaître les métriques définies par l'utilisateur. Pour une présentation des métriques, consultez Métriques, séries temporelles et ressources. Pour en savoir plus, consultez Présentation des métriques définies par l'utilisateur.
Vous pouvez personnaliser les éléments suivants :
Vous pouvez modifier les valeurs affectées au libellé
metricpar défaut. Si vous utilisez plus de valeurs de libellés, vous aurez plus de séries temporelles dans votre métrique définie par l'utilisateur. Si vous utilisez moins de valeurs de libellés, vous aurez moins de séries temporelles.Vous pouvez modifier les types de métriques définies par l'utilisateur. Vous n'avez pas besoin d'utiliser les types prédéfinis fournis dans la configuration par défaut. Par exemple, vous pouvez identifier les métriques portant un certain nom et utiliser un autre type de métrique défini par l'utilisateur pour celles-ci.
Si vous modifiez les types de métriques définies par l'utilisateur, vous pouvez également modifier les libellés associés à chaque type. La configuration par défaut comporte un seul libellé, mais vous pouvez en ajouter d'autres ou modifier la clé du libellé.
Si vous modifiez les types de métriques, vous devez définir vos nouveaux types de métriques définies par l'utilisateur dans l'API Monitoring. Pour en savoir plus, consultez la section Concevoir un type de métrique.
Exemple
Supposons que vous utilisez StatsD pour surveiller une application composée de deux services, my_service_a et my_service_b. Pour chaque service, vous voulez exporter dans Monitoring une métrique de type compteur qui représente le nombre de requêtes ayant échoué. Vous ne voulez pas utiliser les types de métriques StatsD par défaut.
Métriques collectd entrantes
Avant de définir vos propres types de métriques, il est important de comprendre la structure d'une métrique collectd et la façon dont une métrique StatsD est mappée par défaut dans les métriques définies par l'utilisateur.
Les métriques collectd, en particulier les métriques StatsD, incluent les composants suivants :
Host, Plugin, Plugin-instance, Type, Type-instance
Dans cet exemple, les métriques StatsD que vous souhaitez exporter correspondent aux identifiants suivants dans collectd :
| Composant | Valeur(s) attendue(s) |
|---|---|
| Hôte | tous |
| Plug-in | statsd |
| Instance de plug-in | non défini1 |
| Type | derive2 |
| Type instance | [SERVICE_NAME].GET.[CODE]3 |
[VALUE] |
toute valeur4 |
Remarques :
1 Ce composant est actuellement laissé vide par le plug-in StatsD.
2 Une métrique de compteur StatsD est mappée avec le type collectd derive.
3 Par exemple, une instance de type peut être my_service_a.GET.500.
4 [VALUE] est généralement un horodatage et un nombre au format double précision.
Le tableau suivant montre comment cette métrique serait mappée par défaut :
| Type StatsD | Nom StatsD | Type de métrique Stackdriver | Type de métrique | Type de valeur | Libellés de la métrique |
|---|---|---|---|---|---|
| Nombre | my_service_a.GET.500 | custom.googleapis.com/statsd/derive | Cumulé | Int64 | metric:my_servce_a.GET.500 |
| Nombre | my_service_b.GET.403 | custom.googleapis.com/statsd/derive | Cumulé | Int64 | metric:my_servce_b.GET.403 |
Le mappage par défaut peut présenter quelques difficultés pour vous :
Cette métrique de compteur spécifique (
[SERVICE_NAME].GET.[CODE]) appartient au même type de métrique défini par l'utilisateur que toutes les autres métriques de compteur. Vous ne pouvez pas obtenir facilement les données de cette métrique, car Stackdriver ne permet pas actuellement les recherches par expressions régulières sur les libellés.Vous ne pouvez pas facilement obtenir des données pour des services individuels ou des codes de réponse individuels dans vos données. Par exemple, vous ne pouvez pas obtenir facilement le nombre total d'erreurs (tous types confondus) survenues dans
my_service_a.La configuration par défaut exporte toutes les métriques StatsD vers Stackdriver, ce qui peut être coûteux si vous n'êtes intéressé que par certaines métriques.
Concevoir un type de métrique
Pour en savoir plus sur la création de types de métriques, consultez Créer un type de métrique défini par l'utilisateur.
Le type de métrique défini par l'utilisateur suivant est un choix raisonnable pour les données de cet exemple, car il ne contient que la métrique StatsD qui vous intéresse et parce que son choix d'étiquettes permet de mieux organiser les données :
- Type :
custom.googleapis.com/http/request_errors - Libellés :
service_name(STRING) : nom du service.response_code(INT64) : code de réponse HTTP.
- Type de métrique : CUMULÉ
- Type de valeur : INT64
Le tableau suivant montre le mappage souhaité entre StatsD et Stackdriver :
| Type StatsD | Nom StatsD | Type de métrique Stackdriver | Type de métrique | Type de valeur | Libellés de la métrique |
|---|---|---|---|---|---|
| Nombre | my_service_a.GET.500 | custom.googleapis.com/http/request_errors | Cumulé | Int64 | service_name:my_service_a, response_code:500 |
| Nombre | my_service_b.GET.403 | custom.googleapis.com/http/request_errors | Cumulé | Int64 | service_name:my_service_b, response_code:403 |
Une fois que vous avez défini le type de métrique, vous pouvez le créer à l'aide de metricDescriptors.create. Pour savoir comment laisser Monitoring créer le type de métrique pour vous, consultez Création automatique de descripteurs de métriques.
Configuration du mappage
Pour exporter la métrique StatsD vers le nouveau type de métrique défini par l'utilisateur, remplacez le contenu de la configuration du plug-in StatsD par défaut, /etc/stackdriver/collectd.d/statsd.conf, par le code suivant :
<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>
Redémarrer l'agent
Pour rendre la nouvelle configuration effective, redémarrez l'agent en exécutant la commande suivante sur l'instance de VM :
sudo service stackdriver-agent restart
Les informations de votre métrique définie par l'utilisateur commencent à être transmises à Monitoring immédiatement.
Étapes suivantes
La personnalisation du plug-in StatsD s'effectue de la même manière que la personnalisation des métriques collectd pour Monitoring. Pour en savoir plus, consultez les sections "Référence" et "Dépannage" de Métriques définies par l'utilisateur à partir de l'agent.