共用方式為


Azure Container Apps 中的健康情況探查

Azure Container Apps 健康情況探查可讓 Container Apps 運行時間定期檢查容器應用程式的狀態。

您可以單獨使用 TCP 或 HTTP(S) 來設定探查。

Container Apps 支援下列探查:

探查 描述
啟動 檢查您的應用程式是否已順利啟動。 這項檢查與即時探查不同,會在應用程式的初始啟動階段執行。
活躍度 檢查您的應用程式是否仍在執行中並回應。
整備程度 檢查複本是否準備好處理傳入要求。

如需 Azure Container Apps 中支援之探查規格的完整清單,請參閱 Azure REST API 規格

HTTP 探查

HTTP 探查可讓您實作自定義邏輯,以在報告狀況良好的狀態之前,先檢查應用程式相依性的狀態。

設定健康情況探查端點,以響應 HTTP 狀態代碼大於或等於 200 且小於 400 表示成功。 此範圍以外的任何其他回應碼都表示失敗。

下列範例示範如何在 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
  }
})

TCP 探查

TCP 探查會等候與伺服器建立連線,以指出成功。 如果探查無法建立應用程式連線,探查就會失敗。

限制

  • 每個容器只能新增每個探查類型的其中一個。
  • exec 不支援探查。
  • 埠值必須是整數;不支援具名埠。
  • 不支援 gRPC。

範例

下列程式代碼清單示範如何定義容器的健康情況探查。

... 位元表示省略的程序代碼。 如需 完整的 ARM 範本詳細資料,請參閱容器應用程式 ARM 範本 API 規格

{
  ...
  "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
        }]
    }]
  ...
}

選擇性 failureThreshold 設定會定義如果執行失敗,Container Apps 嘗試執行探查的嘗試次數。 超過 failureThreshold 數量的嘗試會針對每個探查類型造成不同的結果。

預設的組態

如果啟用輸入,如果每個類型都未定義任何探查,則會自動將下列預設探查新增至主要應用程式容器。

注意

使用取用方案時,預設探查目前不會套用至工作負載配置文件環境。 此行為未來可能會變更。

探查類型 預設值
啟動 通訊協定: TCP
埠:輸入目標埠
逾時:3 秒
期間:1 秒
初始延遲:1 秒
成功閾值:1
失敗閾值:240
整備程度 通訊協定: TCP
埠:輸入目標埠
逾時:5 秒
期間:5 秒
初始延遲:3 秒
成功閾值:1
失敗閾值:48
活躍度 通訊協定: TCP
埠:輸入目標埠

如果您的應用程式需要較長的時間才能啟動(這在 Java 中很常見),您通常需要自定義探查,讓容器不會當機。

下列範例示範如何設定活躍度和整備探查,以擴充啟動時間。

"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
       }]

下一步