Nouvelles annonces sur les technologies sans serveur et réseau ainsi que sur le RUM (Real-User Monitoring) dévoilées à la conférence Dash ! Nouvelles annonces dévoilées à la conférence Dash !

DogStatsD

La meilleure façon d’intégrer vos métriques custom d’application à Datadog consiste à les envoyer à DogStatsD, un service d’agrégation de métriques fourni avec l’Agent Datadog. DogStatsD exécute le protocole StatsD en apportant quelques extensions spécifiques à Datadog :

  • Type de métrique histogram
  • Checks de service
  • Événements
  • Tagging

Vous pouvez utiliser n’importe quel client StatsD conforme avec DogStatsD et l’Agent. Cependant, vous ne pourrez pas tirer profit des extensions Datadog.

Remarque : DogStatsD n’implémente PAS les minuteurs de StatsD en tant que type de métrique native (bien qu’il les prend en charge par l’intermédiaire des histogrammes).

Fonctionnement

DogStatsD accepte les métriques custom, les événements et les checks de service par le biais du protocole UDP. Il les agrège et les transmet régulièrement à Datadog.

Grâce au protocole UDP, votre application peut envoyer des métriques à DogStatsD et reprendre sa tâche sans attendre de réponse. Si jamais DogStatsD devient indisponible, votre application continue à fonctionner sans interruption.

Lorsque DogStatsD reçoit des données, il agrège de nombreux points de données pour chaque métrique en un point de données unique sur une période désignée par le terme intervalle de transmission (par défaut, dix secondes).

Implémentation

DogStatsD est activé par défaut sur le port UDP 8125 à partir de la version 6 de l’Agent. Si vous ne devez pas changer ce port, passez directement à la configuration de DogStatsD dans votre code. Vous pouvez également consulter la documentation relative à la configuration de DogStatsD pour Docker et Kubernetes

Agent

Par défaut, DogStatsD effectue une écoute sur le port UDP 8125. Pour modifier ce réglage, configurez l’option dogstatsd_port dans le fichier de configuration principal de l’Agent et redémarrez l’Agent. Vous pouvez également configurer DogStatsD afin d’utiliser un socket de domaine Unix. Pour activer un port UDP personnalisé pour un serveur DogStatsD de l’Agent :

  1. Modifiez votre fichier datadog.yaml en supprimant la mise en commentaire des paramètres use_dogstatsd et dogstatsd_port :

    ## @param use_dogstatsd - boolean - optional - default: true
    ## Set this option to false to disable the Agent DogStatsD server.
    #
    use_dogstatsd: true
    
    ## @param dogstatsd_port - integer - optional - default: 8125
    ## Override the Agent DogStatsD port.
    ## Note: Make sure your client is sending to the same UDP port.
    #
    dogstatsd_port: 8125
  2. Redémarrez votre Agent.

Code

Installer le client DogStatsD

Il existe des bibliothèques client DogStatsD officielles pour les langages suivants. Vous pouvez utiliser n’importe quel client StatsD générique pour envoyer des métriques à DogStatsD, mais vous ne pourrez pas utiliser toutes les fonctionnalités de Datadog mentionnées ci-dessus :

$ pip install datadog
$ gem install dogstatsd-ruby
$ go get github.com/DataDog/datadog-go/statsd

Le client Java StatsD Datadog est distribué avec Maven Central et peut être téléchargé depuis Maven. Commencez par ajouter la configuration suivante à votre fichier pom.xml :

<dependency>
    <groupId>com.datadoghq</groupId>
    <artifactId>java-dogstatsd-client</artifactId>
    <version>2.8</version>
</dependency>

Ajoutez ce qui suit à votre fichier composer.json :

"datadog/php-datadogstatsd": "1.4.*"

Remarque : la première version distribuée dans Composer est la version 0.0.3.

Vous pouvez également dupliquer manuellement le référentiel disponible sur github.com/DataDog/php-datadogstatsd et le configurer avec require './src/DogStatsd.php'.

Instancier le client DogStatsD

Une fois votre client DogStatsD installé, instanciez-le dans votre code :

from datadog import statsd

options = {
    'statsd_host':'127.0.0.1',
    'statsd_port':8125
}

initialize(**options)
# Importer la bibliothèque
require 'datadog/statsd'

# Créer une instance client DogStatsD
statsd = Datadog::Statsd.new('localhost', 8125)
dogstatsd_client, err := statsd.New("127.0.0.1:8125")
if err != nil {
    log.Fatal(err)
}

Pour découvrir toutes les options disponibles, consultez la documentation GoDoc de Datadog.

import com.timgroup.statsd.NonBlockingStatsDClient;
import com.timgroup.statsd.StatsDClient;

public class DogStatsdClient {

    public static void main(String[] args) throws Exception {

        StatsDClient Statsd = new NonBlockingStatsDClient("statsd", "localhost", 8125);

    }
}

Instanciez un nouvel objet DogStatsD avec composer :

<?php

require __DIR__ . '/vendor/autoload.php';

use DataDog\DogStatsd;

