Compartir vía


Sondeos de estado en Azure Container Apps

Los sondeos de estado de Azure Container Apps permiten que el entorno de ejecución de Container Apps inspeccione periódicamente el estado de las aplicaciones de contenedor.

Puede configurar sondeos mediante TCP o HTTP(S) exclusivamente.

Container Apps admite los siguientes sondeos:

Sondeo Descripción
Startup Comprueba si la aplicación se ha iniciado correctamente. Esta comprobación es independiente del sondeo de ejecución y se ejecuta durante la fase de inicio inicial de la aplicación.
Ejecución Comprueba si la aplicación sigue en ejecución y responde.
Preparación Comprueba si una réplica está lista para controlar las solicitudes entrantes.

Para obtener una lista completa de la especificación de sondeo admitida en Azure Container Apps, consulte Especificaciones de la API de REST de Azure.

Sondeos HTTP

Los sondeos HTTP permiten implementar lógica personalizada para comprobar el estado de las dependencias de la aplicación antes de notificar un estado correcto.

Configure los puntos de conexión de sondeo de estado para que respondan con un código de estado HTTP mayor o igual que 200 y menor que 400 para indicar que es correcto. Cualquier código de respuesta fuera de este intervalo indica un error.

En el ejemplo siguiente se muestra cómo implementar un punto de conexión de ejecución en JavaScript.

const express = require('express');
const app = express();

app.get('/liveness', (req, res) => {
  let isSystemStable = false;
  
  // check for database availability
  // check filesystem structure
  //  etc.

  // set isSystemStable to true if all checks pass

  if (isSystemStable) {
    res.status(200); // Success
  } else {
    res.status(503); // Service unavailable
  }
})

Sondeos TCP

Los sondeos TCP esperan a que se establezca una conexión con el servidor para indicar que se ha establecido correctamente. Se produce un error en el sondeo si no se puede establecer una conexión a la aplicación.

Restricciones

  • Solo puede agregar un sondeo de cada tipo por contenedor.
  • No se admiten los sondeos exec.
  • Los valores de puerto deben ser enteros. No se admiten puertos con nombre.
  • gRPC no se admite.

Ejemplos

En la siguiente lista de códigos se muestra cómo puede definir sondeos de estado para los contenedores.

Los marcadores de posición ... indican que se ha omitido código. Consulte Especificación de la API de plantilla de ARM de Container Apps para obtener detalles completos de la plantilla de ARM.

{
  ...
  "containers":[
    {
      "image":"nginx",
      "name":"web",
      "probes": [
        {
          "type": "liveness",
          "httpGet": {
            "path": "/health",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "liveness probe"
              }]
          },
          "initialDelaySeconds": 7,
          "periodSeconds": 3
        },
        {
          "type": "readiness",
          "tcpSocket": {
            "port": 8081
          },
          "initialDelaySeconds": 10,
          "periodSeconds": 3
        },
        {
          "type": "startup",
          "httpGet": {
            "path": "/startup",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "startup probe"
              }]
          },
          "initialDelaySeconds": 3,
          "periodSeconds": 3
        }]
    }]
  ...
}

La configuración opcional failureThreshold define el número de intentos de Container Apps si se produce un error en la ejecución del sondeo. Los intentos que superan la cantidad failureThreshold provocan resultados diferentes en cada tipo de sondeo.

Configuración predeterminada

Si la entrada está habilitada, los siguientes sondeos predeterminados se añaden automáticamente al contenedor de aplicaciones principal si no se define ninguno para cada tipo.

Tipos de sondeo Valores predeterminados
Startup Protocolo: TCP
Puerto: puerto de destino de entrada
Tiempo de espera: 3 segundos
Período: 1 segundo
Retraso inicial: 1 segundo
Umbral correcto: 1
Umbral de error: 240
Preparación Protocolo: TCP
Puerto: puerto de destino de entrada
Tiempo de espera: 5 segundos
Período: 5 segundos
Retraso inicial: 3 segundos
Umbral correcto: 1
Umbral de error: 48
Ejecución Protocolo: TCP
Puerto: puerto de destino de entrada

Si la aplicación tarda mucho en iniciarse, algo que es común en Java, suele ser necesario personalizar los sondeos para que el contenedor no se bloquee.

En el ejemplo siguiente se muestra cómo configurar los sondeos de ejecución y preparación para ampliar los tiempos de inicio.

"probes": [
       {
        "type": "liveness",
        "failureThreshold": 3,
        "periodSeconds": 10,
        "successThreshold": 1,
        "tcpSocket": {
          "port": 80
        },
        "timeoutSeconds": 1
       },
       {
         "type": "readiness",
         "failureThreshold": 48,
         "initialDelaySeconds": 3,
         "periodSeconds": 5,
         "successThreshold": 1,
         "tcpSocket": {
           "port": 80
          },
          "timeoutSeconds": 5
       }]

Pasos siguientes