AWS CloudWatch es una herramienta estupenda para monitorear y observar el comportamiento de cualquier solución que alojemos en AWS. Tiene un sinnúmero de capacidades que vale la pena conocer y potenciar, especialmente si tienen un rol de DevOps.

Una de esas capacidades es la opción de poder crear métricas personalizadas desde nuestro código. Por ejemplo, cuando necesitamos mostrar una métrica relevante en un dashboard de CloudWatch.

Asumamos entonces que tenemos un microservicio corriendo en AWS y necesitan que bajo ciertas condiciones se almacene una métrica.

El primer paso sería crear un cliente para CloudWatch de la siguiente manera:

 AmazonCloudWatch cw =  
       AmazonCloudWatchClientBuilder.defaultClient();

Después debemos crear el dato de nuestra métrica, en este ejemplo le ponemos el nombre Cantidad indicamos que es un count con un valor de 45 e indicamos la marca de tiempo. Usamos una dimensión por omisión. Una dimensión en CloudWatch son pares nombre/valor que asociamos con una métrica.

MetricDatum datum = new MetricDatum()
        .withMetricName("Cantidad")
        .withUnit(StandardUnit.Count)
        .withValue(45d)
        .withTimestamp(Calendar.getInstance().getTime())
        .withDimensions(new Dimension());

El último paso sería hacer un request indicando un namespace y nuestra métrica, como se ve de seguido.

 PutMetricDataRequest request = new PutMetricDataRequest()
         .withNamespace("Invocaciones Recibidas")
         .withMetricData(datum);

El último paso sería enviar ese request empleando el cliente que referenciamos en el primer paso.

 PutMetricDataResult response = cw.putMetricData(request);

Hecho esto ya podemos hacer uso de esta nueva métrica en CloudWatch.

Conclusión


Realizar métricas personalizadas para CloudWatch es muy sencillo de hacer y nos permite extender las funcionalidades brindadas por AWS.