Información general

Utiliza los tiempos de inactividad para eliminar las alertas innecesarias durante el mantenimiento programado, las pruebas o el escalado automático de eventos. Utiliza la API de tiempo de inactividad para gestionar el formato de los cronogramas de mantenimiento avanzado o para silenciar monitores dinámicamente, por ejemplo cuando se redimensionan las instancias en la nube.

Esta guía describe cómo configurar tiempos de inactividad para los siguientes casos de uso:

Requisitos previos

Dado que esta guía describe el uso de la API, necesitarás una clave de API y una clave de aplicación con privilegios de administrador. Estas claves están disponibles en la página de claves de API de tu cuenta Datadog. Sustituye todas las apariciones de <DATADOG_API_KEY> y <DATADOG_APP_KEY> por tu clave de API de Datadog y tu clave de aplicación de Datadog, respectivamente.

Esta guía también asume que tienes un terminal con CURL y que has revisado la página de la documentación de los tiempos de inactividad principal.

Casos de uso

Tiempo de inactividad durante el fin de semana

Si monitorizas servicios que sólo se utilizan durante la semana, como el ERP de tu empresa o el software de contabilidad, es posible que sólo quieras recibir alertas durante la semana. Con la siguiente llamada a la API, durante el fin de semana puedes silenciar las alertas de todos los monitores con la etiqueta (tag) env:prod.

curl -X POST "https://api.<DATADOG_SITE>/api/v2/downtime" \
-H "Content-type: application/json" \
-H "DD-API-KEY: ${api_key}" \
-H "DD-APPLICATION-KEY: ${app_key}" \
-d '{"data":{"type":"downtime","attributes":{"monitor_identifier":{"monitor_tags":["*"]},"scope":"env:prod","display_timezone":"Europe/Berlin","message":"","mute_first_recovery_notification":false,"notify_end_types":["expired","canceled"],"notify_end_states":["alert","warn","no data"],"schedule":{"timezone":"Europe/Berlin","recurrences":[{"start":"2023-09-16T00:00","duration":"24h","rrule":"FREQ=WEEKLY;INTERVAL=1;BYDAY=SA,SU"}]}}}'

También puedes añadir un message a tu tiempo de inactividad para que los demás conozcan la razón y el propósito del tiempo de inactividad que estás creando. Por ejemplo, Muting all monitors in production environment over the weekend.

Sustituye el valor del parámetro <DATADOG_SITE> por el del sitio de tu cuenta Datadog. Para ello, consulta la documentación de los sitios Datadog. Sustituye los parámetros start y end para que coincidan con el cronograma deseado. Por ejemplo

  • start=$(date +%s)
  • end=$(date -v+24H +%s)

Y luego, en el comando cURL, utiliza: "start": '"${start}"'.

Respuesta:

{
  "data": {
    "id": "16d09s97-1a70-11ee-8319-dasan1997",
    "type": "downtime",
    "attributes": {
      "scope": "env:prod",
      "canceled": null,
      "schedule": {
        "current_downtime": {
          "start": "2023-09-16T22:00:00+00:00",
          "end": "2023-09-17T22:00:00+00:00"
        },
        "timezone": "Europe/Berlin",
        "recurrences": [
          {
            "start": "2023-09-16T00:00",
            "duration": "24h",
            "rrule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=SA,SU"
          }
        ]
      },
      "notify_end_states": ["warn", "alert", "no data"],
      "monitor_identifier": { "monitor_tags": ["*"] },
      "status": "scheduled",
      "display_timezone": "Europe/Berlin",
      "notify_end_types": ["canceled", "expired"],
      "created": "2023-07-04T13:41:06.855440+00:00",
      "modified": "2023-07-04T13:41:06.855440+00:00",
      "mute_first_recovery_notification": false,
      "message": ""
    },
    [..]
  },
  [..]
}

Abre la página Gestionar tiempos de inactividad y programa un nuevo tiempo de inactividad. Selecciona recurring:

Downtimes configuration using recurring schedule to mute alerts over the weekend (Configuración de tiempos de inactividad utilizando un cronograma recurrente para silenciar las alertas durante el fin de semana)

Tiempo de inactividad fuera del horario laboral

Utilizando el mismo ejemplo, es posible que también quieras silenciar este servicio durante los días laborables, fuera del horario laboral.

Con la siguiente llamada a la API, puedes silenciar las alertas todos los días laborables de 20:00 a 6:00:

