小编在上篇文章中已经通过安装jenkins并构建自动化测试项目并发送了消息通知,但是这只是群内的通知,如何通过大盘展示呢?经过讨论,暂时选择采用的实现思路:通过jenkins自动化执行结果来推送Prometheus数据到N9E(夜莺)并通过Grafana展示。
话不多说,开干!
一、获取jenkins自动化执行结果
可以通过上篇文章获取:Linux机器通过Docker-Compose安装Jenkins发送Allure报告_docker jenkins 生成allure报告-CSDN博客文章浏览阅读1k次,点赞19次,收藏17次。在CentOS上,首先更新包管理工具并安装所需的包。接下来,添加Docker的官方仓库,然后安装Docker。启动Docker服务,并设置为开机自启。_docker jenkins 生成allure报告https://blog.csdn.net/weixin_57303037/article/details/139738897?spm=1001.2014.3001.5501
二、构造Prometheus数据并发送到N9E
在原来的jenkins自动化项目中的post build task编写脚本内容如下:
pytest -v test_check_allure_report.py --clean-alluredir --alluredir "check-allure"
failed_count_output=$(python3 /var/jenkins_home/workspace/${JOB_NAME}/check.py)
failed_count=$(echo $failed_count_output | grep -oP 'failed_count: \K\d+')
if [ "$failed_count" -eq 0 ]; then
result=0
else
result=1
fi
echo "terra_patrol_api_total $result" | curl --data-binary @- "你的的n9e地址/job/svc_monitor/ident/{ident}/location/hangzhou/env/prod"
另外还想获取到每个url运行情况,编写脚本内容如下:
urls_output=$(python3 /var/jenkins_home/workspace/${JOB_NAME}/get_urls.py)
# 将输出转换为数组,每一行为一个元素
mapfile -t lines < <(echo "$urls_output")
# 遍历每一行
for line in "${lines[@]}"; do
if [[ $line == ident:* ]]; then
# 如果当前行是ident,则保存ident
ident=${line#*ident: }
elif [[ $line == status:* ]]; then
# 如果当前行是status,检查status是否为passed
status=${line#*status: }
if [[ $status == "passed" ]]; then
result=0
else
result=1
fi
# 发送报告
echo "terra_patrol_network_urls $result" | curl --data-binary @- "你的n9e地址/job/svc_monitor/ident/${ident}/location/hangzhou/env/prod"
fi
done
其中get_urls.py内容如下:
import json
from urllib.parse import urlparse
report_path = '/var/jenkins_home/workspace/terra-network-monitor/allure-report/widgets/severity.json'
with open(report_path, 'r') as f:
data = json.load(f)
for item in data:
status = item['status']
print(f"status: {status}")
name = item['name']
ident_with_protocol = name.split('[')[1].split(']')[0]
# 移除"http://"或"https://"前缀
parsed_url = urlparse(ident_with_protocol)
ident = parsed_url.netloc
print(f"ident: {ident}")
点击构建项目会推送数据到n9e,可以在n9e中查询
同样也可以直接在prometheus界面查询:
三、安装Grafana并构建可视化仪表盘
上述已经实现了推送Prometheus数据,但是每次通过在界面查询查看结果不太直观,考虑到采用Grafana来构建可视化仪表盘实现,具体安装步骤这里就不再赘述了~
Grafana的功能非常强大,可以针对不同的需求设置,展示不同的监控图表。
Prometheus是我们需要的数据源,其中Dashboard(面板)和Panel(面板)是最基础的单元。
首页--仪表板--新建仪表板---添加可视化
Panel图表配置
预览区:可以针对【数据设置区】和【图表设置区】的设置结果进行模拟显示,可以实时看到效果。
数据设置区:可分为三个设置区域
查询设置区:设置查询数据的数据源、指标等
转换设置区:可以对查询出来的数据进行过滤
告警设置区:可以对设置的指标设置告警规则
图表设置区:可以用来设置图表名称、Y轴显示样式等,主要包含:setting设置和visualization可视化。
可视化的方式有以下这些:
具体的详细信息都可以在里面设置具体的参数~
最终设置成功后保存你的数据就可以在首页--仪表板--查看到已存在的可视化界面哦~
上述只是最基础的实现Grafana仪表盘可视化展示的情况,还有更多复杂的内容根据实际项目来实现,可关注小编后续继续讲解哦~