【监控】使用Prometheus+Grafana搭建服务器运维监控面板(含带BearerToken的Exporter配置)

【监控】使用Prometheus+Grafana搭建服务器运维监控面板(含带BearerToken的Exporter配置)

文章目录

    • 1、Grafana 数据可视化面板
    • 2、Prometheus - 收集和存储指标数据
    • 3、Exporter - 采集和上报指标数据

1、Grafana 数据可视化面板

Grafana 是一个开源的可视化平台,专门设计用于可视化各种数据源中的指标。它提供了丰富的图表和仪表板功能,可以帮助用户直观展示监控数据。

重要特性包括:

  • 多数据源支持:支持各种数据源(包括 Prometheus、InfluxDB、Graphite 等)。
  • 美观的可视化:提供多种图表类型,可以自定义仪表板。
  • 告警功能:可以设置警报规则并通过多种渠道进行通知。

github-67k
官方文档
官方下载地址

在这里插入图片描述
在这里插入图片描述

# Red Hat、CentOS、RHEL 和 Fedora (64 位, SHA256:84e2a5b915965521b64c275da1c5b1661409c452a219c35f87454f2e8578f9d8
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.2-1.x86_64.rpm# 要启动该服务,请运行以下命令:
sudo systemctl daemon-reload
sudo systemctl start grafana-server# 要验证服务是否正在运行,请运行以下命令:
sudo systemctl status grafana-server# 运行以后访问
# http://host:3000/
# 默认账号admin,默认密码admin

2、Prometheus - 收集和存储指标数据

Prometheus 是一个开源的监控系统和时间序列数据库,主要用于收集和存储指标数据。
它使用一种强大的查询语言(PromQL)来提取和分析数据,适用于云原生应用和微服务架构。

其主要特性包括

  • 多维数据模型:使用标签(labels)来标识数据,可以对数据进行灵活的查询。
  • 实时监控:支持数据采集和查询,可以实时监控系统状态。
  • 强大的报警功能:可以设置各种条件以触发告警,并与报警管理工具集成(如 Alertmanager)。

github-60k

在这里插入图片描述
在这里插入图片描述

Prometheus官方下载地址
在这里插入图片描述

# 下载
wget https://github.com/prometheus/prometheus/releases/download/v3.2.1/prometheus-3.2.1.linux-amd64.tar.gz
tar -xzf prometheus-3.2.1.linux-amd64.tar.gz# 运行
./prometheus --config.file=prometheus.yml# 访问
# 直接打开 http://hostip:9090

在本地使用 systemd 部署 Prometheus

sudo vi /etc/systemd/system/prometheus.service# 重新加载服务配置:
systemctl reload prometheus
# 启动服务:
systemctl start prometheus
# 重启服务(重载配置):
systemctl restart prometheus
# 启用服务(开机启动):
systemctl enable prometheus
# 查看服务状态:
systemctl status prometheus
# 重新加载配置文件:
systemctl daemon-reload
# 查看更多报错信息:
journalctl -u prometheus.service -b# 每次修改prometheus.yml配置后
sudo systemctl daemon-reload
sudo systemctl reload prometheus
# 部署配置[Unit]
Description=prometheus
After=network.target[Service]
ExecStart=/root/prometheus-3.2.1.linux-amd64/prometheus --config.file=/root/prometheus-3.2.1.linux-amd64/prometheus.yml
Restart=always
User=root
Group=root[Install]
WantedBy=multi-user.target

修改target配置(采集器地址)

  • 带有 Bearer Token 鉴权的抓取目标,可以通过在 scrape_configs 中的 authorization 字段来实现。
scrape_configs:- job_name: 'h200-metrics'static_configs:- targets: ['ip-aaa:8080', 'ip-bbb:8080']authorization:type: Bearercredentials: 'xxx'

查询监控数据

  • 【运维prometheus教程】使用Prometheus+Grafana打造可视化监控利器
  • Prometheus UI 是 Prometheus 内置的一个可视化管理界面,我们通过 localhost:9090 就可以访问到该页面。
  • 通过 Prometheus UI 可以查询 Prometheus 收集到的数据,而 Prometheus 定义了 PromQL 语言来作为查询监控数据的语言,其余 SQL 类似。
up
# 可以看到 Element 处有几条记录,其中 instance 值为 localhost:8080 的记录,value 是 1,这代表对应应用是存活状态。
# up{group="production",instance="localhost:8080",job="node"}	1node_memory_active_bytes/(1024*1024*1024)
# 查看我们所运行 NodeExporter 节点所在机器的内存使用情况node_load1
# 查看 NodeExporter 节点所在机器 CPU 1 分钟的负载情况

