python查询nightingale监控

python 复制代码
import requests
import pandas as pd
import json
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.formatting.rule import DataBarRule
from datetime import datetime

BASE = "https://n9e.com"
TOKEN = "xxx  

headers = {
    "Authorization": f"Bearer {TOKEN}",
    "User-Agent": "Mozilla/5.0"
}

url = f"{BASE}/api/n9e/targets?query=&p=1&limit=500"

r = requests.get(url, headers=headers, timeout=20, allow_redirects=False)

print("HTTP 状态码:", r.status_code)

raw_json=r.text

# -------------------- 2.解析数据 --------------------
data = json.loads(raw_json)
host_list = data["dat"]["list"]

processed_data = []
for host in host_list:
    group_names = ",".join([g["name"] for g in host["group_objs"]]) if host["group_objs"] else ""
    tags_str = ",".join(host["tags"]) if host["tags"] else ""
    tags_map_str = ",".join([f"{k}={v}" for k, v in host["tags_maps"].items()]) if host["tags_maps"] else ""
    update_time = datetime.fromtimestamp(host["update_at"]).strftime("%Y-%m-%d %H:%M:%S")
    mem_util = round(host["mem_util"],2)
    cpu_util = round(host["cpu_util"],2)

    processed_data.append({
        "机器ID": host["id"],
        "主机标识": host["ident"],
        "业务组": group_names,
        "主机IP": host["host_ip"],
        "操作系统": host["os"],
        "架构": host["arch"],
        "CPU核数": host["cpu_num"],
        "CPU使用率%": cpu_util,
        "内存使用率%": mem_util,
        "Agent版本": host["agent_version"],
        "采集引擎": host["engine_name"],
        "标签": tags_str,
        "标签明细": tags_map_str,
        "更新时间": update_time,
        "来源IP": host["remote_addr"],
        "备注": host["note"]
    })

df = pd.DataFrame(processed_data)
df1 = df.sort_values("内存使用率%",ascending=False).reset_index(drop=True)

DS_ID   = 3

# ✅ 注意:PromQL 里的双引号要保留,URL 会自动编码
promql = (
    'disk_used_percent'
    '{'
    'ProjEnv="PRO",'
    'path!~"/Library.*|/Volumes.*|/System.*|/private.*|/sys.*"'
    '}'
)

r = requests.get(
    f"{BASE}/api/n9e/proxy/{DS_ID}/api/v1/query",
    params={"query": promql},
    headers=headers,
    timeout=15,
    verify=True   # 自签证书可临时 verify=False
)

print("HTTP status:", r.status_code)

# -------------------------- 2. 解析Prometheus JSON数据 --------------------------
# 加载JSON
data = json.loads(r.text)

# 提取结果列表
result_list = data["data"]["result"]

# 遍历数据,展开为结构化列表
processed_data = []
for item in result_list:
    # 1. 提取metric标签(自动展开所有标签为列)
    row_data = item["metric"].copy()
    # 2. 提取时间戳与指标值
    timestamp_raw, value_raw = item["value"]
    # 3. 时间戳转换为可读格式(Prometheus返回的是秒级时间戳)
    row_data["指标时间戳(秒)"] = timestamp_raw
    row_data["指标时间(可读)"] = datetime.fromtimestamp(timestamp_raw).strftime("%Y-%m-%d %H:%M:%S")
    # 4. 指标值转换为数值类型
    row_data["指标值"] = float(value_raw)
    # 5. 加入处理后列表
    processed_data.append(row_data)

# 转换为DataFrame
df2 = pd.DataFrame(processed_data)

# -------------------------- 3. 生成美化Excel文件 --------------------------
result_df = pd.merge(
    df2, 
    df1, 
    left_on='ident', 
    right_on='主机标识', 
    how='left'
)
col_names = [result_df.columns[i] for i in [6,10,11,14,20,21]]
df3=result_df[col_names]
with pd.ExcelWriter('n9e监控.xlsx', engine='openpyxl') as writer:
    df1.to_excel(writer, sheet_name='cpu内存', index=False)
    df2.to_excel(writer, sheet_name='disk_used_percent', index=False)
    df3.to_excel(writer, sheet_name='汇总', index=False)
相关推荐
我的xiaodoujiao1 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_408099671 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing2 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr
赶紧写完去睡觉3 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀3 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
你驴我3 小时前
WhatsApp 多账号下消息已读回执的实时聚合与推送实践
后端·python
AC赳赳老秦6 小时前
OpenClaw 采集任务日志审计:全程记录采集行为,满足合规溯源与企业审计要求
java·大数据·python·数据挖掘·数据分析·php·openclaw
huangdong_6 小时前
电商图片下载工具横向对比深度评测:固乔、FATKUN、图快、当图、淘蛙、存图宝七款工具全面解析
python
满怀冰雪6 小时前
04-Paddle Tensor 基础:形状、数据类型、广播与索引
python·深度学习·神经网络·paddle
cui_ruicheng6 小时前
Python从入门到实战(十五):文件操作与目录管理
开发语言·python