Extracción de métricas de una instancia de Monitoring utilizando la API de supervisión

Puede extraer métricas de una instancia de IBM Cloud Monitoring utilizando la API de Monitoring.

Obtener métricas utilizando cURL

Puede utilizar el siguiente mandato cURL para obtener métricas:

curl -X POST <SYSDIG_REST_API_ENDPOINT>/data -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "SysdigTeamID: $TEAM_ID" -H "content-type: application/json" -d DATA

Donde

  • <SYSDIG_REST_API_ENDPOINT> indica el punto final al que se dirige la llamada de API REST. Para obtener más información, consulte Puntos finales de API REST de supervisión. Por ejemplo, el punto final público de una instancia que está disponible en us-south es el siguiente: https://us-south.monitoring.cloud.ibm.com/api

  • Puede pasar varias cabeceras utilizando -H.

    Authorization e IBMInstanceID son cabeceras necesarias para la autenticación.

    SysdigTeamID es opcional. Al especificar esta cabecera, se limita la solicitud a los datos y los recursos disponibles para el equipo especificado.

    Para obtener una AUTH_TOKEN y el GUID consulte, Cabeceras para señales IAM.

  • Puede pasar el archivo metrics.json para extraer métricas utilizando -d, por ejemplo, -d @metrics.json.

En el ejemplo siguiente se muestra una plantilla para el archivo metrics.json:

{
  "start": "Number: seconds",
  "end": "Number: seconds",
  "last": "Number: last available seconds",
  "metrics": [
    {
      "id": "<>",
      "aggregations": {}
    }
  ],
  "sampling": "Number: <10|60|600|3600|86400>",
  "dataSourceType": "<host|container>",
  "filter": "<>",
  "paging": {
    "from": "Number",
    "to": "Number"
  }
}

Diccionario de métricas

Para ver las métricas predefinidas por Sysdig, consulte el diccionario de métricas.

Para ver las métricas predefinidas definidas por los servicios de IBM Cloud que están habilitados con Sysdig, consulte Servicios en la nube.

Agregación de datos

Para obtener más información sobre la agregación de datos, consulte Agregación de datos.

Ejemplo: Extraer métricas de plataforma

En este ejemplo se muestra cómo extraer métricas de plataforma de Cloud Foundry en us-south de las últimas 24 horas.

curl -X POST https://us-south.monitoring.cloud.ibm.com/api/data -H "Authorization: Bearer $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "content-type: application/json" -d @metrics.json

El siguiente ejemplo del archivo metrics.json muestra cómo configurar el archivo para extraer datos por ID de instancia, edad del contenedor de la app y número de bytes que la app utiliza:

{
  "metrics": [
    {
      "id": "ibm_resource"
    },
    {
      "id": "ibm_cloudfoundry_app_container_age",
      "aggregations": {"group": "max", "time": "max"}
    },
    {
      "id": "ibm_cloudfoundry_app_memory_bytes_used",
      "aggregations": {"group": "avg", "time": "avg"}
    }
  ],
  "filter": "ibm_location = \"us-south\"",
  "sampling": 86400,
  "last": 86400
}

El resultado para extraer datos devuelve la siguiente información:

{
  "data": [
    {
      "d": [
        "73a9d202-7e97-45b2-a107-3b1528856be3",
        316660942465643,
        18809015.575
      ],
      "t": 1587772800
    }
  ],
  "end": 1587772800,
  "start": 1587686400
}

Ejemplo: Extraer datos de CPU

En este ejemplo se muestra cómo extraer datos de CPU por host con límite de inicio, de finalización y de muestreo.

El siguiente ejemplo del archivo metrics.json muestra cómo configurar el archivo para extraer datos de CPU:

{
  "start":"1555404790",
  "end":"1555404850",
  "sampling": 10,
  "metrics": [
    {
      "id": "host.hostName"
    },
    {
      "id": "cpu.used.percent",
      "aggregations": {"time": "avg"}
    }
  ],
  "dataSourceType": "host"
}

El resultado para extraer datos devuelve la siguiente información:

