当前位置: 首页 > news >正文

系统集成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

相关文章:

系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面,其中有主机信息的显示,也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储,业务信息通过自己系统的调度任务统计后存储在Mysql中,使用Grafana对接Prome…...

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议(主机与主机)IP地址的分类…...

Unity 报错:SSL CA certificate error

使用UnityWebRequest时出现如下报错&#xff1a; SSL CA certificate error Curl error 60: Cert verify failed: UNITYTLS_X509VERIFY_FLAG_USER_ERROR1 原因&#xff1a; 证书验证失败 和 SSL CA证书错误 解决方法&#xff1a; 创建一个如下的类&#xff1a; /// <…...

算法刷题Day1 | 704.二分查找、27.移除元素

目录 0 引言1 二分查找1.1 我的解题1.2 修改后1.3 总结 2 移除元素2.1 暴力求解2.2 双指针法&#xff08;快慢指针&#xff09; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;代码随想录算法训练营第一天…...

大数据技术学习笔记(五)—— MapReduce(2)

目录 1 MapReduce 的数据流1.1 数据流走向1.2 InputFormat 数据输入1.2.1 FileInputFormat 切片源码、机制1.2.2 TextInputFormat 读数据源码、机制1.2.3 CombineTextInputFormat 切片机制 1.3 OutputFormat 数据输出1.3.1 OutputFormat 实现类1.3.2 自定义 OutputFormat 2 Map…...

北斗导航 | 同步双星故障的BDS/GPS接收机自主完好性监测算法

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 同步双星故障的BDS/GPS接收机自主完好性监测算法 1 引言2 同步双星故障…...

2024金三银四必看前端面试题!简答版精品!

文章目录 导文面试题 导文 2024金三银四必看前端面试题&#xff01;2w字精品&#xff01;简答版 金三银四黄金期来了 想要跳槽的小伙伴快来看啊 面试题 基于您给出的方向&#xff0c;我将为您生成20个面试题和答案。请注意&#xff0c;由于面试题的答案可能因个人经验和理解而…...

Python-sklearn.datasets-make_blobs

​​​​​​sklearn.datasets.make_blobs()函数形参详解 """ Title: datasets for regression Time: 2024/3/5 Author: Michael Jie """from sklearn import datasets import matplotlib.pyplot as plt# 产生服从正态分布的聚类数据 x, y, cen…...

[最佳实践] conda环境内安装cuda 和 Mamba的安装

Mamba安装失败的过程中&#xff0c;causal-conv1d安装报错为连接超时 key word: vision mamba&#xff0c; DL &#xff0c;深度学习 &#xff0c;mamba unet&#xff0c;mamba环境安装 Mamba安装 主要故障是 pip install causal-conv1d1.2.0和 pip install mamba-ssm1.2.0 安…...

【算法】顺时针打印矩阵(图文详解,代码详细注释

目录 题目 代码如下: 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和…...

蚂蚁感冒c++

题目 思路 “两蚂蚁碰面会掉头&#xff0c;若其中一只蚂蚁感冒了&#xff0c;会把感冒传染给碰到的蚂蚁”&#xff0c;这句话看作是“两蚂蚁碰面会互相穿过&#xff0c;只是把感冒的状态传给了另一只蚂蚁”&#xff0c;因为哪只蚂蚁感冒了并不是题目的重点&#xff0c;重点是有…...

python Plotly可视化

文章目录 Plotly常用函数PolarPlotlymake_subplotsadd_tracego.Scatterpolarglupdate_tracesupdate_layout综合示例 完整版 Python在数据可视化方面有着丰富的库和函数&#xff0c;其中一些常用的库包括 Matplotlib、Seaborn、Plotly、Bokeh等。 Plotly是一个交互式绘图库&…...

刷题第10天

代码随想录刷题第10天 |● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 239. 滑动窗口最大值 唉&#xff0c;好难&#xff0c;先记个思路吧 class Solution { private:class MyQueue { //单调队列&#xff08;从大到小&#xff09;public:deque<int> que; // 使用deq…...

Bililive-go 实现直播自动监控录制

前言 最近有直播录制的需求&#xff0c;但是自己手动录制太麻烦繁琐&#xff0c;于是用了开源项目Bililive-go进行全自动监控录制&#xff0c;目前这个项目已经有3K stars了 部署 为了方便我使用了docker compose 部署 version: 3.8 services:bililive:image: chigusa/bilil…...

【Redis】Redis持久化模式RDB

目录 引子 RDB RDB的优缺点 小节一下 引子 不论把Redis作为数据库还是缓存来使用&#xff0c;他肯定有数据需要持久化&#xff0c;这里我们就来聊聊两种持久化机制。这两种机制&#xff0c;其实是 快照 与 日志 的形式。快照:就是当前数据的备份&#xff0c;我可以拷贝到磁…...

Java基础 - 模拟医院挂号系统

模拟医院挂号系统功能 1. 科室管理&#xff1a;新增科室&#xff0c;删除科室&#xff08;如果有医生在&#xff0c;则不能删除该科室&#xff09;&#xff0c;修改科室 2. 医生管理&#xff1a;录入医生信息以及科室信息&#xff0c;修改医生信息&#xff08;主要是修改个人…...

【论文精读】基于知识图谱关系路径的多跳智能问答模型研究

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…...

uni app 微信小程序微信支付

使用方法 接口传参 使用wx.requestPayment方法是一个统一各平台的客户端支付API&#xff0c;不管是在某家小程序还是在App中&#xff0c;客户端均使用本API调用支付...

Dgraph 入门教程一《 概览》

1、Dgraph的特点 (1) 分布式规模&#xff1a;可以发布和处理大量数据 (2)支持GraphQL:一种内置的查询语法&#xff0c;类似SQL。可以让数据操作起来更简单 (3)完全的事务处理和ACID兼容&#xff1a;满足OLTP工作负载&#xff0c;该负载要求频繁的插入和更新数据。 (4)支持多…...

VSCode安装

前言 Visual Studio Code 是一个轻量级功能强大的源代码编辑器&#xff0c;支持语法高亮、代码自动补全&#xff08;又称 IntelliSense&#xff09;、代码重构、查看定义功能&#xff0c;并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...