Schéma JSON des requêtes

Le format global du REQUEST_SCHEMA est un array composé d’une ou de plusieurs requests :


   "requests": [
        {
            "formulas": [
                {
                    "formula": "per_hour(query)"
                },
                {
                    "formula": "query1"
                },
                {
                    "formula": "query1 / 100"
                }
            ],
            "queries": [
                {
                    "data_source": "metrics",
                    "name": "query",
                    "query": "avg:system.load.5{*}"
                },
                {
                    "data_source": "logs",
                    "name": "query1",
                    "search": {
                        "query": "status:error"
                    },
                    "indexes": [
                        "*"
                    ],
                    "compute": {
                        "aggregation": "count"
                    },
                    "group_by": []
                }
            ]

Fonctions

Vous pouvez appliquer des fonctions au résultat de chaque requête.

Si vous souhaitez en savoir plus sur les fonctions, des séries d’exemples sont disponibles depuis la page Fonctions.

Méthode d’agrégation

Dans la plupart des cas, le nombre de points de données disponibles dépasse le nombre maximum pouvant être affiché à l’écran. Pour remédier à ce problème, les données sont agrégées selon l’une des quatre méthodes disponibles : moyenne, max, min et somme.

Métriques

Vos sources de données, à savoir les métriques, les logs ou encore les traces, sont le point focal des graphiques. Vous trouverez la liste des métriques disponibles sur la page de résumé des métriques. Cliquez sur une métrique pour l’examiner plus en détail et visualiser le type de données recueillies, les unités, les tags, les hosts et plus encore.

Contexte

Définissez un contexte pour filtrer une série. Il peut s’agir d’un host, d’un appareil sur un host ou d’un tag quelconque composé de caractères alphanumériques, de deux-points et de tirets bas ([a-zA-Z0-9:_]+).

Exemples de contextes et leurs significations :

ContexteSignification
host:my_hostRelatif à un host donné.
host:my_host, device:my_deviceRelatif à un appareil donné sur un host donné.
source:my_sourceRelatif à une source donnée.
my_tagRelatif à un groupe de hosts tagué.
my:tagIdentique à ci-dessus.
*Wildcard pour tout.

Groupes

Les données pour une même métrique peuvent provenir de plusieurs hosts différents. Les données issues de tous les hosts sont généralement agrégées de façon à obtenir une seule valeur pour chaque intervalle de temps. Vous pouvez les décomposer en spécifiant un tag quelconque. Pour obtenir un point de données distinct pour chaque host, utilisez [host] au sein de votre groupe.

Opérations arithmétiques

Vous pouvez appliquer des opérations arithmétiques simples à une série (+, -, * et /).

L’exemple suivant permet de représenter graphiquement la charge mesurée sur 5 minutes ainsi que son double :

{
    "viz": "timeseries",
    "requests": [
        {
            "formulas": [
                {
                    "formula": "query1"
                },
                {
                    "formula": "2 * query1"
                }
            ],
            "queries": [
                {
                    "data_source": "metrics",
                    "name": "query1",
                    "query": "avg:system.load.5{*}"
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "solid",
                "width": "normal"
            }
        }
    ],
    "yaxis": {
        "scale": "linear",
        "min": "auto",
        "max": "auto",
        "include_zero": true,
        "label": ""
    },
    "markers": []
}

Vous pouvez également additionner, soustraire, multiplier et diviser une série. Remarque : aucune cohérence n’est imposée par Datadog ; vous pouvez donc diviser une métrique « pommes » par une métrique « oranges ».

{"viz": "timeseries", "requests": [{"q": "metric{pommes} / metric{oranges}"}]}

Scénarios

Graphique JSON

Voici le JSON correspondant à l’exemple ci-dessus. Il permet de représenter la moyenne average des octets réseau reçus pour un appareil et un host spécifiques, avec un regroupement par compte.

"requests": [
        {
            "formulas": [
                {
                    "formula": "query1"
                }
            ],
            "queries": [
                {
                    "data_source": "metrics",
                    "name": "query1",
                    "query": "avg:system.net.bytes_rcvd{device:eth0,host:dsg-demo-1} by {account}"
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "solid",
                "width": "normal"
            }
        }
    ]
Exemple de taux

Voici un exemple avec la fonction rate(), qui accepte uniquement comme paramètre une seule métrique :

    "viz": "timeseries",
    "requests": [
        {
            "formulas": [
                {
                    "formula": "per_hour(query1)"
                }
            ],
            "queries": [
                {
                    "data_source": "metrics",
                    "name": "query1",
                    "query": "avg:system.load.5{*} by {host}"
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "solid",
                "width": "normal"
            }
        }
    ]

Voici le même exemple sous la forme de top list :

{
    "viz": "toplist",
    "requests": [
        {
            "formulas": [
                {
                    "limit": {
                        "count": 10,
                        "order": "desc"
                    },
                    "formula": "query1"
                }
            ],
            "queries": [
                {
                    "data_source": "metrics",
                    "name": "query1",
                    "query": "avg:system.load.5{role:db} by {host}",
                    "aggregator": "avg"
                }
            ],
            "response_format": "scalar",
            "conditional_formats": []
        }
    ]
}

Voici un exemple qui utilise la fonction de décalage temporel week_before() :

    "viz": "timeseries",
    "requests": [
        {
            "formulas": [
                {
                    "formula": "week_before(query1)"
                }
            ],
            "queries": [
                {
                    "data_source": "logs",
                    "name": "query1",
                    "search": {
                        "query": ""
                    },
                    "indexes": [
                        "*"
                    ],
                    "compute": {
                        "aggregation": "count"
                    },
                    "group_by": []
                }
            ],
            "response_format": "timeseries",
            "type": "line"
        }
    ]

L’exemple ci-dessous permet de représenter un ratio des logs error par rapport aux logs info, puis d’appliquer une fonction de décalage temporel.

Exemple de ratio
{
    "viz": "timeseries",
    "requests": [
        {
            "formulas": [
                {
                    "formula": "query1 / query2",
                    "alias": "Ratio of Error to Info"
                },
                {
                    "formula": "week_before(query1 / query2)"
                }
            ],
            "queries": [
                {
                    "data_source": "logs",
                    "name": "query1",
                    "search": {
                        "query": "status:error"
                    },
                    "indexes": [
                        "*"
                    ],
                    "compute": {
                        "aggregation": "count"
                    },
                    "group_by": []
                },
                {
                    "data_source": "logs",
                    "name": "query2",
                    "search": {
                        "query": "status:info"
                    },
                    "indexes": [
                        "*"
                    ],
                    "compute": {
                        "aggregation": "count"
                    },
                    "group_by": []
                }
            ],
            "response_format": "timeseries",
            "type": "line",
            "style": {
                "palette": "dog_classic",
                "type": "solid",
                "width": "normal"
            }
        }
    ],
    "yaxis": {
        "scale": "linear",
        "min": "auto",
        "max": "auto",
        "include_zero": true,
        "label": ""
    },
    "markers": []
}

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: