Prometheus 是否支持 webhook?
Does Prometheus supports webhooks?
我们有一项任务是从普罗米修斯接收警报到我们的内部系统。
prometheus 本身不是 alert manager,只是 Prometheus server,我们可以像 alert-manager 一样接收 webhooks 吗?
can we receive webhooks like the alert-manager?
如果您将应用程序配置为 Alertmanager,则可以接收来自 Prometheus 的 HTTP POST 请求:
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- your-app.com:80
不过,这基本上意味着您必须重新发明 Alertmanager API,我认为这不是明智之举,因为您必须跟上 API 的变化。如果你只是 运行 一个 Alertmanager 实例并配置 a webhook endpoint.
会更容易制作和维护
如果前面的陈述没有说服您反对直接从 Prometheus 接收推送的想法,这里有几件事可以帮助您解决问题:
- 来自 Prometheus (v2.29.2) 的示例 POST 请求:
[
{
"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"
},
...
]
- Alertmanager 源代码:https://github.com/prometheus/alertmanager
- 打印传入请求的简单 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}\n"
"#################### HEADERS ###################\n"
f"{request.headers}"
"--------------------- BODY ---------------------\n"
f"{body}")
return "OK\n"
if __name__ == '__main__':
app.run("0.0.0.0", port=8000)
我们有一项任务是从普罗米修斯接收警报到我们的内部系统。 prometheus 本身不是 alert manager,只是 Prometheus server,我们可以像 alert-manager 一样接收 webhooks 吗?
can we receive webhooks like the alert-manager?
如果您将应用程序配置为 Alertmanager,则可以接收来自 Prometheus 的 HTTP POST 请求:
# prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- your-app.com:80
不过,这基本上意味着您必须重新发明 Alertmanager API,我认为这不是明智之举,因为您必须跟上 API 的变化。如果你只是 运行 一个 Alertmanager 实例并配置 a webhook endpoint.
会更容易制作和维护如果前面的陈述没有说服您反对直接从 Prometheus 接收推送的想法,这里有几件事可以帮助您解决问题:
- 来自 Prometheus (v2.29.2) 的示例 POST 请求:
[
{
"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"
},
...
]
- Alertmanager 源代码:https://github.com/prometheus/alertmanager
- 打印传入请求的简单 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}\n"
"#################### HEADERS ###################\n"
f"{request.headers}"
"--------------------- BODY ---------------------\n"
f"{body}")
return "OK\n"
if __name__ == '__main__':
app.run("0.0.0.0", port=8000)