PromQL介绍 1

  • PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,它能实现对事件序列数据的查询、聚合、逻辑运算等。
  • PromQL 支持户根据时间序列的标签匹配模式来对时间序列进行过滤,目前主要支持两种匹配模式:完全匹配和正则匹配。
# 查看请求信息
prometheus_http_requests_total# 1、完全匹配
# PromQL 支持使用 = 和 != 两种完全匹配模式。
# 等于。通过使用 label=value 可以选择那些标签满足表达式定义的时间序列。
# 不等于。通过使用 label!=value 则可以根据标签匹配排除时间序列。
# 我们希望只查看错误的请求,即过滤掉所有 code 标签不是 200 的数据。
prometheus_http_requests_total{code!="200"}# 2、正则匹配
# PromQL 还可以使用正则表达式作为匹配条件,并且可以使用多个匹配条件。
# 正向匹配。使用 label=~regx 表示选择那些标签符合正则表达式定义的时间序列。
# 反向匹配。使用 label!~regx 进行排除。
# 例如我想查询指标 prometheus_http_requests_total 中,所有 handler 标签以 /api/v1 开头的记录,那么我的表达式为:
prometheus_http_requests_total{handler=~"/api/v1/.*"}# 3、范围查询
# 查询时间序列时,同一个指标同一标签只会返回一条数据。这样的表达式我们称之为瞬间向量表达式,而返回的结果称之为瞬间向量。
# 而如果我们想查询一段时间范围内的样本数据,那么我们就需要用到区间向量表达式,其查询出来的结果称之为区间向量。
# 时间范围通过时间范围选择器 [] 进行定义。例如,通过以下表达式可以选择最近5分钟内的所有样本数据:
prometheus_http_requests_total{}[5m]
# 瞬时向量表达式,选择当前最新的数据
prometheus_http_requests_total{} 
# 区间向量表达式,选择以当前时间为基准,5分钟内的数据
prometheus_http_requests_total{}[5m] 
# 查询 5 分钟前的最新数据
http_request_total{} offset 5m
# 往前移动 1 天,查询 1 天前的数据
# 例如现在是 2020-10-07 00:00:00
# 那么这个表达式查询的数据是:2020-10-05 至 2020-10-06 的数据
http_request_total{}[1d] offset 1d

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • Prometheus 还提供了聚合操作符,这些操作符作用于瞬时向量。可以将瞬时表达式返回的样本数据进行聚合,形成一个新的时间序列。目前支持的聚合函数有:
    sum (求和)
    min (最小值)
    max (最大值)
    avg (平均值)
    stddev (标准差)
    stdvar (标准方差)
    count (计数)
    count_values (对value进行计数)
    bottomk (后n条时序)
    topk (前n条时序)
    quantile (分位数)

go语言使用sdk访问Prometheus通过Node Exporter采集的机器监控数据,并且完成数据分析的简单例子

  • 创建Prometheus客户端:使用指定的Prometheus服务器地址创建一个新客户端。
  • 构造查询:使用Prometheus的PromQL查询来获取CPU使用情况的平均值
  • 上下文管理:设置一个上下文以控制查询的超时。
  • 查询执行:调用Query方法来与Prometheus交互并检索数据。
  • 输出结果:解析查询结果并打印CPU使用率。
// mkdir prometheus-example
// cd prometheus-example
// go mod init prometheus-example
// go get github.com/prometheus/client_golang/api
// go get github.com/prometheus/common/model
package mainimport ("context""fmt""log""time""github.com/prometheus/client_golang/api""github.com/prometheus/common/model"
)func main() {// 创建Prometheus客户端client, err := api.NewClient(api.Config{Address: "http://<prometheus_server_ip>:9090",})if err != nil {log.Fatalf("Error creating Prometheus client: %v", err)}// 创建查询APIv1api := api.NewAPI(client)// 上下文设置ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)defer cancel()// 发送查询请求,获取CPU使用率数据query := `avg(rate(node_cpu_seconds_total[5m])) by (mode)`result, warnings, err := v1api.Query(ctx, query, time.Now())if err != nil {log.Fatalf("Error querying Prometheus: %v", err)}if len(warnings) > 0 {for _, warning := range warnings {fmt.Printf("Warning: %s\n", warning)}}// 打印结果switch result.Type() {case model.ValVector:vector := result.(model.Vector)for _, sample := range vector {fmt.Printf("Mode: %s, Value: %f\n", sample.Metric["mode"], sample.Value)}default:fmt.Println("Unexpected result type")}
}

3、Exporter - 采集和上报指标数据

