从0开始搭建Prometheus集群架构(Prometheus联邦模式+Grafana+node_exporter+VirctoriaMetrics远端仓库)

news/2025/4/1 2:00:03/文章来源:https://www.cnblogs.com/dezyan/p/18799969

一、环境说明

主机名 主机IP 操作系统
prometheus-server31 10.0.0.31 ubuntu 22.04 LTS
prometheus-server32 10.0.0.32 ubuntu 22.04 LTS
prometheus-server33 10.0.0.33 ubuntu 22.04 LTS
node-exporter41 10.0.0.41 ubuntu 22.04 LTS
node-exporter42 10.0.0.42 ubuntu 22.04 LTS
node-exporter43 10.0.0.43 ubuntu 22.04 LTS

二、服务版本说明

服务名 版本号 下载链接
Prometheus 2.53.4 https://github.com/prometheus/prometheus/releases/download/v2.53.4/prometheus-2.53.4.linux-amd64.tar.gz
Grafana 9.5.21 https://dl.grafana.com/enterprise/release/grafana-enterprise_9.5.21_amd64.deb
no-exporter 1.9.0 https://github.com/prometheus-community/elasticsearch_exporter/releases/download/v1.9.0/elasticsearch_exporter-1.9.0.linux-amd64.tar.gz
VictoriaMetrics 1.93.16 https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.16/victoria-metrics-linux-amd64-v1.93.16.tar.gz
consul 1.20.5 https://releases.hashicorp.com/consul/1.20.5/consul_1.20.5_linux_amd64.zip

三、架构说明

  • 本集群采用联邦模式部署,基于consul服务实现自动发现,采集Linux服务器的基本指标,将数据存储在VictoriaMetrics远端仓库,Grafana出图展示

  • 关于联邦模式

    • 类似于古代帝王的分封制

    • prometheus-server32直接采集node-exporter41的数据

    • prometheus-server33采集consul集群的数据,node-exporter42、node-exporter43自动注册到consul集群

    • prometheus-server31采集prometheus-server32、prometheus-server33采集到数据,也就是对其做一个汇总,并将数据存储到远端仓库

    • Grafana从远端仓库获取数据出图展示

四、集群部署

1.所有prometheus-server节点安装Prometheus

安装过程简单,参考https://www.cnblogs.com/dezyan/p/18794577
我编写了脚本一键部署,安装路径为/dezyan/softwares/prometheus-2.53.4.linux-amd64/
配置了一键启动脚本(systemctl start prometheus)

2.所有node-exporter节点安装node-exporter

安装过程简单,参考https://www.cnblogs.com/dezyan/p/18794577
我编写了脚本一键部署,安装路径为/dezyan/softwares/node_exporter-1.9.0.linux-amd64
配置了一键启动脚本(systemctl start node-exporter.service )

3.部署VictoriaMetrics单机版

  • 资源有限,我直接部署在了10.0.0.43节点上

3.1 下载\解压victoriametrics

[root@node-exporter43 ~]# wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.93.16/victoria-metrics-linux-amd64-v1.93.16.tar.gz
[root@node-exporter43 ~]# tar xf victoria-metrics-linux-amd64-v1.93.16.tar.gz  -C /usr/local/bin/

3.2 编写启动脚本

[root@node-exporter43 ~]# cat > /etc/systemd/system/victoria-metrics.service <<EOF
[Unit]
Description=Linux VictoriaMetrics Server
Documentation=https://docs.victoriametrics.com/
After=network.target[Service]
ExecStart=/usr/local/bin/victoria-metrics-prod  \-httpListenAddr=0.0.0.0:8428 \-storageDataPath=/dezyan/data/victoria-metrics \-retentionPeriod=3[Install]
WantedBy=multi-user.target
EOF[root@node-exporter43 ~]# systemctl daemon-reload
[root@node-exporter43 ~]# systemctl enable --now victoria-metrics.service
[root@node-exporter43 ~]# systemctl status victoria-metrics

3.3检查端口是否存活

[root@node-exporter43 ~]# ss -ntl | grep 8428
LISTEN 0      4096         0.0.0.0:8428      0.0.0.0:*

3.4 查看webUI

http://10.0.0.43:8428/

4.部署consul集群

资源有限,直接部署在了node-exporter三个节点上

4.1 下载/解压consul、拷贝到其他节点