curl -X POST "https://api.<DATADOG_SITE>/api/v1/downtime" \
-H "Content-type: application/json" \
-H "DD-API-KEY: ${api_key}" \
-H "DD-APPLICATION-KEY: ${app_key}" \
-d '{"data":{"type":"downtime","attributes":{"monitor_identifier":{"monitor_tags":["*"]},"scope":"env:prod","display_timezone":"Europe/Berlin","message":"","mute_first_recovery_notification":false,"notify_end_types":["expired","canceled"],"notify_end_states":["alert","warn","no data"],"schedule":{"timezone":"Europe/Berlin","recurrences":[{"start":"2023-07-10T18:00","duration":"12h","rrule":"FREQ=DAILY;INTERVAL=1"}]}}}}'

También puedes añadir un message a tu tiempo de inactividad para que los demás conozcan la razón y el propósito del tiempo de inactividad que estás creando. Sustituye el parámetro <DATADOG_SITE> por el del sitio de tu cuenta Datadog. Para ello, consulta la documentación de los sitios Datadog. Sustituye los parámetros start y end para que coincidan con el cronograma deseado.

Respuesta:

{
  "data": {
    "type": "downtime",
    "id": "16d09s97-1a70-11ee-8319-dasan1997",
    "attributes": {
      "message": "",
      "mute_first_recovery_notification": false,
      "canceled": null,
      "scope": "env:prod",
      "monitor_identifier": { "monitor_tags": ["*"] },
      "modified": "2023-07-05T08:12:17.145771+00:00",
      "created": "2023-07-05T08:12:17.145771+00:00",
      "status": "scheduled",
      "display_timezone": "Europe/Berlin",
      "schedule": {
        "recurrences": [
          {
            "duration": "12h",
            "rrule": "FREQ=DAILY;INTERVAL=1",
            "start": "2023-07-10T18:00"
          }
        ],
        "current_downtime": {
          "end": "2023-07-11T04:00:00+00:00",
          "start": "2023-07-10T16:00:00+00:00"
        },
        "timezone": "Europe/Berlin"
      },
      "notify_end_states": ["alert", "warn", "no data"],
      "notify_end_types": ["canceled", "expired"]
    },
    [..]
  },
  [..]
}

Abre la página Gestionar tiempos de inactividad y programa un nuevo tiempo de inactividad. Selecciona recurring:

Downtimes configuration using recurring schedule to mute alerts outside of business hours (Configuración de tiempos de inactividad utilizando un cronograma recurrente para silenciar las alertas fuera del horario laboral)

Tiempo de inactividad combinado para aplicar fuera del horario laboral y durante fin de semana

Para los casos de uso en los que sólo quieras monitorizar notificaciones durante el horario laboral, silencia los monitores durante la semana y también durante el fin de semana. Ambas opciones pueden combinarse en un único tiempo de inactividad. Continuando con el ejemplo anterior de Tiempo de inactividad fuera del horario laboral:

Con la siguiente llamada a la API, puedes silenciar las alertas todos los días laborables de 20:00 a 6:00 y también durante todo el fin de semana:

curl -X POST "https://api.<DATADOG_SITE>/api/v1/downtime" \
-H "Content-type: application/json" \
-H "DD-API-KEY: ${api_key}" \
-H "DD-APPLICATION-KEY: ${app_key}" \
-d '{"data":{"type":"downtime","attributes":{"monitor_identifier":{"monitor_tags":["*"]},"scope":"env:prod","display_timezone":"Europe/Berlin","message":"","mute_first_recovery_notification":false,"notify_end_types":["expired","canceled"],"notify_end_states":["alert","warn","no data"],"schedule":{"timezone":"Europe/Berlin","recurrences":[{"start":"2023-07-09T18:00","duration":"12h","rrule":"FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR"},{"start":"2023-07-09T00:00","duration":"24h","rrule":"FREQ=WEEKLY;INTERVAL=1;BYDAY=SA,SU"}]}}}'

También puedes añadir un message a tu tiempo de inactividad para que los demás conozcan la razón y el propósito del tiempo de inactividad que estás creando. Sustituye el parámetro <DATADOG_SITE> por el del sitio de tu cuenta Datadog. Para ello, consulta la documentación de los sitios Datadog. Sustituye los parámetros start y end para que coincidan con el cronograma deseado.

Respuesta:

{
  "data": {
    "type": "downtime",
    "id": "16d09s97-1a70-11ee-8319-dasan1997",
    "attributes": {
      "monitor_identifier": { "monitor_tags": ["*"] },
      "created": "2023-07-05T08:36:00.917977+00:00",
      "message": "",
      "schedule": {
        "current_downtime": {
          "start": "2023-07-08T22:00:00+00:00",
          "end": "2023-07-10T04:00:00+00:00"
        },
        "timezone": "Europe/Berlin",
        "recurrences": [
          {
            "start": "2023-07-09T18:00",
            "duration": "12h",
            "rrule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=SU,MO,TU,WE,TH,FR"
          },
          {
            "start": "2023-07-09T00:00",
            "duration": "24h",
            "rrule": "FREQ=WEEKLY;INTERVAL=1;BYDAY=SA,SU"
          }
        ]
      },
      "notify_end_states": ["alert", "warn", "no data"],
      "status": "scheduled",
      "scope": "env:prod",
      "modified": "2023-07-05T08:36:00.917977+00:00",
      "mute_first_recovery_notification": false,
      "notify_end_types": ["expired", "canceled"],
      "display_timezone": "Europe/Berlin",
      "canceled": null
    },
    [..]
  },
  [..]
}

Abre la página Gestionar tiempos de inactividad y añade un nuevo tiempo de inactividad. Selecciona recurring:

Downtimes configuration using recurring schedule to mute alerts over the outside of business hours and during the weekend (Configuración de tiempos de inactividad utilizando un cronograma recurrente para silenciar las alertas fuera del horario laboral y durante el fin de semana)

Tiempo de inactividad durante el enésimo día laborable del mes

Para programar cronogramas de mantenimiento más avanzados, puedes utilizar reglas RRULE.

Una regla RRULE (o regla de recurrencia) es un nombre de propiedad de la RFC de iCalendar, que es el estándar para la definición de recurrencias de eventos.

No son compatibles los atributos que especifican la duración de la RRULE (por ejemplo, DTSTART, DTEND, DURATION). Consulta la RFC para conocer los posibles atributos. Puedes utilizar esta herramienta para generar reglas RRULE y pegarlas en tu llamada a la API.

Ejemplo: la aplicación ERP se actualiza todos los segundos martes de cada mes para aplicar parches y correcciones entre las 8.00 y las 10.00. Para ello, los monitores tienen un contexto app:erp, por lo que esto se utiliza en el contexto del tiempo de inactividad.

Los parámetros start y end deben coincidir con el inicio y el fin previstos para el primer día de la regla recurrente. Por lo que, suponiendo que el primer segundo martes de nuestra regla sea el martes 11 de julio, la fecha de inicio tiene que ser 11 de julio a las 8:00 y es necesario establecer una duración de dos horas.

Llamada a la API:

curl -X POST "https://api.<DATADOG_SITE>/api/v1/downtime" \
-H "Content-type: application/json" \
-H "DD-API-KEY: ${api_key}" \
-H "DD-APPLICATION-KEY: ${app_key}" \
-d '{"data":{"type":"downtime","attributes":{"monitor_identifier":{"monitor_tags":["*"]},"scope":"env:prod","display_timezone":"Europe/Berlin","message":"","mute_first_recovery_notification":false,"notify_end_types":["expired","canceled"],"notify_end_states":["alert","warn","no data"],"schedule":{"timezone":"Europe/Berlin","recurrences":[{"start":"2023-07-11T08:00","duration":"2h","rrule":"FREQ=DAILY;INTERVAL=1;BYDAY=2TU"}]}}}'

Sustituye el valor del parámetro <DATADOG_SITE> por el del sitio de tu cuenta Datadog. Para ello, consulta la documentación de los sitios Datadog. Sustituye los parámetros start y end para que coincidan con el cronograma deseado.

Respuesta:

{
  "data": {
    "type": "downtime",
    "id": "16d09s97-1a70-11ee-8319-dasan1997",
    "attributes": {
      "mute_first_recovery_notification": false,
      "notify_end_types": ["canceled", "expired"],
      "created": "2023-07-05T08:50:19.678427+00:00",
      "display_timezone": "Europe/Berlin",
      "modified": "2023-07-05T08:50:19.678427+00:00",
      "status": "scheduled",
      "canceled": null,
      "notify_end_states": ["warn", "alert", "no data"],
      "message": "",
      "schedule": {
        "recurrences": [
          {
            "duration": "2h",
            "start": "2023-07-11T08:00",
            "rrule": "FREQ=DAILY;INTERVAL=1;BYDAY=2TU"
          }
        ],
        "current_downtime": {
          "end": "2023-07-11T08:00:00+00:00",
          "start": "2023-07-11T06:00:00+00:00"
        },
        "timezone": "Europe/Berlin"
      },
      "scope": "env:prod",
      "monitor_identifier": { "monitor_tags": ["*"] }
    },
    [..]
  },
  [..]
}

Abre la página Gestionar tiempos de inactividad y añade un nuevo tiempo de inactividad. Selecciona recurring y luego selecciona Use RRULE.

Downtimes configuration using recurring RRULE schedule to mute alerts on the 2nd Tuesday of every month (Configuración de tiempos de inactividad utilizando un cronograma recurrente con reglas RRULE para silenciar las alertas el segundo martes de cada mes)

Para leer más

PREVIEWING: brett.blue/metric-mapping-edits