广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。
而Exporter的一个实例称为target, prometheus通过轮询的方式定期从这些target中获取样本数据

从Exporter的来源上来讲,主要分为两类:1

  • 社区提供的
    Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。
  • 用户自定义的
    除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序。
    目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。

从Exporter的运行方式上来讲,又可以分为:

  • 独立使用的
    以我们已经使用过的Node Exporter为例,由于操作系统本身并不直接支持Prometheus,同时用户也无法通过直接从操作系统层面上提供对Prometheus的支持。
    因此,用户只能通过独立运行一个程序的方式,通过操作系统提供的相关接口,将系统的运行状态数据转换为可供Prometheus读取的监控数据。
    除了Node Exporter以外,比如MySQL Exporter、Redis Exporter等都是通过这种方式实现的。 这些Exporter程序扮演了一个中间代理人的角色。
  • 集成到应用中的
    为了能够更好的监控系统的内部运行状态,有些开源项目如Kubernetes,ETCD等直接在代码中使用了Prometheus的Client Library,提供了对Prometheus的直接支持。
    这种方式打破的监控的界限,让应用程序可以直接将内部的运行状态暴露给Prometheus,适合于一些需要更多自定义监控指标需求的项目。

在这里插入图片描述

以node_exporter采集机器信息为例 1

github-12k

在这里插入图片描述

# 下载
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
tar -xzf node_exporter-1.9.0.linux-amd64.tar.gz# 运行
./node_exporter --web.listen-address 127.0.0.1:8080# 访问exporter
curl hostip:8080/metrics --header "Authorization: Bearer xxx"# 部署
sudo vi /etc/systemd/system/node-exporter.service[Unit]
Description=node-exporter
After=network.target[Service]
ExecStart=/root/node_exporter-1.9.0.linux-amd64/node_exporter --web.listen-address xxx:8080
Restart=always
User=root
Group=root[Install]
WantedBy=multi-user.target

Node Exporter指标数据

node_boot_time:系统启动时间
node_cpu:系统CPU使用量
nodedisk*:磁盘IO
nodefilesystem*:文件系统用量
node_load1:系统负载
nodememeory*:内存使用量
nodenetwork*:网络带宽
node_time:当前系统时间
go_*:node exporter中go相关指标
process_*:node exporter自身进程相关运行指标

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

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

相关文章

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源&#xff1a; 1. 精度更高&#xff0c;误差更小 ADR03B 具有 0.1% 或更小的初始精度&#xff0c;而 电阻分压方式的误差主要来自电阻的容差&#xff08;通常 1% 或 0.5%&#xff09;。长期稳定性更好&#xff0c;分压电阻容易受到温度、老化的影响&#xff0c;长…

UDP协议(20250303)

1. UDP UDP:用户数据报协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;传输层协议之一&#xff08;UDP&#xff0c;TCP&#xff09; 2. 特性 发送数据时不需要建立链接&#xff0c;节省资源开销不安全不可靠的协议 //一般用在实时性比较高…

基于https虚拟主机配置

一、https介绍 http 明文&#xff0c;80/tcp https 密文&#xff0c;443/tcp 二、安全性保障 1、数据安全性 数据加密 2、数据完整性 3、验证身份的真实性、有效性 三、数据安全性 手段&#xff1a;加密 发送方加密数据&#xff0c;接收方解密数据 对称加密算法 加密、解密数据…

机器学习(五)

一&#xff0c;多类&#xff08;Multiclass&#xff09; 多类是指输出不止有两个输出标签&#xff0c;想要对多个种类进行分类。 Softmax回归算法&#xff1a; Softmax回归算法是Logistic回归在多类问题上的推广&#xff0c;和线性回归一样&#xff0c;将输入的特征与权重进行…

概率论基础概念

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 &#x1f3b2; 1. 随机事件 …

动漫短剧开发公司,短剧小程序搭建快速上线

在当今快节奏的生活里&#xff0c;人们的娱乐方式愈发多元&#xff0c;而动漫短剧作为新兴娱乐形式&#xff0c;正以独特魅力迅速崛起&#xff0c;成为娱乐市场的耀眼新星。近年来&#xff0c;动漫短剧市场呈爆发式增长&#xff0c;吸引众多创作者与观众目光。 从市场规模来看…

MySQL零基础教程15—简单的表连接(join)

在学习子查询的时候&#xff0c;我们已经感受到了&#xff0c;在一个语句中&#xff0c;通过访问不同表的数据最终获取我们想要的结果这种操作方式&#xff0c;实际上在mysql中&#xff0c;还有更加有趣的一个功能&#xff0c;就是表连接&#xff0c;同样是在查询数据的时候连接…

