系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面,其中有主机信息的显示,也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储,业务信息通过自己系统的调度任务统计后存储在Mysql中,使用Grafana对接Prometheus和Mysql数据源来制作图表,然后嵌入到自己系统的页面中进行展示。

重点解决问题:

1)Prometheus和NodeExporter的安全认证问题

2)Grafana的安全认证问题

1. 部署Prometheus

Prometheus分为服务端和客户端(xxxExporter),Prometheus采用服务端主动去客户端拉取数据的方式。本次需求为采集linux服务器主机信息,因此客户端使用NodeExporter。

1.1 部署NodeExporter

根据我们服务器的情况部署NodeExporter采用Docker和二进制包两种方式。

1.1.1 Docker部署

考虑到nodeExporter访问的安全,使用基础的安全认证方式。

1.1.1.1 配置安全认证

创建文件/opt/node_exporter/web-config.yml,内容:

# Usernames and passwords required to connect.
# Passwords are hashed with bcrypt: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcrypt.
basic_auth_users:{Username}: {Hashed password}

说明:

{Username}: {Hashed password}可以有多组,其中

{Username}是用户名

{Hashed password}经过hash加密后的密码,linux下可以使用以下命令对密码加密:

htpasswd -nBC 10 "" | tr -d ':\n'

示例:

basic_auth_users:exporter-user: $2y$10$7dZ80a5HdLu2cpxjQehXdewVOPqygLlwMbbZUtGpKVxFDz7d8je3o
1.1.1.2 启动容器
docker run -d \--name node-exporter \--restart=always \--net="host" \--pid="host" \-v "/:/host:ro,rslave" \-v "/opt/node_exporter/web-config.yml:/web-config.yml" \quay.io/prometheus/node-exporter:latest \--path.rootfs=/host --web.config.file=/web-config.yml --web.listen-address=:9100

说明:

--web.listen-address参数可以指定Exporter的端口号,默认为9100。

容器启动后可以通过docker ps或者访问http://主机IP:端口号 检查服务是否启动成功。

1.1.2 二进制包部署

1.1.2.1 下载文件

下载地址:Download | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/download/#node_exporter

将下载后文件解压到/opt目录下,并改名为node_exporter

tar -xzvf node_exporter-1.7.0.linux-amd64.tar.gz -C /opt
cd /opt
mv node_exporter-1.7.0.linux-amd64 node_exporter
1.1.2.2 配置安全认证

同1.1.1.1

1.1.2.3 启动服务
nohup /opt/node_exporter/node_exporter --web.listen-address=:9100 --web.config.file=/opt/node_exporter/web-config.yml >/dev/null 2>&1 &

说明:

--web.listen-address参数可以指定Exporter的端口号,默认为9100。

 访问http://主机IP:端口号 检查服务是否启动成功。

1.1.2.4 配置开机自启

编辑/etc/rc.local文件,新起一行,添加启动服务的命令,同1.1.2.3

1.2 部署Prometheus Server

本文使用docker-compose方式部署,其他方式类似。

1.2.1 配置安全认证

创建配置目录:mkdir -p /opt/prometheus/config

创建文件/opt/prometheus/config/web-config.yml

文件格式同1.1.1.1,但用户和密码用途是不一样的,这个是访问Prometheus数据源是需要的。

示例:

basic_auth_users:prometheus-user: $2y$10$A.vlBjkqhhI6BTrW2ubXK.rsoSW/gcHhCXNJJlmuRX.LC0k7dj48s

1.2.2 配置服务参数

创建文件/opt/prometheus/config/prometheus.yml

参考文档:Configuration | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/docs/prometheus/latest/configuration/configuration/

示例:

global:scrape_interval:     15s # By default, scrape targets every 15 seconds.# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).external_labels:monitor: 'codelab'# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:- job_name: 'node-monitor'basic_auth:username: 'exporter-user'password: 'password'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval: 5sstatic_configs:- targets: ['x.x.x.1:9100','x.x.x.2:9100']labels:group: 'test'

说明:

password为nodeExporter端配置的明文密码。

targets 字段为监控的服务器列表,其内容为安装了node exporter的主机ip及端口号,多个主机逗号分隔。

1.2.3 启动服务

创建数据目录:mkdir -p /opt/prometheus/data

编写docker-compose.yml文件,内容:

version: '3'
services:prometheus:image: prom/prometheuscontainer_name: prometheusrestart: alwaysuser: '0'ports:- 9090:9090volumes:- /opt/prometheus/config:/etc/prometheus- /opt/prometheus/data:/prometheuscommand: --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles --web.config.file=/etc/prometheus/web-config.yml

说明

如果端口冲突可以通过ports端口映射修改端口

启动容器

docker-compose up -d

2. 部署Grafana

本文使用docker-compose方式部署,其他方式类似。

2.1 启动服务

创建数据目录mkdir -p /opt/grafana/data

编写docker-compose.yml文件,如果与Prometheus在同一台机器部署可以共用一个docker-compose文件,内容:

version: '3'
services:grafana:image: grafana/grafana:8.5.27container_name: grafanarestart: alwaysuser: '0'ports:- 3000:3000volumes:- /data/grafana/data:/var/lib/grafanaenvironment:- GF_SECURITY_ALLOW_EMBEDDING=true- GF_SECURITY_ADMIN_USER=admin- GF_SECURITY_ADMIN_PASSWORD=123@test- GF_AUTH_PROXY_ENABLED=true- GF_SERVER_ROOT_URL=http://localhost:8080/grafana/- GF_USERS_DEFAULT_THEME=light
#      - GF_SERVER_ROUTER_LOGGING=true

说明:

可以通过环境变量覆盖grafana.ini中的配置,详细配置参考:Configuration | Grafana documentationConfiguration documentationicon-default.png?t=N7T8https://grafana.com/docs/grafana/v8.3/administration/configuration/

GF_SECURITY_ALLOW_EMBEDDING 开启允许嵌入页面

GF_SECURITY_ADMIN_USER 设置默认管理员账号

GF_SECURITY_ADMIN_PASSWORD 设置默认管理员密码

GF_AUTH_PROXY_ENABLED 开启代理认证,即在反向代理中进行用户认证

GF_SERVER_ROOT_URL 通过反向代理的访问地址

GF_USERS_DEFAULT_THEME 用户默认主题配置为亮色

GF_SERVER_ROUTER_LOGGING 是否开启路由日志,调试时使用,默认不开启

2.2 初始配置

使用默认管理员账号和密码登录Grafana http://主机IP:3000,

根据需要添加Prometheus数据源和Mysql数据源,注意Prometheus数据源要启用basic auth,

导入或者新建Dashboard,编辑好图表。

3. 系统集成Grafana

3.1 配置Grafana的反向代理和代理认证

本系统使用了SpringCloudGateway做微服务网关,在Gateway中添加路由配置,示例:

{"id": "grafana","order": 11,"predicates": [{"name": "Path","args": {"_genkey_0": "/grafana/**"}}],"filters": [{"name": "StripPrefix","args": {"_genkey_0": 1}},{"name": "RemoveRequestHeader","args": {"_genkey_0": "Origin"}},{"name": "AddRequestHeader","args": {"_genkey_0": "X-WEBAUTH-USER","_genkey_1": "system-user"}}],"uri": "http://x.x.x.x:3000"
}

说明:

predicates 通过路径判断是否需要代理的请求。

filters StripPrefix 请求转发给后端时去掉第一段路径,即请求转发给后端时路径没有/grafana,该参数可与Grafana的配置项server.serve_from_sub_path配合使用。

filters RemoveRequestHeader 删除请求头中的Origin属性,解决因源请求中Origin值和后端服务器不匹配问题,也可将其改写成后端服务器地址。

filters RemoveRequestHeader 请求头中添加一个属性X-WEBAUTH-USER,该名称要与Grafana中的配置匹配,其默认为X-WEBAUTH-USER,其值system-user为通过该代理访问Grafana所使用的用户,默认不存在Grafana会自动注册,详细可参考Grafana文档。

