脚本执行

本功能为商业版功能。

概述

Script 事件处理器是一个强大的告警事件处理组件,允许您通过自定义脚本对告警事件进行灵活的处理和转换。该处理器会将告警事件以 JSON 格式传递给您的脚本,脚本处理后可以返回修改后的事件数据。

配置参数

超时时间(必填)

  • 参数名称: 超时时间
  • 单位: 毫秒 (ms)
  • 默认值: 10000 (10秒)
  • 说明: 脚本执行的最大时间限制。如果脚本执行时间超过此值,将被强制终止并返回原始事件。

脚本内容(必填)

  • 参数名称: 脚本内容
  • 格式: Shell 脚本
  • 说明: 您要执行的自定义脚本代码,用于处理告警事件。

工作原理

  1. 事件输入: 处理器将当前告警事件转换为 JSON 格式,通过标准输入 (stdin) 传递给脚本
  2. 脚本处理: 您的脚本从 stdin 读取事件 JSON,进行自定义处理
  3. 结果输出: 脚本将处理后的事件 JSON 输出到标准输出 (stdout)
  4. 事件更新: 处理器解析脚本输出,更新原始事件

常见处理场景

  1. 修改告警级别
  2. 添加自定义标签
  3. 修改告警描述

注意事项

1. 脚本要求

  • 脚本必须能够从 stdin 读取 JSON 数据
  • 脚本必须向 stdout 输出有效的 JSON 格式

2. 错误处理

  • 如果脚本执行失败或超时,将返回原始未处理的事件
  • 如果脚本输出为空或无效 JSON,将返回原始事件

3. 性能考虑

  • 合理设置超时时间,避免脚本执行时间过长影响告警处理性能
  • 避免在脚本中执行过于复杂的操作

4. 安全建议

  • 谨慎处理脚本中的外部输入
  • 避免在脚本中执行不安全的系统命令
  • 定期审查脚本内容

测试建议

  1. 使用测试功能: 在保存配置前,使用页面上的"测试"按钮验证脚本功能
  2. 本地测试: 可以在本地环境中模拟事件 JSON 进行脚本测试
  3. 逐步调试: 从简单的脚本开始,逐步增加复杂的处理逻辑

示例脚本

示例1:基础事件透传

#!/bin/bash

# 读取输入事件
event_json=$(cat)
echo "$event_json"

示例 2:根据标签升级告警级别

#!/bin/bash
event_json=$(cat)

# 用 jq 检查标签里有没有 critical
is_critical=$(echo "$event_json" | jq -r '.tags_map.env // empty')

if [ "$is_critical" = "prod" ]; then
  # 把 prod 环境的告警级别提升到 1(S1)
  echo "$event_json" | jq '.severity = 1'
else
  echo "$event_json"
fi

示例 3:添加自定义标签

#!/bin/bash
event_json=$(cat)
echo "$event_json" | jq '.tags_map.processed_by = "ops-script-v2" | .tags_map.processed_at = (now | tostring)'

常见问题

Q1:脚本可以调用外部命令吗(curl / kubectl / aws-cli)?

A:可以 — 脚本运行环境是 n9e-server 所在主机的标准 Shell。前提

  • 所需命令已经装在 server 主机上;
  • 脚本进程的用户权限够(n9e 默认用启动 server 的账号执行);
  • 命令的网络可达(如 kubectl 需要 kubeconfig 配好)。

强烈建议单独装到 server 部署机,不要假设命令一定有。

Q2:脚本执行失败怎么调试?

A:

  • 用页面上的「测试」按钮(输入样例事件 JSON);
  • 工作流执行记录 里的 stderr 输出;
  • 在脚本里加 echo "DEBUG: xxx" >&2 输出调试信息到 stderr(不会影响 stdout 的 JSON);
  • 本地用 cat sample.json | bash your-script.sh 模拟。

Q3:如果脚本输出的不是 JSON 或者损坏了,会怎样?

A:处理器会忽略脚本输出,使用原始事件继续后续流程。所以脚本损坏不会让告警丢失,但也意味着你的修改完全没生效。务必测试覆盖。

Q4:脚本支持 Python / Node.js 吗?

A:技术上可以,只要 shebang 行(如 #!/usr/bin/env python3)指向 server 主机上能执行的解释器。注意性能:每次告警都 fork 一次解释器开销不小,慢的话超时会导致脚本被 kill。简单逻辑首选 bash + jq。

参考资料

更新时间 2025-03-12

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云