Azure 容器應用程式 自定義容器會話

除了 Azure 容器應用程式動態工作階段提供的內建程式碼解釋器之外,您也可以使用自訂容器來定義您自己的工作階段沙箱。

備註

本文僅適用於自訂容器會話池。 除非另有說明,以下描述的功能無法用於程式碼解譯器會話池。

自定義容器工作階段的用途

自訂容器可讓您建置專為您需求量身打造的解決方案。 它們讓你能在快速且短暫的環境中執行程式碼或應用程式。 它們提供具備 Hyper-V 的安全沙箱化空間。 此外,也可以設定為可選的網路隔離功能。 這些範例包含:

  • 程式碼直譯器:若您在安全沙盒中執行不受信任的程式碼,且使用內建直譯器不支援的語言,或需要完全控制該直譯器環境,請使用。

  • 隔離執行:用於在敵對多租戶情境下運行應用程式,每個租戶或使用者都有自己的沙盒環境。 這些環境會彼此隔離,且與主應用程式隔離。 一些範例包括執行使用者提供程式碼的應用程式、授與使用者存取雲端式命令列、AI 代理程式和開發環境。

使用自訂容器工作階段

要使用自訂容器會話,請建立一個帶有自訂容器映像的會話池。 Azure 容器應用程式會自動使用提供的映像,在自己的 Hyper-V 沙箱中啟動容器。 容器啟動後,即可供工作階段集區使用。

當您的應用程式要求工作階段時,系統會立即從集區配置執行個體。 工作階段會保持作用中狀態,直到其進入閒置狀態,然後會自動停止並終結。

工作階段集區的容器探查

使用容器探測器來設定自訂容器會話池的健康檢查,並維持會話實例的健康狀態。

備註

容器探測器需要 API 版本 2025-02-02-preview 或更新版本。

容器探測讓你能為會話容器定義健康檢查,類似 Azure 容器應用中的健康探針。 設定後,會話池監控每個會話實例並移除不健康的實例。

工作階段集區:

  • 根據探查結果,確保就緒的工作階段執行個體維持健全。
  • 自動移除不健康的會話實例。
  • 擴展以維持設定的 readySessionInstances 計數,並確保工作階段維持健全。

工作階段集區支援 Liveness 和 Startup 探查類型。 欲了解更多探針運作方式,請參閱 Azure 容器應用程式中的健康探針。

Configuration

建立或更新工作階段集區時,請在要求承載的 properties.customContainerTemplate.containers 區段中指定探查。

完整 API 規範請參閱 SessionPools API。

範例

{
  "properties": {
    "customContainerTemplate": {
      "containers": [
        {
          "name": "my-session-container",
          "image": "myregistry.azurecr.io/my-session-image:latest",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080
              },
              "periodSeconds": 10,
              "failureThreshold": 3
            },
            {
              "type": "Startup",
              "httpGet": {
                "path": "/ready",
                "port": 8080
              },
              "periodSeconds": 5,
              "failureThreshold": 30
            }
          ]
        }
      ]
    },
    "dynamicPoolConfiguration": {
      "readySessionInstances": 5
    }
  }
}

Troubleshooting

如果您的工作階段集區未維持預期數量且狀況良好的 readySessionInstances,請考慮下列修正方式:

  • 檢查貨櫃記錄。 檢視會話容器日誌,找出探測端點或容器啟動的問題。 請參閱 「查看自訂容器會話池的日誌」。
  • 確認探測器配置。 確保探測路徑、埠口和閾值都正確配置符合您的應用需求。
  • 檢視容器健康。 檢查容器內部是否有問題阻礙探測端點成功回應。

停止工作階段

使用 Stop Session API 在自訂容器會話池中終止會話。

會話池支援自動會話管理,透過 lifecycleConfiguration,根據你的設定處理會話生命週期。 不過,有些情況下你可能需要更多控制。

分配一個會話後,你可以隨時呼叫這個 API 手動終止它。 此方法在下列情況下很有用:

  • 您需要在工作階段達到存留時間之前清除資源。
  • 您的工作階段集區已達到並行工作階段數目上限,因此您需要為新的工作階段釋放容量。
  • 一個工作階段完成後,你想立即釋放資源。

API 參考資料

請求

POST <POOL_MANAGEMENT_ENDPOINT>/.management/stopSession?api-version=2025-02-02-preview&identifier=<SESSION_ID>

參數

參數 類型 Required 描述
api-version 字串 是的 使用的 API 版本(例如 2025-02-02-preview)。
identifier 字串 是的 停止會話的唯一識別碼。

Examples

請求

POST https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io/.management/stopSession?api-version=2025-02-02-preview&identifier=testSessionIdentifier

回應

HTTP/1.1 200 OK
Content-Type: text/plain

Session testSessionIdentifier in session pool testSessionPool stopped.

取得會話資訊

你可以查詢你的會話池,查看會話狀態、取得到期日細節,並列出所有活躍會話。 此功能有助於監控會話健康狀況、追蹤資源使用情況,以及實施自訂清理工作流程。

取得單一工作階段

要取得特定會話的詳細資訊,請使用以下 getSession 端點:

POST <POOL_MANAGEMENT_ENDPOINT>/.management/getSession?identifier=<SESSION_ID>&api-version=2025-02-02-preview
Authorization: Bearer <TOKEN>

getSession 端點會傳回工作階段中繼資料,其中包括工作階段識別碼、目前到期時間和建立時間戳記。

SessionView 回應架構

Field 類型 Required 描述
identifier 字串 是的 你提供的會話識別碼
etag 字串 是的 用於會話的不透明版本識別碼。 你可以用這個識別碼來偵測變更。
expiresAt 日期時間 是的 會話將終止的 UTC 時間戳記
createdAt 日期時間 No 會話建立時間戳記
lastAccessedAt 日期時間 No 本次會話最後一次請求的時間戳記

範例要求和回應

curl -X POST "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/getSession?identifier=user-123&api-version=2025-02-02-preview" \
  -H "Authorization: Bearer $TOKEN"

成功回應(HTTP 200):

{
  "identifier": "user-123",
  "etag": "a1b2c3d4",
  "expiresAt": "2026-04-30T14:30:00Z",
  "createdAt": "2026-04-30T13:30:00Z",
  "lastAccessedAt": "2026-04-30T14:29:00Z"
}

列出池中的所有會話

若要擷取工作階段集區中所有工作階段的清單,請使用 listSessions 端點:

POST <POOL_MANAGEMENT_ENDPOINT>/.management/listSessions?skip=0&api-version=2025-02-02-preview
Authorization: Bearer <TOKEN>

分頁

這個列表端點支援跳過的分頁方式。 預設情況下,每頁最多回傳 300 個會話。 使用 skip 查詢參數來瀏覽結果。

參數 描述
skip 從一開始可以跳過的會話數量(預設:0)
nextLink 下一頁結果的完整網址(當有更多結果時附上)

ApiCollectionEnvelope 回應架構

Field 類型 描述
value SessionView[] 會話物件陣列
count 整數 本頁會議次數
nextLink 字串 下一頁的網址(若無其他結果則為空)

分頁迴路範例

POOL_URL="https://my-pool.env-id.westus2.azurecontainerapps.io"
next_url="$POOL_URL/.management/listSessions?skip=0&api-version=2025-02-02-preview"

while [ -n "$next_url" ]; do
  response=$(curl -s -X POST "$next_url" \
    -H "Authorization: Bearer $TOKEN")

  echo "$response" | jq '.value[] | {identifier, expiresAt}'

  next_url=$(echo "$response" | jq -r '.nextLink // empty')
done

範例回應(HTTP 200):

{
  "value": [
    {
      "identifier": "user-123",
      "etag": "a1b2c3d4",
      "expiresAt": "2026-04-30T14:30:00Z",
      "createdAt": "2026-04-30T13:30:00Z",
      "lastAccessedAt": "2026-04-30T14:29:00Z"
    },
    {
      "identifier": "user-456",
      "etag": "e5f6a7b8",
      "expiresAt": "2026-04-30T14:30:00Z",
      "createdAt": "2026-04-30T13:30:00Z",
      "lastAccessedAt": "2026-04-30T14:29:00Z"
    }
  ],
  "count": 2,
  "nextLink": "https://my-pool.env-id.westus2.azurecontainerapps.io/.management/listSessions?skip=300"
}