【AVRCP】深入剖析 AVRCP 命令体系:从单元到特定命令的全面解读

在蓝牙音频 / 视频远程控制规范&#xff08;AVRCP&#xff09;中&#xff0c;丰富的命令体系是实现设备间高效交互的关键。这些命令涵盖了单元命令、通用单元与子单元命令、特定命令等多个层面&#xff0c; 一、支持的单元命令 1.1 单元命令概述 AVRCP中支持的单元命令在设备…

物业管理系统源码 物业小程序源码

物业管理系统源码 物业小程序源码 一、基础信息管理 1. 房产信息管理 记录楼栋、单元、房间的详细信息&#xff08;面积、户型、产权等&#xff09;。 管理业主/租户的档案&#xff0c;包括联系方式、合同信息等。 2. 公共资源管理 管理停车场、电梯、绿化带、公…

专题二最大连续1的个数|||

1.题目 题目分析&#xff1a; 给一个数字k&#xff0c;可以把数组里的0改成1&#xff0c;但是只能改k次&#xff0c;然后该变得到的数组能找到最长的子串且都是1。 2.算法原理 这里不用真的把0变成1&#xff0c;因为改了比较麻烦&#xff0c;下次用就要改回成1&#xff0c;这…

【计算机网络入门】初学计算机网络(十一)重要

目录 1. CIDR无分类编址 1.1 CIDR的子网划分 1.1.1 定长子网划分 1.1.2 变长子网划分 2. 路由聚合 2.1 最长前缀匹配原则 3. 网络地址转换NAT 3.1 端口号 3.2 IP地址不够用&#xff1f; 3.3 公网IP和内网IP 3.4 NAT作用 4. ARP协议 4.1 如何利用IP地址找到MAC地址…

精讲坐标轴系统(Axis)

续前文&#xff1a; 保姆级matplotlib教程&#xff1a;详细目录 保姆级seaborn教程&#xff1a;详细目录 seaborn和matplotlib怎么选&#xff0c;还是两个都要学&#xff1f; 详解Python matplotlib深度美化&#xff08;第一期&#xff09; 详解Python matplotlib深度美化&…

Metal学习笔记十:光照基础

光和阴影是使场景流行的重要要求。通过一些着色器艺术&#xff0c;您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成&#xff0c;如果您没有正确地照亮它们&#xff0c;场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…

动态规划_路径问题(典型算法思想)—— OJ例题算法解析思路

目录 一、62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 算法代码&#xff1a; 代码思路分析 问题定义&#xff1a; 动态规划定义&#xff1a; 边界条件&#xff1a; 填表过程&#xff1a; 返回结果&#xff1a; 代码优化思路 空间优化&#xff1a; 滚动数组…

【AI论文】ViDoRAG:通过动态迭代推理代理实现视觉文档检索增强生成

摘要&#xff1a;理解富含视觉信息的文档中的信息&#xff0c;对于传统的检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;方法来说&#xff0c;仍然是一个重大挑战。现有的基准测试主要集中在基于图像的问答&#xff08;Question Answerin…

【赵渝强老师】监控Redis

对运行状态的Redis实例进行监控是运维管理中非常重要的内容&#xff0c;包括&#xff1a;监控Redis的内存、监控Redis的吞吐量、监控Redis的运行时信息和监控Redis的延时。通过Redis提供的监控命令便能非常方便地实现对各项指标的监控。 一、监控Redis的内存 视频讲解如下 【…

HTML前端手册

HTML前端手册 记录前端框架在使用过程中遇到的各种问题和解决方案&#xff0c;供后续快速进行手册翻阅使用 文章目录 HTML前端手册1-前端框架1-TypeScript框架2-CSS框架 2-前端Demo1-Html常用代码 2-知云接力3-Live2D平面动画 3-前端运维1-NPM版本管理 1-前端框架 1-TypeScrip…

C++:类和对象(下篇)

1. 再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值。 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _mont…

JVM基本概念及内存管理模型

一、JVM基本概念 JVM&#xff08;Java Virtual Machine&#xff0c;Java 虚拟机&#xff09;是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令&#xff0c;并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下&#xff1a; 加载和执行…

MyBatis - 单元测试 参数传递 注解 CRUD

目录 1. MyBatis 简介 2. 简单使用 MyBatis 2.1 创建 MyBatis 项目 2.2 连接数据库 2.3 创建 Java 类 2.4 创建 Mapper 接口 2.5 在测试类中执行 3. 单元测试 3.1 Test 3.2 SpringBootTest 3.3 BeforeEach / AfterEach 4. MyBatis 基础操作 4.1 配置 MyBatis 打印日…