init prometheus监控配置文件
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env python3
|
||||
# Alertmanager告警入库 兼容Mariadb + Python3.6
|
||||
from flask import Flask, request, jsonify
|
||||
import pymysql
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s")
|
||||
app = Flask(__name__)
|
||||
|
||||
# 数据库配置,字符集改为Mariadb支持的 utf8mb4_unicode_ci
|
||||
DB_CONF = {
|
||||
"host": "127.0.0.1",
|
||||
"port": 3306,
|
||||
"user": "root",
|
||||
"password": "hp93000",
|
||||
"database": "alert_db",
|
||||
"charset": "utf8mb4",
|
||||
"cursorclass": pymysql.cursors.DictCursor
|
||||
}
|
||||
|
||||
def get_db_connection():
|
||||
try:
|
||||
conn = pymysql.connect(**DB_CONF)
|
||||
# 手动指定兼容Mariadb的排序规则
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;")
|
||||
return conn
|
||||
except Exception as e:
|
||||
logging.error(f"数据库连接失败:{e}")
|
||||
return None
|
||||
|
||||
@app.route("/webhook/alert", methods=["POST"])
|
||||
def alert_handle():
|
||||
conn = get_db_connection()
|
||||
if not conn:
|
||||
return jsonify({"code": 500, "msg": "数据库连接失败"}), 500
|
||||
cursor = conn.cursor()
|
||||
|
||||
try:
|
||||
data = request.get_json()
|
||||
alert_arr = data.get("alerts", [])
|
||||
insert_sql = """
|
||||
INSERT INTO alert_log (
|
||||
alertname, job, instance, port, severity, summary, description,
|
||||
starts_at, ends_at, status
|
||||
) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
|
||||
"""
|
||||
batch = []
|
||||
for alert in alert_arr:
|
||||
lab = alert.get("labels", {})
|
||||
ann = alert.get("annotations", {})
|
||||
stat = alert.get("status")
|
||||
start_time = datetime.fromisoformat(alert["startsAt"].replace("Z", ""))
|
||||
end_time = None
|
||||
if alert.get("endsAt"):
|
||||
end_time = datetime.fromisoformat(alert["endsAt"].replace("Z", ""))
|
||||
|
||||
row_data = (
|
||||
lab.get("alertname", ""),
|
||||
lab.get("job", ""),
|
||||
lab.get("instance", ""),
|
||||
lab.get("port", ""),
|
||||
lab.get("severity", ""),
|
||||
ann.get("summary", ""),
|
||||
ann.get("description", ""),
|
||||
start_time,
|
||||
end_time,
|
||||
stat
|
||||
)
|
||||
batch.append(row_data)
|
||||
|
||||
if batch:
|
||||
cursor.executemany(insert_sql, batch)
|
||||
conn.commit()
|
||||
logging.info(f"成功入库 {len(batch)} 条告警")
|
||||
return jsonify({"code": 0, "msg": "success"}), 200
|
||||
|
||||
except Exception as err:
|
||||
logging.error(f"入库异常:{str(err)}")
|
||||
conn.rollback()
|
||||
return jsonify({"code": 500, "msg": str(err)}), 500
|
||||
finally:
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", port=8090, debug=False)
|
||||
Reference in New Issue
Block a user