[root@node-exporter41 ~]# wget https://releases.hashicorp.com/consul/1.20.5/consul_1.20.5_linux_amd64.zip
[root@node-exporter41 ~]# unzip consul_1.20.5_linux_amd64.zip -d /usr/local/bin/[root@node-exporter41 ~]# scp /usr/local/bin/consul 10.0.0.42:/usr/local/bin
[root@node-exporter41 ~]# scp /usr/local/bin/consul 10.0.0.43:/usr/local/bin

4.2 运行consul集群

指定10.0.0.43作为集群的服务端

服务端43:
[root@node-exporter43 ~]# consul agent -server -bootstrap -bind=10.0.0.43 -data-dir=/dezyan/softwares/consul -client=10.0.0.43 -ui
客户端42:
[root@node-exporter42 ~]# consul agent  -bind=10.0.0.42 -data-dir=/dezyan/softwares/consul -client=10.0.0.42 -ui -retry-join=10.0.0.43
客户端41:
[root@node-exporter41 ~]# consul agent -server -bind=10.0.0.41 -data-dir=/dezyan/softwares/consul -client=10.0.0.41 -ui -retry-join=10.0.0.43

4.3 查看各个节点的监听端口 访问webUI测试

[root@node-exporter41 ~]# ss -ntl | grep 8500
[root@node-exporter42 ~]# ss -ntl | grep 8500
[root@node-exporter43 ~]# ss -ntl | grep 8500http://10.0.0.41:8500/ui/dc1/nodes
http://10.0.0.42:8500/ui/dc1/nodes
http://10.0.0.43:8500/ui/dc1/nodes

5.部署Grafana

参考https://www.cnblogs.com/dezyan/p/18794577

五、集群配置

1.Prometheus-server32节点

1.1编辑配置文件

[root@prometheus-server32 ~]# cd /dezyan/softwares/prometheus-2.53.4.linux-amd64/
[root@prometheus-server32 ~]# vim prometheus.yml- job_name: linux96-node-exporterstatic_configs:- targets: - 10.0.0.41:9100

1.2 重新加载配置

[root@prometheus-server32 ~]# curl -X POST http://10.0.0.32:9090/-/reload

2.Prometheus-server33节点

2.1编辑配置文件

[root@prometheus-server31 ~]# cd /dezyan/softwares/prometheus-2.53.4.linux-amd64/
[root@prometheus-server31 ~]# vim prometheus.yml- job_name: "consul-seriver-discovery"# 配置基于consul的服务发现consul_sd_configs:# 指定consul的服务器地址,若不指定,则默认值为"localhost:8500".- server: 10.0.0.43:8500- server: 10.0.0.42:8500- server: 10.0.0.41:8500relabel_configs:# 匹配consul的源标签字段,表示服务名称- source_labels: [__meta_consul_service]# 指定源标签的正则表达式,若不定义,默认值为"(.*)"regex: consul# 执行动作为删除,默认值为"replace",有效值有多种#   https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_actionaction: drop

2.2 重新加载配置

[root@prometheus-server33 ~]# curl -X POST http://10.0.0.33:9090/-/reload

2.3 被监控节点注册到console集群

[root@node-exporter42 ~]# curl -X PUT -d '{"id":"prometheus-node42","name":"dezyan-prometheus-node42","address":"10.0.0.42","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.42:9100","interval":"5m"}]}' http://10.0.0.42:8500/v1/agent/service/register[root@node-exporter43 ~]# curl -X PUT -d '{"id":"prometheus-node42","name":"dezyan-prometheus-node42","address":"10.0.0.43","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.43:9100","interval":"5m"}]}' http://10.0.0.42:8500/v1/agent/service/register

或者使用Postman这样的工具

PUT http://10.0.0.42:8500/v1/agent/service/register
{"id":"prometheus-node43","name":"dezyan-prometheus-node42","address":"10.0.0.42","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.42:9100","interval":"5m"}]}PUT http://10.0.0.43:8500/v1/agent/service/register
{"id":"prometheus-node43","name":"dezyan-prometheus-node43","address":"10.0.0.43","port":9100,"tags":["node-exporter"],"checks": [{"http":"http://10.0.0.43:9100","interval":"5m"}]}

3.Prometheus-server31节点

3.1编辑配置文件

