name: runtime-config-flagd description: 通过flagd(OpenFeature)进行特征标志管理。用于在OTel演示环境中列出、检查和切换特征标志。标志控制故障注入场景(支付失败、CPU峰值、内存泄漏等),并可以切换以进行修复。 category: runtime-config required_integrations:
- kubernetes
特征标志管理 (flagd)
工作原理
OpenTelemetry演示使用flagd作为其特征标志提供者。标志存储在Kubernetes ConfigMap中,并由flagd服务加载。服务通过OpenFeature SDK在运行时检查标志,以决定是否注入故障。
标志生命周期:
- 标志定义存在于ConfigMap中(
otel-demo命名空间中的flagd-config) - flagd监视ConfigMap并在更改时热重载
- 服务通过gRPC评估标志并相应行为
- 要修复故障,将标志的默认变体设置为
off
可用脚本
所有脚本位于.claude/skills/runtime-config-flagd/scripts/
list_scenarios.py - 列出故障场景(从此开始)
显示所有可用的故障场景及其当前状态。
python .claude/skills/runtime-config-flagd/scripts/list_scenarios.py
# 仅显示当前活跃的场景
python .claude/skills/runtime-config-flagd/scripts/list_scenarios.py --active-only
# JSON输出
python .claude/skills/runtime-config-flagd/scripts/list_scenarios.py --json
输出包括:标志名称、当前状态(活跃/非活跃)、受影响的服务、效果描述、检测方法和修复步骤。
list_flags.py - 列出所有特征标志
python .claude/skills/runtime-config-flagd/scripts/list_flags.py
# 显示完整的变体详情
python .claude/skills/runtime-config-flagd/scripts/list_flags.py --verbose
# 仅限故障相关标志
python .claude/skills/runtime-config-flagd/scripts/list_flags.py --incidents-only
get_flag.py - 检查特定标志
python .claude/skills/runtime-config-flagd/scripts/get_flag.py <flag_key>
# 示例:
python .claude/skills/runtime-config-flagd/scripts/get_flag.py paymentFailure
python .claude/skills/runtime-config-flagd/scripts/get_flag.py adHighCpu --json
set_flag.py - 切换标志(修复)
# 始终先进行干运行
python .claude/skills/runtime-config-flagd/scripts/set_flag.py <flag_key> <variant> --dry-run
# 然后应用
python .claude/skills/runtime-config-flagd/scripts/set_flag.py <flag_key> <variant>
# 示例:
python .claude/skills/runtime-config-flagd/scripts/set_flag.py paymentFailure off --dry-run
python .claude/skills/runtime-config-flagd/scripts/set_flag.py paymentFailure off
python .claude/skills/runtime-config-flagd/scripts/set_flag.py adHighCpu off
python .claude/skills/runtime-config-flagd/scripts/set_flag.py emailMemoryLeak off
故障场景参考
| 场景 | 标志 | 服务 | 效果 | 修复 |
|---|---|---|---|---|
| 支付失败 | paymentFailure |
payment (Node.js) | 可配置百分比请求失败 | 设置为off |
| 支付不可达 | paymentUnreachable |
payment | 完全不可用 | 设置为off |
| 高CPU | adHighCpu |
ad (Java) | CPU峰值80-100% | 设置为off |
| GC压力 | adManualGc |
ad (Java) | 频繁全GC暂停 | 设置为off |
| Ad故障 | adFailure |
ad (Java) | Ad服务错误 | 设置为off |
| 内存泄漏 | emailMemoryLeak |
email (Ruby) | 几分钟后OOM | 设置为off + 重启pod |
| 延迟峰值 | imageSlowLoad |
image-provider | 5-10秒延迟 | 设置为off |
| Kafka延迟 | kafkaQueueProblems |
checkout/accounting | 消费者延迟 | 设置为off |
| 缓存故障 | recommendationCacheFailure |
recommendation | 缓存未命中风暴 | 设置为off |
| 目录故障 | productCatalogFailure |
product-catalog | 产品查询错误 | 设置为off |
| 购物车故障 | cartFailure |
cart (.NET) | 购物车操作失败 | 设置为off |
| 流量峰值 | loadGeneratorFloodHomepage |
all services | 请求洪流 | 设置为off |
| LLM不准确 | llmInaccurateResponse |
product-reviews | 错误AI内容 | 设置为off |
| LLM速率限制 | llmRateLimitError |
product-reviews | 429错误 | 设置为off |
标志变体参考
标志有不同的变体类型:
布尔标志 (开/关):
adHighCpu,adManualGc,adFailure,paymentUnreachable,cartFailurerecommendationCacheFailure,productCatalogFailurellmInaccurateResponse,llmRateLimitError- 变体:
on(真),off(假)
百分比标志 (分级故障率):
paymentFailure:off(0),10%(0.1),25%(0.25),50%(0.5),75%(0.75),90%(0.95),100%(1)
强度标志 (分级效果):
emailMemoryLeak:off(0),1x(1),10x(10),100x(100),1000x(1000),10000x(10000)imageSlowLoad:off(0),5sec(5000ms),10sec(10000ms)
数字标志:
kafkaQueueProblems:off(0),on(100)loadGeneratorFloodHomepage:off(0),on(100)
修复工作流程
- 识别场景 - 使用
list_scenarios.py --active-only查看活跃故障 - 确认标志 - 使用
get_flag.py <flag_key>验证当前状态 - 干运行 - 使用
set_flag.py <flag_key> off --dry-run预览更改 - 应用 - 使用
set_flag.py <flag_key> off禁用故障 - 验证 - 检查指标/日志以确认问题正在解决
- 修复后 - 一些场景(内存泄漏)可能还需要重启pod
安全
- 始终先进行干运行再设置标志
- 将标志设置为
off总是安全的——它恢复正常行为 - 将标志设置为
on或非零变体会注入故障——仅在有意识时进行 - 标志更改在几秒钟内生效(flagd热重载)
- 对于
emailMemoryLeak,在设置为off后,您可能还需要重启email pod以回收泄漏的内存
快速命令
| 目标 | 命令 |
|---|---|
| 查看活跃故障 | list_scenarios.py --active-only |
| 检查特定标志 | get_flag.py paymentFailure |
| 禁用支付失败 | set_flag.py paymentFailure off |
| 启用50%支付失败 | set_flag.py paymentFailure 50% |
| 禁用所有CPU峰值 | set_flag.py adHighCpu off |
| 查看所有标志详细 | list_flags.py --verbose |