{
  "data": [
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        3.621
      ],
      "t": 1555404800
    },
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        3.597
      ],
      "t": 1555404810
    },
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        3.993
      ],
      "t": 1555404820
    },
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        3.145
      ],
      "t": 1555404830
    },
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        4.09
      ],
      "t": 1555404840
    },
    {
      "d": [
        "j-rhel71.fyre.ibm.com",
        5.057
      ],
      "t": 1555404850
    }
  ],
  "end": 1555404850,
  "start": 1555404790
}

Ejemplo: ejemplo de cURL para extraer la métrica más reciente

Para obtener el último valor de una métrica, especifique solo el nombre de la métrica. Se devuelve el valor más reciente que se ha generado no hace más de 5 minutos.

Por ejemplo, para obtener el último valor de host_cpu_used_percent:

curl <SYSDIG_REST_API_ENDPOINT>/prometheus/api/v1/query?query=sysdig_host_cpu_used_percent -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "SysdigTeamID: $TEAM_ID" -H "content-type: application/json"

Donde

  • <SYSDIG_REST_API_ENDPOINT> indica el punto final al que se dirige la llamada de API REST. Para obtener más información, consulte Puntos finales de API REST de supervisión. Por ejemplo, el punto final público de una instancia que está disponible en us-south es el siguiente: https://us-south.monitoring.cloud.ibm.com/api

  • Puede pasar varias cabeceras utilizando -H.

    Authorization e IBMInstanceID son cabeceras necesarias para la autenticación.

    SysdigTeamID es opcional. Al especificar esta cabecera, se limita la solicitud a los datos y los recursos disponibles para el equipo especificado.

    Para obtener una AUTH_TOKEN y el GUID consulte, Cabeceras para señales IAM.

Todos los paneles de control admiten la API completa de PromQL. Para obtener más información sobre las posibilidades que ofrece PromQL,, consulte la documentación de Prometheus.

Ejemplo: ejemplo de cURL para extraer datos de CPU para un equipo

Este ejemplo muestra cómo extraer los datos de CPU que están disponibles en el contexto de un equipo.

curl -X POST https://us-south.monitoring.cloud.ibm.com/api/data -H "Authorization: Bearer $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "SysdigTeamID: 30785" -H "content-type: application/json" -d @metrics.json

Ejemplo: Extraer datos de métricas de Monitoring a Event Streams

Puede utilizar el siguiente ejemplo de código para extraer métricas de la instancia de Monitoring a Event Streams.

  • Sustituye <region> por la región de tu instancia de Monitoring, como us-east.
  • Sustituya <apikey> por una IBM Cloud señal de clave de API de IAM.
  • Reemplaza <instance_id> con el ID de tu instancia de Monitoring.
  • Sustituya el campo metrics por la matriz JSON de las métricas que desea extraer. La métrica utilizada en el ejemplo es cpu.cores.used.
from sdcclient import IbmAuthHelper, SdMonitorClient
endpoint = "https://<region>.monitoring.cloud.ibm.com"
apikey = "<apikey>"
instanceID = "<instance_id>"
ibm_headers = IbmAuthHelper.get_headers(endpoint, apikey, instanceID)
sdclient = SdMonitorClient(sdc_url=endpoint, custom_headers=ibm_headers)
metrics = [
    {
    "id": "cpu.cores.used",
    "aggregations": {
        "time": "avg",
        "group": "sum"
    }
    }
]
filter = None
start = -120
end = 0
sampling = 60
ok, res = sdclient.get_data(metrics, start, end, sampling, filter=filter, datasource_type = "container")
print(ok)
print(res)
return res

Ejemplo: Extraer notificaciones de Monitoring to Event Streams con la API REST de Event Streams

  1. Cree una instancia de Event Streams.

    • En los planes de precios, seleccione un Plan de empresa.
    • Si es necesario, configure una autorización en IAM para Event Streams para dirigirse a un proveedor de KMS como Key Protect y actualice la página.
    • En Punto final de servicio, seleccione una opción con una red Privada.
  2. Espere unos minutos a que se suministre su instancia de Event Streams.

  3. En la instancia de Event Streams, cree un tema, como por ejemplo kafka-java-console-sample-topic.

  4. Cree una clave de servicio para las credenciales en la instancia de Event Streams en el punto final de servicio de nube privada.

    • <name>: Introduzca un nombre para la clave de servicio.
    • <event_streams_instance>: Sustitúyalo por el nombre de su instancia de Event Streams.
    ibmcloud resource service-key-create <name> Writer --instance-name <event_streams_instance> --service-endpoint private
    
  5. En la salida del mandato anterior, obtenga los detalles que necesita para realizar una llamada REST.

    • api_key
    • kafka_http_url

    Salida de ejemplo:

    api_key:      123465123456123465123465123465123465
    kafka_http_url:           https://mh-<id>.private.us-south.messagehub.appdomain.cloud
    
  6. Desde el panel de control de Monitoring, haga clic en Abrir panel de control para la instancia de Monitoring que desee utilizar.

  7. Pulse Empezar > Configurar un canal de notificación > Configurar canal de notificación. Se abre la página Valores.

  8. Pulse + Añadir canal de notificación y seleccione la opción Webhook.

  9. Configure el canal de notificación de webhook. Después de crear el canal de notificación de webhook, debe continuar para configurar la autenticación para el canal.

    • Para URL, introduzca el kafka_http_url de la clave de servicio y añada la ruta /topics/<topic>/records a la URL. <topic> » es el nombre del tema que ha creado en su instancia de Event Streams.
    • En Name, especifique un nombre para el canal de notificación de webhook.
    • Deje los demás campos con sus valores predeterminados.
    • Pulse Guardar para crear el canal.
  10. Obtenga una señal de IAM para autenticar las solicitudes en la API de Monitoring.

  11. Ejecute curl sobre la API de Monitoring para listar los canales de notificación.

  • Sustituye <region> por la región de tu instancia de Monitoring, como us-east.
  • Reemplaza <token> con el token IAM que recuperaste anteriormente.
curl ’https://<region>.monitoring.cloud.ibm.com/api/notificationChannels' --header ‘Authorization: Bearer <token>’ | jq

En la salida, anote el id del canal de notificación donde el campo options.url coincide con el URL que ha creado anteriormente.

 {
     "id": 123,
     "version": 6,
     ...
     "options": {
         "notifyOnOk": true,
         "url": "https://mh-<id>.private.us-south.messagehub.appdomain.cloud",
         "notifyOnResolve": true
     }
 },
  1. Ejecute curl sobre la API de Monitoring para añadir la cabecera de autenticación al canal de notificación de webhook.
  • Sustituye <region> por la región de tu instancia de Monitoring, como us-east.
  • Reemplaza <id> con el ID del canal de notificación que recuperaste anteriormente.
  • Reemplaza <token> con el token IAM que recuperaste anteriormente.
curl -X PUT ’https://<region>.monitoring.cloud.ibm.com/api/notificationChannels/<id>' \
--header ‘Content-Type: application/json’
--header ‘Authorization: Bearer <token>’ -d @/tmp/notification.json
  1. Vuelva a ejecutar curl sobre la API de Monitoring para confirmar que el canal de notificación se ha actualizado con la cabecera de autenticación.
  • Sustituye <region> por la región de tu instancia de Monitoring, como us-east.
  • Reemplaza <token> con el token IAM que recuperaste anteriormente.
curl ’https://<region>.monitoring.cloud.ibm.com/api/notificationChannels' --header ‘Authorization: Bearer <token>’ | jq

En la salida, observe que se ha añadido el campo additionalHeaders.X-Auth-Token al canal de notificación.

{
"notificationChannel":
    {
        "id": 123,
        ....
        "options": {
            "notifyOnOk": true,
            "url": "https://mh-<id>.private.us-south.messagehub.appdomain.cloud/topics/kafka-java-console-sample-topic/records",
            "notifyOnResolve": true,
            "additionalHeaders": {
                "X-Auth-Token": "123456123456123456123456123465123456"
    ...
  1. Configure una alerta que utilice el canal de notificación de webhook que ha creado para Event Streams.

Ahora, cuando se desencadene una alerta desde Event Streams, puede revisar los detalles en la instancia de Monitoring.