Envío de métricas: DogStatsD
Mientras que StatsD acepta solo métricas, DogStatsD acepta los tres tipos de datos principales de Datadog: métricas, eventos y verificaciones de servicio. Esta sección muestra casos de uso típicos para métricas desglosadas por tipos de métricas, e introduce tasas de muestreo y opciones de etiquetado de métricas específicas de DogStatsD.
Los tipos de métricas COUNT, GAUGE y SET son familiares para los usuarios de StatsD. TIMER de StatsD es un subconjunto de HISTOGRAM en DogStatsD. Además, puedes enviar tipos de métricas HISTOGRAMA y DISTRIBUCIÓN utilizando DogStatsD.
Nota: Dependiendo del método de envío utilizado, el tipo de métrica real almacenado en Datadog puede diferir del tipo de métrica enviado. Para obtener métricas de TASA a través de DogStatsD, envía ya sea una métrica COUNT o HISTOGRAM. Los valores de las métricas COUNT y de <HISTOGRAM>.count son deltas normalizados en el tiempo del valor de la métrica durante el período de vaciado de StatsD.
Funciones
Después de que instales DogStatsD, las siguientes funciones están disponibles para enviar tus métricas a Datadog dependiendo de su tipo de métrica. Las funciones tienen los siguientes parámetros compartidos:
| Parámetro | Tipo | Requerido | Descripción |
|---|
<METRIC_NAME> | Cadena | Sí | Nombre de la métrica a enviar. |
<METRIC_VALUE> | Double | Yes | Valor asociado con tu métrica. |
<SAMPLE_RATE> | Doble | No | La tasa de muestreo que se aplicará a la métrica. Toma un valor entre 0 (todo se muestrea, por lo que no se envía nada) y 1 (sin muestreo). Consulta la sección Tasa de Muestreo para aprender más. |
<TAGS> | Lista de cadenas | No | Una lista de etiquetas para aplicar a la métrica. Consulta la sección Etiquetado de Métricas para aprender más. |
<CARDINALITY> | Enum | No | La cardinalidad de etiquetas para asignar a esta métrica. |
COUNT
increment(<METRIC_NAME>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY> )- Se utiliza para incrementar una métrica COUNT. Almacenado como un tipo
RATE en Datadog. Cada valor en las series temporales almacenadas es un delta normalizado en el tiempo del valor de la métrica durante el período de vaciado de StatsD. decrement(<METRIC_NAME>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Se utiliza para decrementar una métrica COUNT. Almacenado como un tipo
RATE en Datadog. Cada valor en las series temporales almacenadas es un delta normalizado en el tiempo del valor de la métrica durante el período de vaciado de StatsD. count(<METRIC_NAME>, <METRIC_VALUE>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Se utiliza para incrementar una métrica COUNT de un
Value arbitrario. Almacenado como un tipo RATE en Datadog. Cada valor en las series temporales almacenadas es un delta normalizado en el tiempo del valor de la métrica durante el período de vaciado de StatsD.
Nota: Las métricas de tipo COUNT pueden mostrar un valor decimal dentro de Datadog ya que están normalizadas durante el intervalo de vaciado para reportar unidades por segundo.
Ejemplos de código
Envía una métrica COUNT almacenada como una métrica RATE a Datadog. Aprende más sobre el tipo COUNT en la documentación de tipos de métricas.
Ejecuta el siguiente código para enviar una métrica DogStatsD COUNT a Datadog. Recuerda flush/close al cliente cuando ya no sea necesario.
from datadog import initialize, statsd
import time
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
while(1):
statsd.increment('example_metric.increment', tags=["environment:dev"])
statsd.decrement('example_metric.decrement', tags=["environment:dev"])
time.sleep(10)
Nota: statsd.count no es compatible en Python.
require 'datadog/statsd'
statsd = Datadog::Statsd.new('localhost', 8125, tags: ['environment:dev'])
while true do
statsd.increment('example_metric.increment')
statsd.increment('example_metric.increment', tags: ['another:tag'])
statsd.decrement('example_metric.decrement')
statsd.count('example_metric.count', 2)
sleep 10
end
package main
import (
"log"
"time"
"github.com/DataDog/datadog-go/v5/statsd"
)
func main() {
statsd, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
for true {
statsd.Incr("example_metric.increment", []string{"environment:dev"}, 1)
statsd.Decr("example_metric.decrement", []string{"environment:dev"}, 1)
statsd.Count("example_metric.count", 2, []string{"environment:dev"}, 1)
time.Sleep(10 * time.Second)
}
}
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import java.util.Random;
public class DogStatsdClient {
public static void main(String[] args) throws Exception {
StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
.prefix("statsd")
.hostname("localhost")
.port(8125)
.build();
while (true) {
Statsd.incrementCounter("example_metric.increment", new String[]{"environment:dev"});
Statsd.decrementCounter("example_metric.decrement", new String[]{"environment:dev"});
Statsd.count("example_metric.count", 2, new String[]{"environment:dev"});
Thread.sleep(100000);
}
}
}
using StatsdClient;
using System;
public class DogStatsdClient
{
public static void Main()
{
var dogstatsdConfig = new StatsdConfig
{
StatsdServerName = "127.0.0.1",
StatsdPort = 8125,
};
using (var dogStatsdService = new DogStatsdService())
{
if (!dogStatsdService.Configure(dogstatsdConfig))
throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
var random = new Random(0);
while (true)
{
dogStatsdService.Increment("example_metric.increment", tags: new[] {"environment:dev"}, cardinality: Cardinality.Low);
dogStatsdService.Decrement("example_metric.decrement", tags: new[] {"environment:dev"}, cardinality: Cardinality.High);
dogStatsdService.Counter("example_metric.count", 2, tags: new[] {"environment:dev"});
System.Threading.Thread.Sleep(random.Next(100000));
}
}
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
while (TRUE) {
$statsd->increment('example_metric.increment', 1, array('environment'=>'dev'), 'low');
$statsd->decrement('example_metric.decrement', 1, array('environment'=>'dev'), 'high');
sleep(10);
}
const tracer = require('dd-trace');
tracer.init();
tracer.dogstatsd.increment('example_metric.increment', 1, { environment: 'dev' });
tracer.dogstatsd.decrement('example_metric.decrement', 1, { environment: 'dev' });
Después de ejecutar el código anterior, sus datos de métricas están disponibles para graficar en Datadog:
Dado que el valor se envía como un COUNT, se almacena como RATE en Datadog. Para obtener conteos brutos dentro de Datadog, aplica una función a tu serie como la función Suma Acumulativa o Integral:
GAUGE
gauge(<METRIC_NAME>, <METRIC_VALUE>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Almacenado como un tipo
GAUGE en Datadog. Cada valor en las series temporales almacenadas es el último valor de gauge enviado para la métrica durante el período de vaciado de StatsD.
Ejemplos de código
Envía una métrica GAUGE almacenada como una métrica GAUGE a Datadog. Aprende más sobre el tipo GAUGE en la documentación de tipos de métricas.
Ejecuta el siguiente código para enviar una métrica DogStatsD GAUGE a Datadog. Recuerda flush/close al cliente cuando ya no sea necesario.
Nota: Las llamadas de envío de métricas son asincrónicas. Si deseas asegurarte de que las métricas se envíen, llama a flush antes de que el programa finalice.
from datadog import initialize, statsd
import time
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
i = 0
while(1):
i += 1
statsd.gauge('example_metric.gauge', i, tags=["environment:dev"], cardinality="low")
time.sleep(10)
require 'datadog/statsd'
statsd = Datadog::Statsd.new('localhost', 8125)
i = 0
while true do
i += 1
statsd.gauge('example_metric.gauge', i, tags: ['environment:dev'], cardinality: 'low')
sleep 10
end
package main
import (
"log"
"time"
"github.com/DataDog/datadog-go/v5/statsd"
)
func main() {
statsd, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
var i float64
for true {
i += 1
statsd.Gauge("example_metric.gauge", i, []string{"environment:dev"}, 1, CardinalityHigh)
time.Sleep(10 * time.Second)
}
}
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import java.util.Random;
public class DogStatsdClient {
public static void main(String[] args) throws Exception {
StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
.prefix("statsd").
.hostname("localhost")
.port(8125)
.build();
for (int i = 0; true; i++) {
Statsd.recordGaugeValue("example_metric.gauge", i, new String[]{"environment:dev"});
Thread.sleep(10000);
}
}
}
using StatsdClient;
using System;
public class DogStatsdClient
{
public static void Main()
{
var dogstatsdConfig = new StatsdConfig
{
StatsdServerName = "127.0.0.1",
StatsdPort = 8125,
};
using (var dogStatsdService = new DogStatsdService())
{
if (!dogStatsdService.Configure(dogstatsdConfig))
throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
var random = new Random(0);
for (int i = 0; true; i++)
{
dogStatsdService.Gauge("example_metric.gauge", i, tags: new[] {"environment:dev"}, cardinality: Cardinality.High);
System.Threading.Thread.Sleep(100000);
}
}
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
$i = 0;
while (TRUE) {
$i++;
$statsd->gauge('example_metric.gauge', $i, array('environment'=>'dev'), 'low');
sleep(10);
}
const tracer = require('dd-trace');
tracer.init();
let i = 0;
while(true) {
i++;
tracer.dogstatsd.gauge('example_metric.gauge', i, { environment: 'dev' });
}
Después de ejecutar el código anterior, tus datos de métricas están disponibles para graficar en Datadog:
ESTABLECER
set(<METRIC_NAME>, <METRIC_VALUE>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Almacenado como un tipo
GAUGE en Datadog. Cada valor en las series temporales almacenadas es el conteo de valores únicos enviados a StatsD para una métrica durante el período de vaciado.
Ejemplos de código
Envía una métrica SET almacenada como una métrica GAUGE a Datadog.
Ejecuta el siguiente código para enviar una métrica DogStatsD SET a Datadog. Recuerda flush/close al cliente cuando ya no sea necesario.
from datadog import initialize, statsd
import time
import random
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
i = 0
while(1):
i += 1
statsd.set('example_metric.set', i, tags=["environment:dev"])
time.sleep(random.randint(0, 10))
require 'datadog/statsd'
statsd = Datadog::Statsd.new('localhost', 8125)
i = 0
while true do
i += 1
statsd.set('example_metric.gauge', i, tags: ['environment:dev'])
sleep rand 10
end
package main
import (
"fmt"
"log"
"math/rand"
"time"
"github.com/DataDog/datadog-go/v5/statsd"
)
func main() {
statsd, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
var i float64
for true {
i += 1
statsd.Set("example_metric.set", fmt.Sprintf("%f", i), []string{"environment:dev"}, 1)
time.Sleep(time.Duration(rand.Intn(10)) * time.Second)
}
}
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import java.util.Random;
public class DogStatsdClient {
public static void main(String[] args) throws Exception {
StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
.prefix("statsd").
.hostname("localhost")
.port(8125)
.build();
for (int i = 0; true; i++) {
Statsd.recordSetValue("example_metric.set", i, new String[]{"environment:dev"});
Thread.sleep(random.NextInt(10000));
}
}
}
using StatsdClient;
using System;
public class DogStatsdClient
{
public static void Main()
{
var dogstatsdConfig = new StatsdConfig
{
StatsdServerName = "127.0.0.1",
StatsdPort = 8125,
};
using (var dogStatsdService = new DogStatsdService())
{
if (!dogStatsdService.Configure(dogstatsdConfig))
throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
var random = new Random(0);
for (int i = 0; true; i++)
{
dogStatsdService.Set("example_metric.set", i, tags: new[] {"environment:dev"});
System.Threading.Thread.Sleep(random.Next(100000));
}
}
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
$i = 0;
while (TRUE) {
$i++;
$statsd->set('example_metric.set', $i, 1, array('environment'=>'dev'), 'low');
sleep(rand(0, 10));
}
Después de ejecutar el código anterior, tus datos de métricas están disponibles para graficar en Datadog:
HISTOGRAMA
histogram(<METRIC_NAME>, <METRIC_VALUE>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Dado que se envían múltiples métricas, los tipos de métricas almacenadas (
GAUGE, RATE) dependen de la métrica. Consulta la documentación del tipo de métrica HISTOGRAMA para aprender más.
Configuración
- Configura la agregación para enviar a Datadog con el parámetro
histogram_aggregates en tu archivo de configuración datadog.yaml. Por defecto, solo se envían las agregaciones max, median, avg y count. - Configura la agregación de percentiles para enviar a Datadog con el parámetro
histogram_percentiles en tu archivo de configuración datadog.yaml. Por defecto, solo se envía el percentil 95pc.
Ejemplos de código
El tipo de métrica HISTOGRAM es específico de DogStatsD. Envía una métrica HISTOGRAM—almacenada como una métrica GAUGE y RATE—a Datadog. Aprende más sobre el tipo HISTOGRAM en la documentación de tipos de métricas.
Ejecuta el siguiente código para enviar una métrica DogStatsD HISTOGRAM a Datadog. Recuerda flush/close el cliente cuando ya no sea necesario.
from datadog import initialize, statsd
import time
import random
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
while(1):
statsd.histogram('example_metric.histogram', random.randint(0, 20), tags=["environment:dev"])
time.sleep(2)
require 'datadog/statsd'
statsd = Datadog::Statsd.new('localhost', 8125)
while true do
statsd.histogram('example_metric.histogram', rand 20, tags: ['environment:dev'])
sleep 2
end
package main
import (
"log"
"math/rand"
"time"
"github.com/DataDog/datadog-go/v5/statsd"
)
func main() {
statsd, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
for true {
statsd.Histogram("example_metric.histogram", float64(rand.Intn(20)), []string{"environment:dev"}, 1)
time.Sleep(2 * time.Second)
}
}
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import java.util.Random;
public class DogStatsdClient {
public static void main(String[] args) throws Exception {
StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
.prefix("statsd").
.hostname("localhost")
.port(8125)
.build();
while (true) {
Statsd.recordHistogramValue("example_metric.histogram", new Random().nextInt(20), new String[]{"environment:dev"});
Thread.sleep(2000);
}
}
}
using StatsdClient;
using System;
public class DogStatsdClient
{
public static void Main()
{
var dogstatsdConfig = new StatsdConfig
{
StatsdServerName = "127.0.0.1",
StatsdPort = 8125,
};
using (var dogStatsdService = new DogStatsdService())
{
if (!dogStatsdService.Configure(dogstatsdConfig))
throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
var random = new Random(0);
while (true)
{
dogStatsdService.Histogram("example_metric.histogram", random.Next(20), tags: new[] {"environment:dev"}, Cardinality: Cardinality.High);
System.Threading.Thread.Sleep(2000);
}
}
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
while (TRUE) {
$statsd->histogram('example_metric.histogram', rand(0, 20), 1, array('environment'=>'dev'), 'low');
sleep(2);
}
La instrumentación anterior produce las siguientes métricas:
| Métrica | Descripción |
|---|
example_metric.histogram.count | Número de veces que se muestreó esta métrica |
example_metric.histogram.avg | Promedio de los valores muestreados |
example_metric.histogram.median | Valor muestreado mediano |
example_metric.histogram.max | Valor muestreado máximo |
example_metric.histogram.95percentile | Valor muestreado del percentil 95 |
Después de ejecutar el código anterior, tus datos de métricas están disponibles para graficar en Datadog:
TIMER
TIMER el tipo de métrica en DogStatsD es una implementación del tipo de métrica HISTOGRAM (no debe confundirse con TIMER en el StatsD estándar). Mide solo datos de tiempo: por ejemplo, la cantidad de tiempo que tarda en ejecutarse una sección de código.
timed(<METRIC_NAME>, <METRIC_VALUE>, <SAMPLE_RATE>, <TAGS>, <CARDINALITY>)- Dado que se envían múltiples métricas, los tipos de métricas almacenadas (
GAUGE, RATE) dependen de la métrica. Consulta la documentación del tipo de métrica HISTOGRAMA para aprender más.
Configuración
Para un TIMER, se aplican las reglas de configuración HISTOGRAM .
Ejemplos de código
Envía una métrica TIMER—almacenada como una métrica GAUGE y RATE—a Datadog. Aprenda más sobre el tipo HISTOGRAM en la documentación de tipos de métricas. Recuerde flush/close al cliente cuando ya no sea necesario.
En Python, los temporizadores se crean con un decorador.
from datadog import initialize, statsd
import time
import random
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
@statsd.timed('example_metric.timer', tags=["environment:dev,function:my_function"])
def my_function():
time.sleep(random.randint(0, 10))
while(1):
my_function()
o con un administrador de contexto:
from datadog import statsd
import time
import random
def my_function():
# First some stuff you don't want to time
sleep(1)
# Now start the timer
with statsd.timed('example_metric.timer', tags=["environment:dev"]):
# do something to be measured
sleep(random.randint(0, 10))
while(1):
my_function()
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
function runfunction() {
sleep(rand(0, 20));
}
while (TRUE) {
$start_time = microtime(TRUE);
runfunction();
$statsd->microtiming('example_metric.timer', microtime(TRUE) - $start_time);
}
A medida que DogStatsD recibe los datos de la métrica del temporizador, calcula la distribución estadística de los tiempos de renderizado y envía las siguientes métricas a Datadog:
| Métrica | Descripción |
|---|
example_metric.timer.count | Número de veces que se muestreó esta métrica |
example_metric.timer.avg | Tiempo promedio de los valores muestreados |
example_metric.timer.median | Valor muestreado mediano |
example_metric.timer.max | Valor muestreado máximo |
example_metric.timer.95percentile | Valor muestreado del percentil 95 |
DogStatsD trata TIMER como una métrica HISTOGRAM. Ya sea que use el tipo de métrica TIMER o HISTOGRAM, está enviando los mismos datos a Datadog. Después de ejecutar el código anterior, sus datos de métricas están disponibles para graficar en Datadog:
DISTRIBUCIÓN
distribution(<METRIC_NAME>, <METRIC_VALUE>, <TAGS>, <CARDINALITY>)- Almacenado como un tipo
DISTRIBUTION en Datadog. Consulte la documentación dedicada de Distribución para aprender más.
Ejemplos de código
El tipo de métrica DISTRIBUTION es específico de DogStatsD. Emita una métrica DISTRIBUTION—almacenada como una métrica DISTRIBUTION—a Datadog. Aprenda más sobre el tipo DISTRIBUTION en la documentación de tipos de métricas.
Ejecute el siguiente código para enviar una métrica DISTRIBUTION de DogStatsD a Datadog. Recuerde flush/close al cliente cuando ya no sea necesario.
from datadog import initialize, statsd
import time
import random
options = {
'statsd_host':'127.0.0.1',
'statsd_port':8125
}
initialize(**options)
while(1):
statsd.distribution('example_metric.distribution', random.randint(0, 20), tags=["environment:dev"])
time.sleep(2)
require 'datadog/statsd'
statsd = Datadog::Statsd.new('localhost', 8125)
while true do
statsd.distribution('example_metric.distribution', rand 20, tags: ['environment:dev'])
sleep 2
end
package main
import (
"log"
"math/rand"
"time"
"github.com/DataDog/datadog-go/v5/statsd"
)
func main() {
statsd, err := statsd.New("127.0.0.1:8125")
if err != nil {
log.Fatal(err)
}
for true {
statsd.Distribution("example_metric.distribution", float64(rand.Intn(20)), []string{"environment:dev"}, 1)
time.Sleep(2 * time.Second)
}
}
import com.timgroup.statsd.NonBlockingStatsDClientBuilder;
import com.timgroup.statsd.StatsDClient;
import java.util.Random;
public class DogStatsdClient {
public static void main(String[] args) throws Exception {
StatsDClient Statsd = new NonBlockingStatsDClientBuilder()
.prefix("statsd").
.hostname("localhost")
.port(8125)
.build();
while (true) {
Statsd.recordDistributionValue("example_metric.distribution", new Random().nextInt(20), new String[]{"environment:dev"});
Thread.sleep(2000);
}
}
}
using StatsdClient;
using System;
public class DogStatsdClient
{
public static void Main()
{
var dogstatsdConfig = new StatsdConfig
{
StatsdServerName = "127.0.0.1",
StatsdPort = 8125,
};
using (var dogStatsdService = new DogStatsdService())
{
if (!dogStatsdService.Configure(dogstatsdConfig))
throw new InvalidOperationException("Cannot initialize DogstatsD. Set optionalExceptionHandler argument in the `Configure` method for more information.");
var random = new Random(0);
while (true)
{
dogStatsdService.Distribution("example_metric.distribution", random.Next(20), tags: new[] {"environment:dev"});
System.Threading.Thread.Sleep(2000);
}
}
}
}
<?php
require __DIR__ . '/vendor/autoload.php';
use DataDog\DogStatsd;
$statsd = new DogStatsd(
array('host' => '127.0.0.1',
'port' => 8125,
)
);
while (TRUE) {
$statsd->distribution('example_metric.distribution', rand(0, 20), 1, array('environment'=>'dev'), 'high');
sleep(2);
}
const tracer = require('dd-trace');
tracer.init();
while(true) {
tracer.dogstatsd.distribution('example_metric.distribution', Math.random() * 20, { environment: 'dev' });
await new Promise(r => setTimeout(r, 2000));
}
La instrumentación anterior calcula el sum, count, average, minimum, maximum, 50th percentile (mediana), 75th percentile, 90th percentile, 95th percentile y 99th percentile. Las distribuciones se pueden usar para medir la distribución de cualquier tipo de valor, como el tamaño de los archivos subidos o las calificaciones de los exámenes en el aula.
Opciones de envío de métricas
Tasas de muestreo
Dado que la sobrecarga de enviar paquetes UDP puede ser demasiado grande para algunos caminos de código intensivos en rendimiento, los clientes de DogStatsD soportan muestreo (enviando métricas solo un porcentaje del tiempo). Es útil si se muestrean muchas métricas y su cliente de DogStatsD no se encuentra en el mismo servidor que el servidor de DogStatsD. La compensación consiste en reducir el tráfico, pero se pierde algo de precisión y granularidad.
Una tasa de muestreo de 1 envía métricas el 100% del tiempo, mientras que una tasa de muestreo de 0 envía métricas el 0% del tiempo.
Antes de enviar una métrica a Datadog, DogStatsD utiliza el <SAMPLE_RATE> para corregir el valor de la métrica dependiendo del tipo de métrica (para estimar el valor sin muestreo):
| Tipo de métrica | Corrección de tasa de muestreo |
|---|
COUNT | Los valores recibidos se multiplican por (1/<SAMPLE_RATE>). Es razonable suponer que por un punto de datos recibido, 1/<SAMPLE_RATE> fueron realmente muestreados con el mismo valor. |
GAUGE | Sin corrección. El valor recibido se mantiene tal como está. |
SET | Sin corrección. El valor recibido se mantiene tal como está. |
HISTOGRAM | La estadística histogram.count es una métrica de CONTADOR y recibe la corrección mencionada anteriormente. Otras estadísticas son métricas de gauge y no son “corregidas”. |
DISTRIBUTION | Los valores recibidos se cuentan (1/<SAMPLE_RATE>) veces. Es razonable suponer que por cada punto de datos recibido, 1/<SAMPLE_RATE> fueron realmente muestreados con el mismo valor. |
Ejemplos de código
El siguiente código solo envía puntos la mitad del tiempo:
statsd.increment('loop.count', sample_rate=0.5)
statsd.increment('loop.count', :sample_rate => 0.5)
statsd.Incr("example_metric.increment", []string{}, 0.5)
Statsd.incrementCounter("example_metric.increment", sampleRate=0.5);
dogStatsdService.Increment("example_metric.increment", sampleRate: 0.5);
<? php
$statsd->increment('example_metric.increment', $sampleRate->0.5);
Etiquetado de métricas
Agregue etiquetas a cualquier métrica que envíe a DogStatsD con el parámetro tags.
Ejemplos de código
El siguiente código solo agrega las etiquetas environment:dev y account:local a la métrica example_metric.increment:
statsd.increment('example_metric.increment', tags=["environment:dev","account:local"])
statsd.increment('example_metric.increment', tags: ['environment:dev','account:local'])
statsd.Incr("example_metric.increment", []string{"environment:dev","account:local"}, 1)
Statsd.incrementCounter("example_metric.increment", new String[]{"environment:dev","account:local"});
dogStatsdService.Increment("example_metric.increment", tags: new[] {"environment:dev","account:local"})
El argumento tags puede ser una cadena:
$statsd->increment('example_metric.increment', 1.0, "environment:dev,account:local");
o un arreglo:
<?php
$statsd->increment('example_metric.increment', 1.0, array('environment' => 'dev', 'account' => 'local'));
tracer.dogstatsd.increment('example_metric.increment', 1, { environment: 'dev', account: 'local' });
Etiqueta de servidor
La etiqueta de servidor se asigna automáticamente por el Agente de Datadog que agrega las métricas. Las métricas enviadas con una etiqueta de servidor que no coincide con el nombre del servidor del Agente pierden referencia al servidor original. La etiqueta de servidor enviada anula cualquier nombre de servidor recopilado o configurado en el Agente.
Lectura adicional
Más enlaces, artículos y documentación útiles: