除了 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 監視器 記錄功能
- 在 Azure 入口網站中,導覽到你的 容器應用程式環境。
- 在 監控中,選擇 日誌選項。
- 將日誌目的地設為Azure 監視器。
設定診斷設定
- 在你的容器應用程式環境中,於 監控 下選擇 診斷設定。
- 選取 +新增診斷設定。
- 為你的診斷環境命名。
- 在 「日誌」中,選擇你想捕捉的會話相關日誌類別。
- 在 [目的地詳細資料] 底下,選取 [傳送至 Log Analytics 工作區]。
- 選擇你的日誌分析工作空間,或建立一個新的工作空間。
- 選取 [儲存]。
Log Analytics 資料表
| 日誌類別 | Log Analytics 資料表 | 描述 |
|---|---|---|
| 應用程式記錄 | AppEnvSessionConsoleLogs |
容器化應用程式所輸出的標準輸出(stdout)與標準誤差(stderr)。 |
| 平台記錄 |
AppEnvSessionLifecycleLogs、AppEnvSessionPoolEvents |
平台產生的事件,涉及會話池分配、生命週期及運作狀態。 |
若日誌直接傳送至 Log Analytics,資料表會使用 _CL 後綴,例如 AppEnvSessionConsoleLogs_CL。 當日誌經過 Azure 監視器 診斷設定時,資料表名稱中不會包含 _CL 後綴。
查看會話日誌
在診斷設定設定完成後,日誌會被傳送到你的日誌分析工作區。
Log Analytics 中的查詢日誌
- 在 Azure 入口網站中,導覽到你的 Log Analytics 工作空間。
- 在左側選單中,選擇 「日誌」。
- 若查詢為 簡易模式,請選擇 KQL 模式。
- 使用 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 監視器 指標
- 打開 Azure 監視器 指標頁面。
- 使用 Scope 選擇你自訂的容器會話池。
- 選擇一個指標和彙整來查看。
容器應用程式環境指標
- 在 Azure 入口網站中,開啟你的容器應用程式環境。
- 在 [監視] 下,選取 [計量]。
- 使用 Scope 選擇你自訂的容器會話池。
- 選擇一個指標和彙整來查看。