$statsd = new DogStatsd(
    array('host' => '127.0.0.1',
          'port' => 8125,
     )
  );

Configurez la classe DogStatsD :

// Le code se trouve sous l'espace de nommage StatsdClient
using StatsdClient;

// ...

var dogstatsdConfig = new StatsdConfig
{
    StatsdServerName = "127.0.0.1",
    StatsdPort = 8125,
};

StatsdClient.DogStatsd.Configure(dogstatsdConfig);

Paramètres d’instanciation du client

En plus de la configuration DogStatsD obligatoire (url et port), vous pouvez configurer les paramètres facultatifs suivants pour votre client DogStatsD :

ParamètreTypeValeur par défautDescription
statsd_hostChaînelocalhostLe host de votre serveur DogStatsD.
statsd_portNombre entier8125Le port de votre serveur DogStatsD.
statsd_socket_pathChaînenullLe chemin vers le socket de domaine UNIX de DogStatsD (remplace host et port, uniquement pris en charge avec les versions 6 et ultérieures de l’Agent).
statsd_constant_tagsListe de chaînesnullLes tags à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.
statsd_namespaceChaînenullL’espace de nommage à ajouter devant le nom de chaque métrique, événement et check de service.

Pour en savoir plus, consultez la documentation relative au module DogStatsD.

ParamètreTypeValeur par défautDescription
hostChaînelocalhostLe host de votre serveur DogStatsD.
portNombre entier8125Le port de votre serveur DogStatsD.
socket_pathChaînenullLe chemin vers le socket de domaine UNIX de DogStatsD (remplace host et port, uniquement pris en charge avec les versions 6 et ultérieures de l’Agent).
tagsListe de chaînesnullLes tags à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.
namespaceChaînenullL’espace de nommage à ajouter devant le nom de chaque métrique, événement et check de service.
ParamètreTypeDescription
NamespaceChaîneL’espace de nommage à ajouter devant le nom de chaque métrique, événement et check de service.
TagsListe de chaînesLes tags globaux à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.
BufferedBooléenUtilisé pour regrouper plusieurs messages DogStatsD dans une seule charge utile. Lorsque ce paramètre est défini sur true, les messages sont mis en mémoire tampon jusqu’à ce que la taille totale de la charge utile dépasse MaxMessagesPerPayload  ou 100 ms après le démarrage de la création de la charge utile.
MaxMessagesPerPayloadNombre entierLe nombre maximum de métriques, d’événements et/ou de checks de service qu’une charge utile peut contenir. Cette option est active uniquement lorsque le client est mis en mémoire tampon.
AsyncUDSBooléenUtilisé pour basculer entre les modes async et blocking pour UDS. Le mode blocking permet la vérification d’erreurs peut entraîner le blocage de l’exécution par certains appels.
WriteTimeoutUDSNombre entierLe délai avant l’abandon d’un paquet UDS.

Pour découvrir toutes les options disponibles, consultez la documentation GoDoc de Datadog.

ParamètreTypeDescription
prefixChaîneLe préfixe à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.
hostnameChaîneLe nom de host du serveur StatsD ciblé.
portNombre entierLe port du serveur StatsD ciblé.
constantTagsListe de chaînesLes tags globaux à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.

Pour en savoir plus, consultez la documentation relative à la classe NonBlockingStatsDClient.

ParamètreTypeValeur par défautDescription
hostChaînelocalhostLe host de votre serveur DogStatsD. S’il n’est pas défini, l’Agent utilise la variable d’environnement DD_AGENT_HOST.
portNombre entier8125Le port de votre serveur DogStatsD. S’il n’est pas défini, l’Agent utilise la variable d’environnement DD_DOGSTATSD_PORT.
socket_pathChaînenullLe chemin vers le socket de domaine UNIX de DogStatsD (remplace host et port). Il est uniquement pris en charge avec les versions 6 et ultérieures de l’Agent.
global_tagsListe de chaînesnullLes tags à appliquer à toutes les métriques, à tous les événements et à tous les checks de service. Le tag @dd.internal.entity_id est ajouté à global_tags depuis la variable d’environnement DD_ENTITY_ID.
ParamètreTypeValeur par défautDescription
StatsdServerNameChaînelocalhostLe nom de host du serveur StatsD ciblé.
StatsdPortNombre entier8125Le port du serveur StatsD ciblé.
PrefixChaînenullLe préfixe à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.
ConstantTagsListe de chaînesnullLes tags globaux à appliquer à toutes les métriques, à tous les événements et à tous les checks de service.

Découvrir DogStatsD

DogStatsD et StatsD sont assez semblables. Toutefois, DogStatsD comprend des fonctionnalités avancées propres à Datadog, y compris les types de données, les événements, les checks de service et les tags disponibles :


Si vous souhaitez approfondir vos connaissances sur le format des datagrammes utilisé par DogStatsD, ou concevoir votre propre bibliothèque Datadog, consultez la section Datagramme et interface système, qui décrit également comment envoyer des métriques et des événements directement depuis la ligne de commande.