Mapping 映射
什么是 Mapping
Mapping(映射)是告警平台中的一项核心功能,用于为告警添加动态上下文信息,通过将告警数据与其他数据源进行映射关联,从而丰富告警内容。这种富化机制能够帮助运维人员更快地理解告警的业务影响、责任归属和处理方式。
Mapping 的核心价值
- 告警富化:为告警添加额外的上下文信息,使告警更加有价值
- 数据关联:将告警与业务系统、CMDB、资产管理等外部数据源关联
- 自动化处理:基于富化后的信息实现更精准的告警路由和处理
- 减少手动查询:避免运维人员在多个系统间查询相关信息
功能特性
支持的数据源
- CSV 文件:通过上传 CSV 文件导入映射数据
- 手动输入:直接在界面中输入 CSV 格式数据
- 服务拓扑:利用系统中的服务拓扑数据进行映射
映射规则配置
- 优先级设置:控制多个规则的执行顺序
- 条件匹配:支持复杂的匹配条件
- 多级属性映射:支持嵌套结构的数据映射
- 属性名称处理:支持前缀移除等处理
映射执行方式
- 自动执行:告警进入系统时自动应用映射规则
- 手动执行:针对特定告警手动执行映射规则
- 批量执行:对历史告警批量应用映射规则
使用场景
1. 资产信息映射
将告警中的 IP、主机名等信息映射到资产管理系统中的详细信息,如设备类型、位置、购买日期等。
示例:
json
// 告警原始信息
{
"host": "srv-db-01",
"alert": "CPU 使用率超过 90%"
}
// 映射后信息
{
"host": "srv-db-01",
"alert": "CPU 使用率超过 90%",
"asset_type": "数据库服务器",
"location": "上海数据中心",
"purchase_date": "2022-05-15",
"warranty_end": "2025-05-15"
}2. 业务上下文关联
将技术告警与业务服务、业务影响等信息关联,帮助快速评估告警的业务影响程度。
示例:
json
// 告警原始信息
{
"service": "payment-api",
"alert": "服务响应时间超过 2s"
}
// 映射后信息
{
"service": "payment-api",
"alert": "服务响应时间超过 2s",
"business_unit": "支付部门",
"impact_level": "高",
"affected_business": "在线支付流程",
"revenue_impact": "每分钟约 10 万元"
}3. 责任人信息补充
为告警添加负责团队、联系人等信息,实现更精准的告警通知。
示例:
json
// 告警原始信息
{
"application": "crm-system",
"alert": "数据库连接池耗尽"
}
// 映射后信息
{
"application": "crm-system",
"alert": "数据库连接池耗尽",
"team": "CRM开发团队",
"primary_contact": "张三",
"contact_phone": "13800138000",
"secondary_contact": "李四",
"escalation_path": "CRM团队 -> 数据库团队 -> 基础架构团队"
}4. 服务依赖关系
通过拓扑数据,为告警添加服务依赖关系信息,帮助定位根因。
示例:
json
// 告警原始信息
{
"service": "order-service",
"alert": "服务不可用"
}
// 映射后信息
{
"service": "order-service",
"alert": "服务不可用",
"depends_on": ["payment-service", "inventory-service", "user-service"],
"depended_by": ["checkout-ui", "admin-dashboard"],
"critical_path": true
}工作流程
- 规则配置:设置映射规则,包括数据源、匹配条件和字段映射
- 告警接收:系统接收到新告警
- 匹配处理:
- 提取告警中的匹配字段
- 查找符合条件的映射规则
- 按优先级应用匹配的规则
- 数据映射:
- 从映射数据源中查找对应数据
- 将找到的数据添加到告警中
- 结果处理:
- 更新告警的富化字段
- 记录映射执行结果
数据模型
Mapping 规则模型
typescript
interface MappingRule {
id: number;
tenant_id: string;
priority: number;
name: string;
description?: string;
file_name?: string;
created_by?: string;
created_at: Date;
updated_by?: string;
last_updated_at: Date;
disabled: boolean;
override: boolean;
type: "csv" | "topology";
condition?: string;
matchers: string[][];
rows: { [key: string]: any }[];
attributes?: string[];
is_multi_level?: boolean;
new_property_name?: string;
prefix_to_remove?: string;
}CSV 映射数据示例
csv
service,team,contact,severity_level,response_time
payment-api,支付团队,zhangsan@example.com,1,15分钟
order-service,订单团队,lisi@example.com,2,30分钟
user-service,用户团队,wangwu@example.com,3,60分钟配置示例
基本映射规则
yaml
mapping_rule:
name: "服务责任人映射"
priority: 100
type: "csv"
condition: "source == 'prometheus' && has(labels.service)"
matchers:
- ["labels.service", "service"]
rows:
- service: "payment-api"
team: "支付团队"
contact: "zhangsan@example.com"
- service: "order-service"
team: "订单团队"
contact: "lisi@example.com"多级属性映射
yaml
mapping_rule:
name: "服务拓扑映射"
priority: 200
type: "topology"
is_multi_level: true
new_property_name: "service_info"
prefix_to_remove: "topology_"
condition: "has(labels.service)"
matchers:
- ["labels.service", "service_name"]最佳实践
1. 映射数据准备
- 确保 CSV 文件包含完整的头部信息
- 数据尽量规范化,避免特殊字符和格式不一致
- 对于大量数据,建议分批导入,避免性能问题
2. 映射规则设计
- 设置合理的优先级,确保最重要的规则先执行
- 使用明确的匹配条件,避免模糊匹配
- 规则命名应当清晰表达其用途和适用范围
3. 多级映射配置
- 对于复杂数据结构,合理使用多级映射
- 设置适当的属性名前缀,保持命名一致性
- 对于大型拓扑数据,考虑分段映射以提高性能
与其他功能的协同
与 Extraction 的协作
- Extraction:从告警文本中提取结构化信息
- Mapping:将提取的信息与外部数据关联
- 协作流程:先提取关键信息,再进行映射关联
与告警关联的协作
- 富化信息:映射添加的信息可用于告警关联分析
- 根因分析:服务依赖关系映射有助于根因分析
- 事件创建:映射信息可用于事件分类和路由
常见问题与解决方案
1. 映射规则不生效
- 检查优先级设置是否合理
- 验证匹配条件是否正确
- 确认告警数据中包含需要匹配的字段
2. CSV 导入失败
- 检查 CSV 格式是否正确,包括分隔符、引号等
- 确认 CSV 文件包含有效的头部信息
- 检查数据中是否包含特殊字符或格式不一致的内容
3. 性能问题
- 对于大量数据,考虑优化 CSV 文件结构
- 减少不必要的映射字段
- 使用更精确的匹配条件减少处理量
