普罗米修斯支持网络挂钩吗? [英] Does Prometheus supports webhooks?

查看:0
本文介绍了普罗米修斯支持网络挂钩吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们的任务是接收普罗米修斯向我们内部系统发出的警报。 普罗米修斯本身不是警报管理器,而只是普罗米修斯服务器,我们可以接收像警报管理器一样的网络挂钩吗?

推荐答案

我们是否可以接收类似警报管理器的网络挂钩?

如果将应用程序配置为警报管理器,则可以接收来自普罗米修斯的HTTP POST请求:

# prometheus.yml
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - your-app.com:80
不过,这基本上意味着您必须重新发明AlertManager API,在我看来,这不是明智之举,因为您必须跟上API的变化。如果只运行一个AlertManager实例并配置a webhook endpoint,将更易于制作和维护。

如果前面的声明不能说服您反对直接从普罗米修斯那里接收推送,这里有几件事可以帮助您解决问题:

  1. 来自普罗米修斯的POST请求示例(v2.29.2):
[
    {
        "endsAt": "2022-01-20T18:03:41.955Z",
        "generatorURL": "http://prometheus.example.com:9090/graph?g0.expr=up+%3D%3D+1&g0.tab=1",
        "labels": {
            "alertname": "Test",
            "foo": "bar",
            "job": "test"
        },
        "startsAt": "2022-01-20T17:24:41.955Z"
    },
    ...
]
  1. AlertManager源代码:https://github.com/prometheus/alertmanager
  2. 打印传入请求的简单HTTP服务器。我用它得到了p.1:
#!/usr/bin/env python3
import json
from flask import Flask, request


app = Flask(__name__)


@app.route('/', defaults={"err": ""})
@app.errorhandler(404)
@app.errorhandler(405)
def print_request(err):
    if request.json:
        body = json.dumps(request.json, indent=4, sort_keys=True)
    elif request.form:
        body = request.form
    else:
        body = request.data

    print(f"{request.method} {request.path}
"
          "#################### HEADERS ###################
"
          f"{request.headers}"
          "--------------------- BODY ---------------------
"
          f"{body}")
    return "OK
"


if __name__ == '__main__':
    app.run("0.0.0.0", port=8000)

这篇关于普罗米修斯支持网络挂钩吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