Skip to content

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
}

工作流程

  1. 规则配置:设置映射规则,包括数据源、匹配条件和字段映射
  2. 告警接收:系统接收到新告警
  3. 匹配处理
    • 提取告警中的匹配字段
    • 查找符合条件的映射规则
    • 按优先级应用匹配的规则
  4. 数据映射
    • 从映射数据源中查找对应数据
    • 将找到的数据添加到告警中
  5. 结果处理
    • 更新告警的富化字段
    • 记录映射执行结果

数据模型

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 文件结构
  • 减少不必要的映射字段
  • 使用更精确的匹配条件减少处理量

基于 Apache 2.0 许可发布