[root@prometheus-server31 ~]# cd /dezyan/softwares/prometheus-2.53.4.linux-amd64/
[root@prometheus-server31 ~]# vim prometheus.yml
remote_write:- url: http://10.0.0.43:8428/api/v1/write- job_name: "prometheus-federate-32"metrics_path: "/federate"# 用于解决标签的冲突问题,有效值为: true和false,默认值为false# 当设置为true时,将保留抓取的标签以忽略服务器自身的标签。说白了会覆盖原有标签。# 当设置为false时,则不会覆盖原有标签,而是在标点前加了一个"exported_"前缀。honor_labels: trueparams:"match[]":- '{job="promethues"}'- '{__name__=~"job:.*"}'- '{__name__=~"node.*"}'static_configs:- targets:- "10.0.0.32:9090"- job_name: "prometheus-federate-33"metrics_path: "/federate"honor_labels: trueparams:"match[]":- '{job="promethues"}'- '{__name__=~"job:.*"}'- '{__name__=~"node.*"}'static_configs:- targets:- "10.0.0.33:9090"

3.2 重新加载配置

[root@prometheus-server33 ~]# curl -X POST http://10.0.0.31:9090/-/reload

六、在VictoriaMetrics的WebUI查看数据

http://10.0.0.43:8428/

七、配置grafana的数据源及URL

数据源依旧是Prometheus
数据源来源的IP是http://10.0.0.43:8428

八、导入grafana的模板ID并选择数据源出图展示

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

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

相关文章

分享一款替代 GitLab 的开源软件 gogs ,适合中小企业,非常优秀!

这篇文章,分享一款替代 GitLab 的开源软件 gogs ,Github 上有 4 万多颗 star ,笔者认为它非常优秀 ,适合中小企业。1 Gogs 简介 Gogs 是一款极易搭建的自助 Git 服务,它使用 Go 语言开发,只要 Go 语言支持的平台它都支持,包括 Linux 、Mac OS X、Windows 以及 ARM 平台。…

【闲话 No.3】 并查集相关

并查集的复杂度证明及可持久化。命に嫌われている。 小唐话 感觉有的时候已经无法与人正常交流,净做唐事、说些唐话了。或许是我无法准确猜到别人喜欢什么吧。 不过还是自己心底一点 joker 之心/私心作祟吧。 感觉我有时做的唐事真的挺对不起大家的。 可我又怎么战胜心底的那…

3.29 学习记录

实现了科技页面的树状图查询和分页查询

Django - admin djangoql

效果: 1. pip installpip install djangoql 2. settings.pyINSTALLED_APPS = [djangoql, ] 3. admin.pyfrom django.contrib import admin from djangoql.admin import DjangoQLSearchMixinfrom .models import *@admin.register(User) class UserAdmin(DjangoQLSearchMixi…

[rCore学习笔记 025 extend] 带优先级的抢占式调度

引言 因为rcore并非设计为一个rtos,而是在我们需要的时候我们需要在设计的时候考虑到线程切换的时候的延时问题. 回顾上一部分的使用环形队列进行调度的方式,我们会发现我们寻找下一个Ready的任务的时间是不均匀的.并且我们的任务是没有优先级的,可以认为是平权的,因此,为了:快…

第五周第三章3.6-3.8,思考与练习3.19-3.21

3.6 import time a = "strating" print("{:^}".format(a),end=) for i in range(11): s = . * i print("{:<}".format(s),end=) time.sleep(1) print("Done!") 思考与练习3.19 import time current_time = time.time() time_tuple …

【Java - demo】Redis开发入门

Redis 是一个高性能的键值存储数据库,常用于缓存、消息队列等场景。 本文将以简单易懂的方式介绍 Redis 的基本概念和使用方法,并附上 Java 示例代码,帮助你快速上手。 一、Redis 是什么? Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统。它支持多…

【流量预警】装了UU远程/GameViewer的小心了

前言 月末了,没流量了,不过我今天怎么跑了4个G的流量? 我倒要看看是谁干的好事。热点跑的?但是我一整天都挂着手机连电脑没动啊,最多也就偶尔用了一下。 别让我找到是谁偷跑我流量跑这么多 好啊好,UU远程,得,你清高,你偷偷上传我电脑数据是吧。虽说没抓到现行也只能怀…

注释、关键字、标识符

1、Java的注释有几种? 单行注释 使用双斜杠//,仅注释该行//后的内容。 多行注释(块注释) 使用/*开始,*/结束,中间所有内容均为注释,可跨越多行。 文档注释 使用/**开始,*/结束,通常用于生成API文档(通过Javadoc工具)。支持特定标签(如@param、@return等)。 关键区…

Mysql全量安装配置教程(超详细window版本无需配置环境变量)尊享篇

官网下载注册 注册 官网地址:https://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html#windows 下载需要注册登录 注册可以用临时邮箱地址:https://www.suiyongsuiqi.com/zh/mail/ 如果显示400badrequest 打开无痕浏览窗口重新访问即可 解压所需…