記錄

自訂容器會話池與 Azure 監視器 及 Log Analytics 整合。 只有當你的容器寫入輸出到 stdout 或 stderr時,應用程式日誌才會被擷取,所以請確保你的應用程式會將日誌傳送到主控台。

先決條件

  • 一個帶有自訂容器會話池的 Azure 容器應用程式 環境
  • 一個日誌分析工作區,或在設定時建立一個

設定記錄

啟用 Azure 監視器 記錄功能

  1. 在 Azure 入口網站中,導覽到你的 容器應用程式環境。
  2. 在 監控中,選擇 日誌選項。
  3. 將日誌目的地設為Azure 監視器。

設定診斷設定

  1. 在你的容器應用程式環境中,於 監控 下選擇 診斷設定。
  2. 選取 +新增診斷設定。
  3. 為你的診斷環境命名。
  4. 在 「日誌」中,選擇你想捕捉的會話相關日誌類別。
  5. 在 [目的地詳細資料] 底下,選取 [傳送至 Log Analytics 工作區]。
  6. 選擇你的日誌分析工作空間,或建立一個新的工作空間。
  7. 選取 [儲存]。

Log Analytics 資料表

日誌類別 Log Analytics 資料表 描述
應用程式記錄 AppEnvSessionConsoleLogs 容器化應用程式所輸出的標準輸出(stdout)與標準誤差(stderr)。
平台記錄 AppEnvSessionLifecycleLogs、AppEnvSessionPoolEvents 平台產生的事件,涉及會話池分配、生命週期及運作狀態。

若日誌直接傳送至 Log Analytics,資料表會使用 _CL 後綴,例如 AppEnvSessionConsoleLogs_CL。 當日誌經過 Azure 監視器 診斷設定時,資料表名稱中不會包含 _CL 後綴。

查看會話日誌

在診斷設定設定完成後,日誌會被傳送到你的日誌分析工作區。

Log Analytics 中的查詢日誌

  1. 在 Azure 入口網站中,導覽到你的 Log Analytics 工作空間。
  2. 在左側選單中,選擇 「日誌」。
  3. 若查詢為 簡易模式,請選擇 KQL 模式。
  4. 使用 Kusto 查詢語言(KQL)來查詢會話日誌。

範例查詢

查看會議的最新主控台日誌:

AppEnvSessionConsoleLogs
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc
| take 100

查看會話生命週期事件:

AppEnvSessionLifecycleLogs
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc

查看連線池事件:

AppEnvSessionPoolEvents
| where TimeGenerated > ago(1h)
| order by TimeGenerated desc

Metrics

Azure 容器應用程式 會為自訂容器會話池產生 Azure 監視器 指標。 利用這些指標追蹤池塘容量與活動隨時間的變化。

支援的計量

完整清單請參閱 支援指標 - Microsoft.App/sessionpools - Azure 監視器。

Metric REST API 中的名稱 單位 Aggregation 維度 時間顆粒 DS 匯出
正在執行的會話數量
工作階段集區中正在執行的工作階段 Pod 數量
PoolExecutingPodCount Count 總計(總),平均值,最大值,最小值 poolName PT1M 是的
建立會話計數
在工作階段集區中建立工作階段 Pod 的數目
PoolPendingPodCount Count 總計(總),平均值,最大值,最小值 poolName PT1M 是的
就緒會話計數
工作階段集區中就緒的工作階段 Pod 數量
PoolReadyPodCount Count 總計(總),平均值,最大值,最小值 poolName PT1M 是的

查看會話指標

你可以使用 Azure 監視器 或 Container Apps 環境指標來查看基於會話的指標。

Azure 監視器 指標

  1. 打開 Azure 監視器 指標頁面。
  2. 使用 Scope 選擇你自訂的容器會話池。
  3. 選擇一個指標和彙整來查看。

容器應用程式環境指標

  1. 在 Azure 入口網站中,開啟你的容器應用程式環境。
  2. 在 [監視] 下,選取 [計量]。
  3. 使用 Scope 選擇你自訂的容器會話池。
  4. 選擇一個指標和彙整來查看。