uri 为反向代理的后端服务地址,即Grafana服务的地址。

3.2 用户认证

原系统(a.com)登录后会将token写在cookie中,并且在Gateway网关中做了用户登录认证,现在Grafana使用反向代理,所有通过访问http://a.com/grafana/**的请求都会带上a.com域名所属的cookie,可以直接利用原来网关的认证逻辑进行用户认证。

如果原系统没有在网关中做用户登录认证,可以在后端服务中写一个代理程序,并做用户认证,可以参考:https://www.cnblogs.com/xiaoqi/p/grafana.html

3.3 前端嵌入Grafana组件

如果想将Dashboard中的某个图表嵌入到自己系统的页面中,可以在某Panel上的Share->Embed中获取到图表的url,注意使用代理的地址。

其他问题:

1. 在Grafana中自己创建或编辑后保存的Dashboard,保存为json文件,在其他环境中再导入使用时,会报数据源无法找到的问题。

解决办法,编辑导出的json文件,在其文件的头部加上数据源的变量定义,具体可参考:Grafana导入 json 文件的 dashboard 错误 Templating Failed to upgrade legacy queries Datasource xxx not found_failed to upgrade legacy queries datasource promet-CSDN博客文章浏览阅读6.3k次,点赞5次,收藏11次。从一套环境导出 dashboard 为 json 文件,在另一套环境中导入,如果出现了标题中报错, 怎么解决这个问题?文章给出了三种解决方案,按各自实际需要选择_failed to upgrade legacy queries datasource prometheus was not foundhttps://blog.csdn.net/shaochenshuo/article/details/128735528

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/711819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICLR 2024|ReLU激活函数的反击,稀疏性仍然是提升LLM效率的利器

论文题目: ReLU Strikes Back: Exploiting Activation Sparsity in Large Language Models 论文链接: https://arxiv.org/abs/2310.04564 参数规模超过十亿(1B)的大型语言模型(LLM)已经彻底改变了现阶段人工…

gcc和g++的区别,如何看自己的编译器支持的C++的版本

gcc和g的区别 用一句话来说,就是gcc将程序视为c语言的,g将程序视为C的 gcc和g的区别主要在于它们处理不同后缀的文件类型、编译和连接阶段的不同调用方式,以及它们对C特性的支持方式。以下是详细介绍:123 文件类型。gcc将后缀为…

Pinia使用

官方地址:Pinia | The intuitive store for Vue.js (vuejs.org)https://pinia.vuejs.org/ 1.安装 npm install pinia npm install pinia-plugin-persistedstate Pinia是一个基于Vue 3的状态管理库,它使得管理Vue的全局状态变得更加容易和直观。 而…

自定义el-dialog的样式

实现效果: 样式代码如下:(可以写在common.scss文件夹中) .el-dialog__header {padding: 16px 20px;border-bottom: 1px solid #DCDFE6;display: flex;align-items: center;.el-dialog__title {font-size: 16px;position: relativ…

utniy urp shinyssrr插件使用

文章目录 前言步骤1首先在URP的配置文件里添加SSR后处理2 修改RenderingPath为延迟渲染3 启用深度纹理4 为物体添加脚本 插件下载 前言 用来实现屏幕空间反射效果 unity 版本为2021.3.8LTS,低版本的untiy URP的参数设置位置z可能会不同 步骤 1首先在URP的配置文件…

1028. 从先序遍历还原二叉树(三种方法:栈+递归+集合)

文章目录 1028. 从先序遍历还原二叉树(三种方法:栈递归集合)一、栈 while迭代1.思路2.代码 二、递归法1.思路2.代码 三、集合存储1.思路2.代码 1028. 从先序遍历还原二叉树(三种方法:栈递归集合) 一、栈 wh…

hive报错:FAILED: NullPointerException null

发现问题 起因是我虚拟机的hive不管执行什么命令都报空指针异常的错误 我也在网上找了很多相关问题的资料,发现都不是我这个问题的解决方法,后来在hive官网上与hive 3.1.3版本相匹配的hadoop版本是3.x的版本,而我的hadoop版本还是2.7.2的版本…

HTTPS的加密过程

文章目录 前言一、为什么需要加密?二、只用对称加密可以吗?三、只使用非对称加密四、双方都使用非对称加密五、使用非对称加密对称加密六、引入证书1.如何放防止数字证书被篡改?2.中间人有可能篡改该证书吗?3.中间人有可能掉包该证…

【YOLO系列】YOLOv9论文超详细解读(翻译 +学习笔记)

前言 时隔一年,YOLOv8还没捂热,YOLO系列最新版本——YOLOv9 终于闪亮登场! YOLOv9的一作和v7一样。v4也有他。 他于2017年获得台湾省National Central University计算机科学与信息工程博士学位,现在就职于该省Academia Sinica的…

机器视觉——硬件选型

1、相机选型 在选择机器视觉相机时,通常需要考虑以下几个方面: 1、分辨率:相机的分辨率决定了其拍摄图像的清晰度和细节程度。根据具体的应用需求,可以选择适当的分辨率范围。 2、帧率:帧率表示相机每秒钟能够拍摄的…

2023年营养保健品线上电商市场行业分析(2024年营养保健行业未来趋势分析)

近年来,受人口老龄化、养生年轻化等因素驱动,保健品行业增长强劲,加之越来越多的年轻人也加入养生大军,成为保健品市场上的一股新力量,进一步带动市场扩容。 鲸参谋数据显示,2023年度,京东平台…

[pdf]《软件方法》2024版部分公开-共196页

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 潘加宇《软件方法》2024版部分公开pdf文件,共196页,已上传CSDN资源。 也可到以下地址下载: http://www.umlchina.com/url/softmeth2024.html 如果…

Ubuntu20.04 ssh终端登录后未自动执行.bashrc

sudo vim ~/.profile输入以下内容 if [ -n "$BASH_VERSION" ]; then if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi 执行 source ~/.profile重新测试 其他答案 如果你的~/.bashrc文件在Ubuntu中没有自动生效,…

解析电源模块测试条件与测试步骤 快速完成测试

高温高湿储存测试是电源模块环境适应性测试内容之一,在实际使用过程中由于应用场景不同电源所处的环境也是多样的,因此需要测试电源对各种环境的适应能力,提高电源的性能和可靠性。 电源高温高湿存储测试的目的是为了测量环境对电源结构、元件…

C语言第三十三弹---动态内存管理(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 动态内存管理 1、为什么要有动态内存分配 2、malloc和free 2.1、malloc 2.2、free 3、calloc和realloc 3.1、calloc 3.2、realloc 4、常见的动态内存的错…

气象数据收集

1、国家气象科学数据中心 预报数据:需要定制,收费10万+ 观测数据:国家气象信息中心-中国气象数据网 (cma.cn)https://data.cma.cn/data/cdcdetail/dataCode/A.0012.0001.html 地面基本气象观测数据 滞后2天 滞后一天 路面数据同化系统,实时 国家气象信息中心-中国气象数…

11.以太网交换机工作原理

目录 一、以太网协议二、以太网交换机原理三、交换机常见问题思考四、同网段数据通信全过程五、跨网段数据通信全过程六、关键知识七、调试命令 前言:在网络中传输数据时需要遵循一些标准,以太网协议定义了数据帧在以太网上的传输标准,了解以…

android移动应用开发基础答案,安卓工程师面试题

一线企业的app都是多线程和多进程的,而Android进程间通信机制就是Binder,原生的线程间通信则是Handler,Binder和Handler是了解安卓运行机制必须要掌握的一个知识点,更是一线企业面试必问的知识点! 以下几道就是大厂关于…

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

Unity中URP实现水体(整理优化)

文章目录 前言一、优化水的深度1、我们把 水流动的方向 和 水深浅过渡值,整合到一个四维变量中2、修改 水体流动方向3、在片元着色器中,修改使用过渡变量 二、优化泡沫三、优化水下的扭曲1、修复原本扰动UV的计算 四、优化水面高光1、把高光强度、光滑度…