Las métricas personalizadas son métricas que definen los usuarios. Las métricas personalizadas usan los mismos elementos que usan las métricas integradas de Cloud Monitoring:
- Un conjunto de datos
- Información sobre tipos de métricas, que te indica qué representan los datos
- Información sobre recursos supervisados, que te indica dónde se originaron los datos
Las métricas personalizadas se pueden usar de la misma manera que las métricas integradas. Es decir, puedes crear gráficos y alertas para los datos de tus métricas personalizadas.
Para obtener una introducción a las estructuras subyacentes de las métricas integradas y personalizadas, consulta Métricas, series temporales y recursos. Para explorar las métricas integradas, consulta la Lista de métricas. Para explorar los recursos supervisados disponibles, consulta la Lista de recursos.
Usa una métrica personalizada
Si deseas usar una métrica personalizada, debes tener un descriptor de métrica para tu nuevo tipo de métrica. El descriptor de métricas define cómo se organizan tus datos. Antes de comenzar a escribir datos de métricas personalizadas, determina cómo deseas usar los datos que recopilas y asegúrate de que la organización de los datos admita esos objetivos.
Crea un descriptor de métrica
Cloud Monitoring puede crear el descriptor de métricas de forma automática, o puedes usar el método metricDescriptors.create
en la API de Monitoring para crearlo tú mismo. No puedes manipular descriptores de métricas con Google Cloud Console para Monitoring.
Para que Cloud Monitoring cree el descriptor de métricas, solo tienes que escribir datos de series temporales para tu métrica y Cloud Monitoring crea un descriptor basado en los datos que escribes. Para obtener más información, consulta Creación automática de descriptores de métricas. La creación automática tiene límites, por lo que es útil saber qué información se incluye en una definición de métrica. Una vez que tengas un nuevo descriptor de métricas personalizadas, creado por ti o por Monitoring, puedes usarlo con los métodos de la API de los descriptores de métricas y los métodos de las API de las series temporales.
Ya sea que crees de forma explícita el descriptor de métricas o permitas que Monitoring lo cree en función de tus datos, debes asegurarte de que la organización de los datos coincida con cómo deseas consultarlos.
Organiza tus datos
Supongamos que tienes un programa que se ejecuta en una sola máquina y este llama a los programas auxiliares A
y B
. Deseas contar la frecuencia con la que se llama a los programas A
y B
. También quieres saber cuándo se llama al programa A
más de 10 veces por minuto y cuándo se llama al programa B
más de 5 veces por minuto.
Para simplificar el debate, supongamos que tienes un solo proyecto de Google Cloud y planeas usar el recurso supervisado global
. Para obtener más información sobre esta opción, consulta Recursos supervisados para las métricas personalizadas.
Considera los siguientes enfoques:
Debes usar dos tipos de métricas personalizadas:
Metric-type-A
cuenta las llamadas al programaA
yMetric-type-B
al programaB
. En este caso,Metric-type-A
contiene 1 serie temporal yMetric-type-B
contiene 1 serie temporal.Mediante este modelo de datos, puedes crear una sola política de alertas con dos condiciones o puedes crear dos políticas de alertas con una condición. Una política de alertas puede admitir varias condiciones, pero tiene una sola configuración para los canales de notificaciones.
Este modelo podría ser adecuado cuando no te interesan las similitudes de los datos entre las actividades que se supervisan. En este ejemplo, las actividades son la tasa de llamadas a los programas
A
yB
.Usa un único tipo de métrica personalizada y una etiqueta que almacene el valor
A
oB
. Dado que Monitoring crea una serie temporal para cada combinación única de etiquetas, hay dos series temporales para este único tipo de métrica.Al igual que con el modelo anterior, puedes crear una sola política de alertas o dos políticas de alertas. Sin embargo, las condiciones de la política de alertas son más complicadas. Para crear una condición que genere un incidente si la tasa de llamadas al programa
A
excede un límite, la condición debe incluir un filtro que incluya datos cuyo valor de etiqueta seaA
y excluya todos los demás datos.Una de las ventajas de este modelo es que es sencillo para calcular proporciones. Por ejemplo, puedes determinar qué cantidad del total se debe a las llamadas a
A
.Usa un solo tipo de métrica personalizada para contar la cantidad de llamadas, pero no uses una etiqueta a fin de registrar a qué programa se llamó. En este modelo, hay una sola serie temporal que combina los datos de los dos programas. Sin embargo, no puedes crear una política de alertas que cumpla con tus objetivos, ya que los datos de dos programas no se pueden separar.
Nombres de métricas personalizadas
Cuando crees una métrica personalizada, debes crear un identificador de string que represente el tipo de métrica. Esta string debe ser única entre las métricas personalizadas de tu proyecto de Google Cloud. La string debe comenzar con un prefijo que la marque como una métrica definida por el usuario. En Monitoring, los únicos prefijos compatibles son custom.googleapis.com/
y external.googleapis.com/
.
El uso de prefijos arbitrarios no es compatible.
Al prefijo le sigue un nombre que describe lo que recopilas. Consulta Convenciones de nombres para obtener más detalles.
A continuación, se muestran ejemplos de los dos tipos de identificadores para los tipos de métricas:
custom.googleapis.com/cpu_utilization
custom.googleapis.com/instance/cpu/utilization
Los tipos de métricas personalizadas tienen nombres de recursos que son únicos en todos los recursos de Google Cloud de todos los proyectos. El formato de un nombre de recurso para un tipo de métrica es el siguiente:
projects/[PROJECT_ID]/metricDescriptors/[METRIC_TYPE]
En el ejemplo anterior, METRIC_TYPE
es el identificador de string del tipo de métrica.
Si los ejemplos de métricas personalizadas anteriores se crearan en el proyecto my-project-id
, los nombres de recursos serían los siguientes:
projects/my-project-id/metricDescriptors/custom.googleapis.com/cpu_utilization
projects/my-project-id/metricDescriptors/custom.googleapis.com/instance/cpu/utilization
¿Nombre o tipo? En el descriptor de métrica, el campo name
almacena el nombre del recurso del tipo de métrica y el campo type
almacena la string METRIC_TYPE
.
Define tu descriptor de métrica personalizado
Para recopilar datos de métricas personalizadas, debes proporcionar un objeto MetricDescriptor
que especifique información diversa sobre la métrica. Cloud Monitoring puede crear el descriptor de forma automática. Consulta Creación automática de descriptores de métricas para obtener más información.
Si deseas crear el descriptor de métrica de forma explícita, necesitarás la siguiente información:
Elige un identificador para el tipo de métrica personalizada, como se describió en la sección anterior.
Elige un proyecto para definir tu métrica personalizada y escribe sus datos de series temporales.
El proyecto que elijas también debe ser miembro del lugar de trabajo donde se supervisa la métrica. Si necesitas la misma métrica en varios proyectos, realiza definiciones idénticas de la métrica en cada proyecto.
Las métricas personalizadas de AWS deben crearse en el proyecto de conector de AWS para tu cuenta de AWS.
Elige un nombre visible y una descripción de la métrica. El nombre comercial se usa en Google Cloud Console.
Elige la clase, el tipo de valor y, de manera opcional, las unidades de la métrica. No todos los tipos de valores y las clases de métricas son compatibles con las métricas personalizadas. Consulta Tipos de valores y clases de métricas.
Elige las etiquetas de la métrica: sus nombres, tipos de valor y descripciones.
Si necesitas más ayuda para tomar estas decisiones, puedes examinar las métricas integradas y ver sus datos de series temporales.
En Crea descriptores de métricas de forma manual, se incluyen muestras de código para crear un descriptor de métrica de manualmente.
Elige un tipo de recurso supervisado
Cuando escribes tus datos en una serie temporal, debes indicar de dónde provienen. Para hacerlo, debes elegir un tipo de recurso supervisado que represente la procedencia de tus datos y, luego, usarlo para describir el origen específico. El recurso supervisado no forma parte del tipo de métrica; en su lugar, la serie temporal en la que le escribes datos incluye una referencia al tipo de métrica, que describe los datos, y una referencia al recurso supervisado, que indica dónde se originaron los datos.
Ten en cuenta el recurso supervisado antes de crear tu descriptor de métrica. El tipo de recurso supervisado que uses afecta las etiquetas que debes incluir en el descriptor de métrica. Por ejemplo, si usas un recurso supervisado de instancia de VM con tus datos, no necesitarás una etiqueta de métrica para especificar la instancia. Para obtener más información, consulta Recursos supervisados para las métricas personalizadas.
Cada uno de los datos de tu métrica debe estar asociado con un objeto de recurso supervisado. Los datos de diferentes objetos de recursos supervisados se mantienen en distintas series temporales.
Recursos supervisados para métricas personalizadas
Solo puedes usar los siguientes tipos de recursos supervisados en tus métricas personalizadas.
aws_ec2_instance
: Instancia de Amazon EC2dataflow_job
: Trabajo de Dataflowgae_instance
: Instancia de App Engine.-
gce_instance
: Instancia de Compute Engine. generic_node
: Nodo de procesamiento especificado por el usuariogeneric_task
: Tarea definida por el usuariogke_container
: instancia de contenedor de GKE.global
: Usa este recurso cuando ningún otro tipo de recurso sea adecuado. En la mayoría de los casos prácticos,generic_node
ogeneric_task
son mejores opciones queglobal
k8s_cluster
: Clúster de Kubernetesk8s_container
: Contenedor de Kubernetesk8s_node
: Nodo de Kubernetesk8s_pod
: Pod de Kubernetes
Se suelen usar los objetos de recursos supervisados que representan los recursos físicos donde se ejecuta el código de tu aplicación. Este enfoque tiene varias ventajas:
- Obtienes un mejor rendimiento en comparación con el uso de un solo tipo de recurso.
- Evitas los datos fuera de orden causados por múltiples procesos que escriben en la misma serie temporal.
- Los datos de métricas personalizadas se pueden agrupar con otros datos de métricas de los mismos recursos.
Comparación entre recursos genéricos y global
Los tipos de recursos generic_task
y generic_node
son útiles en situaciones en las que ninguno de los tipos de recursos más específicos es apropiado.
El tipo generic_task
es útil para definir recursos similares a las tareas, como las aplicaciones. El tipo generic_node
es útil para definir recursos similares a los nodos, como máquinas virtuales.
Ambos tipos generic_*
tienen varias etiquetas comunes que puedes usar a fin de definir objetos de recursos únicos, lo que facilita su uso en filtros de métricas para agregaciones y reducciones.
Por el contrario, el tipo de recurso global
solo tiene etiquetas project_id
y location
. Si tienes muchas fuentes de métricas dentro de un proyecto, usar el mismo objeto de recurso global
puede provocar colisiones y reemplazos de los datos de métricas.
Crea descriptores de métricas
Los datos que recopiles para una métrica personalizada deben estar asociados con un descriptor de un tipo de métrica personalizada. Puedes crear el descriptor de métricas de forma manual o Monitoring lo puede hacer por ti.
- En Creación automática de descriptores de métricas, se describe cómo Monitoring crea descriptores de métricas.
- En Crea descriptores de métricas de forma manual, se proporciona más información y muestras de código.
Hay formas limitadas de cambiar un descriptor existente. Para obtener más información, consulta Modifica los descriptores de métricas.
Creación automática de descriptores de métricas
Si escribes datos de métricas en un tipo de métrica personalizada que aún no existe, se crea automáticamente un nuevo descriptor de métrica personalizada. Sin embargo, este nuevo descriptor de métrica podría no ser exactamente lo que quieres. La creación automática de descriptores de métricas implica algunas suposiciones y opciones de configuración predeterminadas.
De forma específica, durante una llamada a timeSeries.create
, si un objeto TimeSeries
incluye un objeto Metric
que especifica un nombre de tipo de métrica inexistente, Cloud Monitoring crea un MetricDescriptor
nuevo con los siguientes campos:
type
: El tipo se copia desde el campotype
del objetoMetric
.name
: El nombre se crea a partir del ID del proyecto en la llamada de método y el valor detype
en el objetoMetric
labels
: Las etiquetas son aquellas que aparecen en el objetoMetric
. Cada descriptor de etiqueta en el nuevo descriptor de métrica posee los siguientes campos:key
: Es la clave de etiqueta en el objetoMetric
.valueType
:STRING
.description
: No se establece.
metricKind
: La clase de métrica predeterminada esGAUGE
, pero si especificas el parámetrometricKind
del objetoTimeSeries
, la métrica nueva será de esa clase. Solo puedes especificar las clasesGAUGE
yCUMULATIVE
.valueType
: El tipo de valor se toma del valor escrito delPoint
que se está escribiendo, que debe serBOOL
,INT64
,DOUBLE
oDISTRIBUTION
. Si especificas un tipo de valor en el campovalueType
deTimeSeries
, ese tipo debe coincidir con el tipo dePoint
.unit
: No se establece.description
:"Auto created custom metric."
.displayName
: No se establece.
En una sola llamada a timeSeries.create
, puedes incluir varios objetos TimeSeries
que hagan referencia al mismo tipo de métrica personalizada. En ese caso, los campos del tipo nuevo se configuran de la misma manera, excepto que las etiquetas del descriptor de métricas nuevo están formadas por la unión de todas las etiquetas de los objetos Metric
de todas las series temporales de esta llamada a create
.
Próximo paso: Consulta Escribe datos de métricas.
Crea descriptores de métricas de forma manual
Una vez que hayas recopilado la información que necesitas para crear el tipo de métrica personalizada, llama al método metricDescriptors.create
y pasa un objeto MetricDescriptor
.
Consulta Modifica descriptores de métricas para obtener más información.
Por lo general, es un error llamar a metricDescriptors.create
con el mismo nombre de tipo que un descriptor de métricas personalizadas existente. Sin embargo, si todos los campos del objeto nuevo MetricDescriptor
coinciden de manera exacta con los campos del descriptor existente, no se trata de un error y no tiene efecto alguno.
En el siguiente ejemplo, se crea una métrica personalizada de indicador, custom.googleapis.com/stores/daily_sales
. La métrica tiene una sola etiqueta de dimensión, store_id
.
Protocolo
Para crear un descriptor de métricas, usa el método metricDescriptors.create
.
Puedes ejecutar este método mediante el uso del Explorador de API en la página de referencia del método. Consulta Explorador de API para obtener más información.
Los siguientes son los parámetros de muestra de metricDescriptors.create
:
- Nombre (URL):
projects/[PROJECT_ID]
Cuerpo de la solicitud: Proporciona un objeto
MetricDescriptor
como el siguiente:{ "name": "", "description": "Daily sales records from all branch stores.", "displayName": "Sales", "type": "custom.googleapis.com/stores/sales", "metricKind": "CUMULATIVE", "valueType": "DOUBLE", "unit": "{USD}", "labels": [ { "key": "store_id", "valueType": "STRING", "description": "The ID of the store." }, ], }
Proporciona estos valores para los campos del widget mediante el uso del ID del proyecto en lugar de [PROJECT_ID
]:
Haz clic en el botón Ejecutar (Execute) para ejecutar el método.
Cuando crees una métrica personalizada nueva, el campo name
de MetricDescriptor
se ignora y se puede omitir. El método create
muestra el nuevo descriptor de métrica con el campo name
completo, que en este ejemplo sería el siguiente:
"name": "projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales"
Si, por ejemplo, quieres obtener el descriptor de una métrica, debes usar este nombre.
C#
Go
Java
Node.js
PHP
Python
Ruby
Consulta Soluciona problemas de llamadas a la API si tienes dificultades.
Próximo paso: Consulta Escribe datos de métricas.
Borra métricas
Para borrar una métrica personalizada, borra su descriptor de métrica. No puedes borrar los datos de la serie temporal de tu métrica personalizada, pero borrar el descriptor de métricas hace que los datos sean inaccesibles. Los datos caducan y se borran de acuerdo con la política de retención de datos.
Para borrar tu descriptor de métricas personalizadas, llama al método metricDescriptors.delete
.
Protocolo
Para borrar un descriptor de métricas, usa el método metricDescriptors.delete
.
Puedes ejecutar este método mediante el uso del Explorador de API en la página de referencia del método. Consulta Explorador de API para obtener más información.
Solo puedes borrar tipos de métricas personalizadas.
Para borrar la métrica personalizada stores/daily_sales
creada en Crea descriptores de métricas de forma manual, sigue estos pasos:
- Ve a la página de referencia de
metricDescriptors.delete
: Proporciona el nombre del descriptor de métrica al widget Explorador de API:
Nombre:
projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales
Haz clic en el botón Ejecutar.
C#
Go
Java
Node.js
PHP
Python
Ruby
Consulta Soluciona problemas de llamadas a la API si tienes dificultades.
Escribe datos de métricas
Solo puedes escribir datos en tipos de métricas personalizadas. Para escribir tus datos, usa el método timeSeries.create
.
Si la serie temporal ya existe, este método agrega un dato nuevo a la serie temporal existente. Si la serie temporal no existe, este método la crea y agrega los datos.
Para escribir datos, pasa una lista de objetos TimeSeries
a timeSeries.create
.
El tamaño máximo de la lista es 200, y cada objeto de la lista debe especificar una serie temporal diferente:
- Cada serie temporal se identifica mediante los campos
metric
yresource
del objetoTimeSeries
. Estos campos representan el tipo de métrica de los datos y el recurso supervisado desde el que se recopilaron los datos. - Omite los campos
metricKind
yvalueType
. Se ignoran cuando se escriben datos. Cada objeto
TimeSeries
debe contener solo un único objetoPoint
:- El valor y el intervalo temporal del dato deben ser coherentes con la definición del tipo de métrica. Para obtener información sobre los intervalos de tiempo para diferentes clases de métricas, consulta
TimeInterval
. - El intervalo temporal del dato debe ser posterior a cualquier dato que ya pertenezca a la serie temporal.
- La hora de finalización del intervalo no debe superar las 25 horas en el pasado o 5 minutos en el futuro.
- El valor y el intervalo temporal del dato deben ser coherentes con la definición del tipo de métrica. Para obtener información sobre los intervalos de tiempo para diferentes clases de métricas, consulta
Si deseas escribir más de un punto en la misma serie temporal, usa una llamada al método
timeSeries.create
separada para cada punto. No escribas datos en una sola serie temporal a una velocidad mayor a un punto cada 10 segundos. Si estás agregando datos a diferentes series temporales, entonces no hay límite de frecuencia.
Protocolo
Para escribir datos de métricas, usa el método timeSeries.create
.
Puedes ejecutar este método mediante el uso del Explorador de API en la página de referencia del método. Consulta Explorador de API para obtener más información.
Para escribir un dato en la métrica personalizada stores/daily_sales
creada en Crea descriptores de métricas de forma manual, haz lo siguiente:
- Ve a la página de referencia de
timeSeries.create
: - Proporciona los parámetros a continuación para el widget Explorador de API.
- Haz clic en el botón Ejecutar.
Usa los siguientes parámetros de muestra:
- Nombre:
projects/[PROJECT_ID]
cuerpo de la solicitud: incluye una lista de objetos
TimeSeries
. La siguiente muestra solo tiene una serie temporal en la lista.{ "timeSeries": [ { "metric": { "type": "custom.googleapis.com/my_metric", "labels": { "my_label": "my_value" } }, "resource": { "type": "gce_instance", "labels": { "project_id": "[PROJECT_ID]", "instance_id": "1234567890123456789", "zone": "us-central1-f" } }, "points": [ { "interval": { "endTime": "2018-06-01T10:00:00-04:00" }, "value": { "doubleValue": 123.45 } } ] } ] }
C#
Go
Java
Node.js
PHP
Python
Ruby
Consulta Soluciona problemas de llamadas a la API si tienes dificultades.
Modifica descriptores de métricas
También puedes usar la llamada timeSeries.create
para agregar etiquetas nuevas a las métricas personalizadas. Para agregar etiquetas a tu descriptor de métrica personalizada, puedes incluirlas con los datos de series temporales.
Si la etiqueta que intentas escribir es válida y no hace que el número de etiquetas en el descriptor de métrica exceda el límite de 10 etiquetas, la etiqueta se agrega. Los datos de la serie temporal se escriben como si la etiqueta hubiera estado allí desde el principio.
Si quieres hacer algo más que agregar etiquetas nuevas, debes borrar y volver a crear el descriptor de métrica. En este caso, perderás todos los datos de series temporales recopilados previamente para el descriptor de métrica anterior. Consulta Borra métricas para obtener más información.
No puedes cambiar el nombre de una métrica.