如何在Confluence页面自动化展示Nagios服务器状态报告?
将Nagios状态报告自动同步到Confluence页面的可行方案
当然可以实现!我之前帮团队搭建过一模一样的自动化流程,下面分享几个靠谱的方案,全程不用跳外部链接就能搞定:
方案一:自定义脚本对接Nagios与Confluence API
这是最灵活的方案,适合需要定制展示内容的场景:
- 从Nagios抓取状态数据
Nagios Core自带JSON格式的状态API,你可以用curl或者Python直接调用获取数据。比如获取所有主机状态的命令:
curl -u nagios用户名:nagios密码 "http://你的Nagios服务器地址/nagios/cgi-bin/statusjson.cgi?query=hostlist"
如果要获取服务状态,把query参数改成servicelist即可。
- 处理并格式化数据
用Python(推荐)或者Shell脚本解析返回的JSON数据,提取你关心的字段——比如主机名、状态(UP/DOWN)、最后检查时间、告警详情等,然后整理成Confluence支持的格式(比如简化版Markdown表格,或者HTML片段)。
举个Python处理的核心逻辑示例:
import requests import json # 获取Nagios数据 nagios_url = "http://你的Nagios服务器地址/nagios/cgi-bin/statusjson.cgi?query=hostlist" auth = ("nagios用户名", "nagios密码") response = requests.get(nagios_url, auth=auth) host_data = json.loads(response.text)['data']['hostlist'] # 生成Confluence表格内容 table_content = "| 主机名 | 状态 | 最后检查时间 |\n|--------|------|--------------|\n" for host in host_data: table_content += f"| {host['name']} | {host['status']} | {host['last_check']} |\n"
- 推送数据到Confluence
使用Confluence的REST API更新指定页面。首先要在Confluence个人设置里生成API令牌,然后用curl或者Python的requests库发送更新请求,把刚才生成的内容替换到页面的指定位置(比如用页面里的特定标记来定位替换区域,避免覆盖页面其他内容)。
方案二:静态文件嵌入Confluence(无脚本基础首选)
如果不想写代码,可以用这种更轻量化的方式:
- 定期导出Nagios静态报告:配置一个Cron任务,定时(比如每小时)用
wget抓取Nagios的状态页面,保存成HTML文件:
wget --user=nagios用户名 --password=nagios密码 -O /path/to/nagios_status.html "http://你的Nagios服务器地址/nagios/cgi-bin/status.cgi"
- 嵌入到Confluence页面:把导出的HTML文件上传到Confluence页面的附件,然后添加「HTML包含」宏,选择上传的附件;如果Confluence服务器能直接访问Nagios的静态文件地址,也可以直接用宏引用该URL。
注意:这个方法实时性稍弱,适合不需要高频更新的场景
方案三:借助Jenkins做中间调度(已有CI/CD环境可选)
如果团队已经在用Jenkins,可以把它作为自动化的中间层:
- 创建一个定时触发的Jenkins任务(比如每5分钟执行一次),在任务里调用Nagios API获取数据并格式化。
- 安装Jenkins的Confluence插件,直接在任务配置里设置好Confluence的地址、API令牌和目标页面ID,插件会自动帮你完成页面更新,不用自己写认证和请求逻辑。
关键注意事项
- 权限配置:确保Nagios的API允许脚本所在服务器访问,Confluence的API令牌要有目标页面的编辑权限。
- 内容过滤:如果监控的主机/服务数量多,建议只展示异常状态(DOWN/CRITICAL/WARNING)的条目,避免页面过于冗长。
- 格式兼容:Confluence的Markdown和标准Markdown有细微差异,比如表格的对齐方式,测试时要调整格式确保正常显示。
内容的提问来源于stack exchange,提问作者aa4931
相关产品推荐
相关产品推荐

