You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Prometheus告警发送至SCOM?自定义Webhook实现咨询

将Prometheus告警转发至SCOM的自定义Webhook实现方案

完全可以通过开发自定义Webhook中间服务实现Prometheus告警到SCOM的转发。你提到的SCOM无原生创建告警API的问题,可通过SCOM的PowerShell Cmdlets或SDK绕开,具体实现思路如下:

核心逻辑

Prometheus Alertmanager会将告警以HTTP POST请求发送给自定义Webhook服务,该服务需完成两个核心动作:

  1. 解析Prometheus传入的标准告警Payload
  2. 将解析后的告警信息转换为SCOM可识别的格式,通过SCOM的PowerShell Cmdlets或SDK创建/关闭告警

具体实现步骤

1. 开发自定义Webhook中间服务

选择熟悉的语言搭建HTTP服务(如Python Flask、Go Gin、C# ASP.NET),核心是接收Alertmanager的POST请求并处理。

以下是Python极简示例(基于Flask):

from flask import Flask, request
import subprocess
import json

app = Flask(__name__)

@app.route('/prometheus-to-scom', methods=['POST'])
def webhook_handler():
    # 解析Prometheus告警Payload
    alert_data = request.get_json()
    
    for alert in alert_data['alerts']:
        status = alert['status']
        labels = alert['labels']
        annotations = alert['annotations']
        
        # 映射到SCOM告警字段
        alert_name = labels.get('alertname', 'Prometheus告警')
        description = annotations.get('description', '')
        severity = labels.get('severity', 'Warning')
        
        # 根据告警状态执行对应操作
        if status == 'firing':
            # 调用PowerShell创建SCOM告警
            ps_script = f"""
            Import-Module OperationsManager
            New-SCOMAlert -Name "{alert_name}" -Description "{description}" -Severity {severity}
            """
            subprocess.run(["powershell", "-Command", ps_script], check=True)
        elif status == 'resolved':
            # 调用PowerShell关闭对应SCOM告警
            ps_script = f"""
            Import-Module OperationsManager
            Get-SCOMAlert -Name "{alert_name}" | Set-SCOMAlert -ResolutionState 255
            """
            subprocess.run(["powershell", "-Command", ps_script], check=True)
    
    return '', 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

2. 配置Alertmanager指向自定义Webhook

修改Alertmanager配置文件alertmanager.yml,添加Webhook路由:

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'scom-webhook'

receivers:
- name: 'scom-webhook'
  webhook_configs:
  - url: 'http://<你的中间服务IP>:5000/prometheus-to-scom'
    send_resolved: true  # 开启告警恢复通知

3. 权限与环境配置

  • 中间服务所在机器需安装SCOM的OperationsManager PowerShell模块,并能访问SCOM管理服务器
  • 运行中间服务的账号需拥有SCOM告警创建/修改权限
  • 确保Prometheus/Alertmanager能访问中间服务的HTTP端口

可选优化方向

  • 加入告警去重逻辑,避免重复创建SCOM告警
  • 添加日志记录,方便排查问题
  • 实现重试机制,处理临时网络或权限问题
  • 用SCOM SDK替代PowerShell,提升调用效率和稳定性

内容的提问来源于stack exchange,提问作者Iban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:40:10