perfmetrics te ofrece una forma sencilla de añadir métricas de rendimiento de software para bibliotecas de Python y aplicaciones & nbsp;. Use perfmetrics para encontrar los verdaderos cuellos de botella en una aplicación de producción.
El paquete perfmetrics es un cliente del demonio Statsd por Etsy, que es a su vez un cliente de grafito (en concreto, el demonio de carbono). Debido a que el paquete perfmetrics envía paquetes UDP al Statsd, perfmetrics añade ningún retraso de E / S a las aplicaciones y poca sobrecarga de CPU. Puede funcionar igualmente bien en (síncrona) o (asíncrono) de software orientado a eventos roscado.
Uso
Utilice los decoradoresmetric ymetricmethod en anidar funciones y métodos que deberán enviar momento y llamar a las estadísticas para Statsd. Añadir los decoradores a cualquier función o método que podría ser un cuello de botella, incluyendo funciones de biblioteca.
Muestra:
desde perfmetrics importar métrica
desde perfmetrics metricmethod importación
metric
myfunction def ():
& Nbsp; "" "Haz algo que podría ser caro" ""
class MiClase (objeto):
& Nbsp;metricmethod
& Nbsp; def MyMethod (self):
& Nbsp; "" "Haga un poco de otra cosa posiblemente caro" ""
A continuación, decir perfmetrics cómo conectarse a Statsd. (Hasta que lo haga, los decoradores no tienen ningún efecto.) Lo ideal sería que la aplicación debe leer el Statsd URI de un archivo de configuración en tiempo de inicio, pero el siguiente ejemplo utiliza un URI codificado para la simplicidad:
desde perfmetrics set_statsd_client importación
set_statsd_client ('statsd: // localhost: 8125 ")
para i en xrange (1000):
& Nbsp; myfunction ()
& Nbsp; MiClase MyMethod () ().
Si ejecuta el código, se disparará paquetes UDP 2000 en el puerto 8125. Sin embargo, a menos que usted ya ha instalado Grafito y Statsd, todos esos paquetes será ignorado y abandonado. Caída es una buena cosa: usted no desea que su aplicación de producción falle o ralentizar sólo porque su sistema de monitoreo del desempeño se detiene o no funciona.
Instale Grafito y Statsd para recibir y graficar las métricas. Una buena manera de instalarlos es el ejemplo graphite_buildout en GitHub, que instala Grafito y Statsd en una ubicación personalizada sin acceso root.
Roscado
Aunque la mayoría de los programas envían métricas de cualquier tema a un solo servidor global Statsd, algunos programas necesitan utilizar un servidor Statsd diferente para cada hilo. Si sólo necesita un servidor global Statsd, utilice la función set_statsd_client al iniciarse la aplicación. Si necesita utilizar un servidor Statsd diferente para cada hilo, utilice el objeto statsd_client_stack en cada hilo. Utilice el empuje, el pop y métodos claros.
Consejos Grafito
Tiendas de grafito cada métrica como una serie de tiempo con múltiples resoluciones. La segunda resolución ejemplo almacena graphite_buildout 10 durante 48 horas, la resolución de 1 hora por 31 días, y una resolución de 1 día por 5 años. Para producir un valor de grano grueso a partir de un valor de grano fino, grafito calcula el valor medio (promedio) para cada lapso de tiempo.
Debido Grafito calcula valores medios implícitamente, la manera más sensata para tratar contadores en grafito es como un "hits por segundo" valor. De esa manera, un gráfico puede producir resultados correctos, no importa que nivel de resolución que utiliza.
El tratamiento de los contadores como golpea por segundo tiene consecuencias lamentables, sin embargo. Si alguna métrica ve un pico de 1.000 hit en un segundo, luego cae a cero durante al menos 9 segundos, el gráfico de Grafito para ese indicador mostrará un pico de 100, no 1000, ya Grafito recibe métricas cada 10 segundos y el pico se ve a Grafito como 100 golpes por segundo durante un período de 10 segundos.
Si usted quiere que su gráfica para mostrar 1.000 hits en vez de 100 visitas por segundo, aplicar la función HitCount Grafito (), con una resolución de 10 segundos o más. La función HitCount convierte valores por segundo para aproximar los recuentos hit primas. Asegúrese de proporcionar un valor de resolución lo suficientemente grande para ser representado por al menos un ancho de píxel en la gráfica resultante, de lo contrario Grafito calculará los promedios de recuentos de golpe y producir una gráfica confuso.
Por lo general, tiene sentido tratar valores nulos en grafito como cero, a pesar de que no es el predeterminado; por defecto, grafito atrae nada de valores nulos. Puede activar esta opción para cada gráfica.
Documentación de referencia
Decoradores
metric
& Nbsp; Notifica Statsd usando UDP cada vez que la función se llama. Envía ambos conteos de llamadas y la información de temporización. El nombre de la métrica enviado a Statsd es
metricmethod
& Nbsp; Al igualmetric, pero el nombre de la Statsd métrica es
Métrico (stat = Ninguno, tasa = 1, method = False, count = Verdadero, el tiempo = True)
& Nbsp; Un gerente decorador o contextual con opciones.
& Nbsp; stat es el nombre de la métrica para enviar; establecerlo en Ninguno para utilizar el nombre de la función o método. tasa le permite reducir el número de paquetes enviados a Statsd seleccionando una muestra aleatoria; por ejemplo, ponerlo en 0.1 para enviar una décima parte de los paquetes. Si el parámetro del método es cierto, el nombre de la métrica por defecto se basa en nombre de la clase del método en lugar del nombre del módulo. Configuración de la cuenta en False deshabilita las counter statistics enviados a Statsd. Ajuste de tiempo en False deshabilita las estadísticas de sincronización enviados a Statsd.
& Nbsp; el uso de la muestra como decorador:
& Nbsp;Metric ('frequent_func', tasa = 0,1, el tiempo = False)
& Nbsp; def frequent_func ():
& Nbsp; "" "hacer algo rápido y con frecuencia" ""
& Nbsp; el uso de la muestra como un gestor de contexto:
& Nbsp; def hacer_algo ():
& Nbsp; con Metric ('doing_something'):
& Nbsp; pase
& Nbsp; Si perfmetrics envía paquetes con demasiada frecuencia, los paquetes UDP se pueden perder y el rendimiento de las aplicaciones pueden verse afectadas. Usted puede reducir el número de paquetes y la sobrecarga de la CPU con el decorador de Métricas con opciones en lugar de métrica o metricmethod. El ejemplo decorador anterior utiliza una frecuencia de muestreo y un nombre de indicador estática. También deshabilita la recopilación de información de tiempo.
& Nbsp; Al utilizar Metric como un gestor de contexto, debe proporcionar el parámetro de estadísticas o no se grabará nada.
Funciones
statsd_client ()
& Nbsp; Devuelva el StatsdClient configurado actualmente. Devuelve el cliente local de subprocesos si lo hay, o el cliente global, si hay uno, o ninguno.
set_statsd_client (client_or_uri)
& Nbsp; Ajuste el StatsdClient global. El client_or_uri puede ser un StatsdClient, un statsd: // URI, o Ninguno.
statsd_client_from_uri (uri)
& Nbsp; Crear un StatsdClient de un URI. Un URI típico se statsd: // localhost: 8125. Parámetros de consulta opcionales soportados son prefijo y gauge_suffix. El prefijo por defecto está vacío y el gauge_suffix defecto es .. Ver la documentación StatsdClient para obtener más información acerca de gauge_suffix.
Métodos StatsdClient
Código Python puede enviar métricas personalizadas por conseguir primero la StatsdClient actual utilizando el método statsd_client (). Tenga en cuenta que statsd_client () devuelve None si ningún cliente se ha configurado.
La mayor parte de los siguientes métodos tienen parámetros de velocidad y buf opcionales. El parámetro de velocidad, cuando se establece en un valor menor que 1, provoca StatsdClient para enviar una muestra aleatoria de paquetes en lugar de cada paquete. Si el parámetro buf es una lista, StatsdClient añade el contenido del paquete a la lista buf en lugar de enviar el paquete, por lo que es posible enviar varias actualizaciones en un solo paquete. Tenga en cuenta que el tamaño de los paquetes UDP es limitada (el límite varía según la red, pero 1.000 bytes es por lo general una buena suposición) y cualquier bytes adicionales será ignorada en silencio.
tiempo (stat, valor, tasa = 1, buf = None)
& Nbsp; información de tiempo de grabación. stat es el nombre de la métrica para grabar y valor es la medición de tiempo en milisegundos. Tenga en cuenta que Statsd mantiene varios puntos de datos para cada medida de tiempo, por lo que las métricas de temporización pueden tomar más espacio de disco que los contadores o medidores.
calibre (stat, el valor, el sufijo = Ninguno, tasa = 1, buf = None)
& Nbsp; Actualización de un valor del indicador. stat es el nombre de la métrica para grabar y valor es el nuevo valor de calibre. Un indicador representa un valor persistente como un tamaño de piscina. Debido a que los medidores de diferentes máquinas a menudo conflictos, un sufijo se aplica generalmente a medir nombres. Si el parámetro sufijo es una cadena (incluyendo una cadena vacía), se anula el sufijo calibre predeterminado.
incr (stat, count = 1, frecuencia = 1, buf = None)
& Nbsp; incrementar un contador de recuento. Tenga en cuenta que Statsd borra todos los valores del contador cada vez que se envía la métrica de grafito, que suele ocurrir cada 10 segundos. Si necesita un valor persistente, puede ser más apropiado utilizar un medidor en lugar de un contador.
decr (stat, count = 1, frecuencia = 1, buf = None)
& Nbsp; Disminuir un contador por conteo.
sendbuf (buf)
& Nbsp; enviar el contenido de la lista buf a Statsd
¿Cuál es nuevo en esta versión:
- Se ha agregado una pirámide opcional. interpolación y una aplicación similar filtro WSGI que configura el cliente Statsd para cada solicitud.
¿Qué hay de nuevo en la versión 0.9.4:.
- Optimizado el uso de frecuencias de muestreo reducido
¿Qué hay de nuevo en la versión 0.9.2:
- Métrico ahora se puede utilizar como un decorador o un gestor de contexto.
- Hecho de la firma del StatsdClient más como StatsClient de James Socol.
Requisitos :
- Python
Comentarios que no se encuentran