Azure Blob 存储权限和管理
Tempo 需要以下配置才能验证并访问 Azure Blob 存储
- 配置文件中指定的 Storage Account 名称,作为
storage_account_name
,或在环境变量AZURE_STORAGE_ACCOUNT
中指定 - 访问 Storage Account 的凭据,可以是以下之一
- 配置文件中指定的 Storage Account 访问密钥,作为
storage_account_key
,或在环境变量AZURE_STORAGE_KEY
中指定 - 系统分配或用户分配的 Azure 托管身份。要使用 Azure 托管身份,您需要在配置文件中将
use_managed_identity
设置为true
,或将user_assigned_id
设置为您希望使用的托管身份的客户端 ID。- 对于系统分配的托管身份,无需额外配置。
- 对于用户分配的托管身份,您需要在配置文件中将
user_assigned_id
设置为该托管身份的客户端 ID。
- 通过 Azure Workload Identity。要使用 Azure Workload Identity,您需要在集群上启用 Azure Workload Identity,向服务帐户和所需的 Pod 标签添加所需的标签和注解。此外,您还需要将
use_federated_token
设置为true
以利用 Azure Workload Identity。
- 配置文件中指定的 Storage Account 访问密钥,作为
示例配置 (适用于 Tempo 单体模式)
访问密钥
此示例配置展示了如何使用 Helm Chart 和 Kubernetes Secret 中的访问密钥设置 Azure Blob 存储。
tempo:
storage:
trace:
backend: azure
azure:
container_name: container-name
storage_account_name: storage-account-name
storage_account_key: ${STORAGE_ACCOUNT_ACCESS_KEY}
extraArgs:
config.expand-env: true
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: secret-name
key: STORAGE_ACCOUNT_ACCESS_KEY
Azure Workload Identity
这是一个使用 Azure Workload Identity 的示例配置。
tempo:
storage:
trace:
backend: azure
azure:
container_name: container-name
storage_account_name: storage-account-name
use_federated_token: true
示例配置 (适用于 Tempo 分布式模式)
在分布式模式下,trace
配置需要应用于 storage
对象,该对象位于 Values 对象的根部。此外,extraArgs
和 extraEnv
配置需要应用于以下每个服务
- distributor
- compactor
- ingester
- querier
- queryFrontend
storage:
trace:
backend: azure
azure:
container_name: tempo-traces
storage_account_name: stgappgeneraluks
storage_account_key: ${STORAGE_ACCOUNT_ACCESS_KEY}
distributor:
extraArgs:
- "-config.expand-env=true"
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tempo-traces-stg-key
key: tempo-traces-key
compactor:
extraArgs:
- "-config.expand-env=true"
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tempo-traces-stg-key
key: tempo-traces-key
ingester:
extraArgs:
- "-config.expand-env=true"
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tempo-traces-stg-key
key: tempo-traces-key
querier:
extraArgs:
- "-config.expand-env=true"
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tempo-traces-stg-key
key: tempo-traces-key
queryFrontend:
extraArgs:
- "-config.expand-env=true"
extraEnv:
- name: STORAGE_ACCOUNT_ACCESS_KEY
valueFrom:
secretKeyRef:
name: tempo-traces-stg-key
key: tempo-traces-key
Azure blocklist 轮询
如果您在 Azure 上托管 Tempo,可能需要更新两个值以确保 blocklist 轮询持续成功。如果您遇到此问题,请尝试将 blocklist_poll_tenant_index_builders
设置为 1。
此外,如果您看到如下所示的 DNS 故障,请尝试增加 blocklist_poll_jitter_ms
。相关讨论请参见此处。
reading storage container: Head "https://tempoe**************.blob.core.windows.net/tempo/single-tenant/d8aafc48-5796-4221-ac0b-58e001d18515/meta.compacted.json?timeout=61": dial tcp: lookup tempoe**************.blob.core.windows.net on 10.0.0.10:53: dial udp 10.0.0.10:53: operation was canceled
您的最终配置可能看起来像这样
storage:
trace:
blocklist_poll_tenant_index_builders: 1
blocklist_poll_jitter_ms: 500
(可选) 用于清理存储容器的 Storage Account 管理策略
以下 Storage Account 管理策略展示了如何在文件被删除一段时间后清理容器中的文件。
{
"id": "/subscriptions/00000000-0000-0000000000000000000000/resourceGroups/resourceGroupName/providers/Microsoft.Storage/storageAccounts/accountName/managementPolicies/default",
"lastModifiedTime": "2021-11-30T19:19:54.855455+00:00",
"name": "DefaultManagementPolicy",
"policy": {
"rules": [
{
"definition": {
"actions": {
"baseBlob": {
"delete": {
"daysAfterLastAccessTimeGreaterThan": null,
"daysAfterModificationGreaterThan": 60.0
},
"enableAutoTierToHotFromCool": null,
"tierToArchive": null,
"tierToCool": null
},
"snapshot": null,
"version": null
},
"filters": {
"blobIndexMatch": null,
"blobTypes": [
"blockBlob"
],
"prefixMatch": [
"tempo-data"
]
}
},
"enabled": true,
"name": "TempoBlobRetention",
"type": "Lifecycle"
},
{
"definition": {
"actions": {
"baseBlob": null,
"snapshot": null,
"version": {
"delete": {
"daysAfterCreationGreaterThan": 7.0
},
"tierToArchive": null,
"tierToCool": null
}
},
"filters": {
"blobIndexMatch": null,
"blobTypes": [
"blockBlob"
],
"prefixMatch": []
}
},
"enabled": true,
"name": "VersionRetention",
"type": "Lifecycle"
}
]
},
"resourceGroup": "resource-group-name",
"type": "Microsoft.Storage/storageAccounts/managementPolicies"
}