@Prometheus动态配置管理-ConsulConfd
文章目录
- 动态配置管理 Consul + Confd
- **一、目标**
- **二、架构组件**
- **三、环境准备**
- **四、配置 Consul**
- 1. 注册监控目标(服务发现)
- 2. 存储告警规则(KV 存储)
- **五、配置 Confd**
- 1. 监控目标模板配置
- 2. 告警规则模板配置
- **六、配置 Prometheus**
- **七、启动 Confd**
- **八、验证流程**
- 1. **测试服务发现**
- 2. **测试告警规则更新**
- **九、故障排查**
- **十、维护说明**
动态配置管理 Consul + Confd
一、目标
实现 Prometheus 监控目标和告警规则的动态管理:
- 服务自动注册到 Consul 时,Prometheus 自动发现并监控
- 修改 Consul 中的告警规则时,Prometheus 自动加载新规则
- 避免手动修改配置文件和重启 Prometheus
二、架构组件
组件 | 作用 |
---|---|
Consul | 服务注册与配置存储中心,存储监控目标元数据和告警规则 |
Confd | 监听 Consul 变化,动态生成 Prometheus 配置文件 |
Prometheus | 监控系统,通过 Confd 生成的配置文件加载监控目标和告警规则 |
三、环境准备
-
安装 Consul(以 Linux 为例):
wget https://releases.hashicorp.com/consul/1.15.3/consul_1.15.3_linux_amd64.zip unzip consul_1.15.3_linux_amd64.zip sudo mv consul /usr/local/bin/ consul agent -dev -client=0.0.0.0 & # 启动开发模式
-
安装 Confd:
wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0/confd-0.16.0-linux-amd64 mv confd-0.16.0-linux-amd64 /usr/local/bin/confd chmod +x /usr/local/bin/confd mkdir -p /etc/confd/{conf.d,templates}
-
安装 Prometheus(略,假设已安装)
四、配置 Consul
1. 注册监控目标(服务发现)
# 注册 Node Exporter 示例
curl -X PUT http://localhost:8500/v1/agent/service/register -d '{"ID": "node-exporter-1","Name": "node-exporter","Tags": ["prometheus", "node"],"Address": "192.168.1.100","Port": 9100,"Meta": {"job": "node"}
}'
2. 存储告警规则(KV 存储)
# 添加 CPU 告警规则
consul kv put prometheus/rules/cpu_high 'groups:
- name: cpu_alertsrules:- alert: HighCPUexpr: avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance) > 0.8for: 10mlabels:severity: critical'
五、配置 Confd
1. 监控目标模板配置
创建模板定义文件 /etc/confd/conf.d/prometheus-targets.toml
:
[template]
src = "targets.tmpl" # 模板文件名
dest = "/etc/prometheus/targets/node.json" # 生成的配置文件路径
keys = ["/prometheus/targets/node"] # 监听的 Consul KV 路径
reload_cmd = "/bin/bash -c 'curl -X POST http://localhost:9090/-/reload'" # 触发 Prometheus 重载
创建模板文件 /etc/confd/templates/targets.tmpl
:
[{{range $index, $item := ls "/prometheus/targets/node"}}{{if $index}},{{end}}{"targets": [ "{{.Value}}" ],"labels": {"job": "node","instance": "{{.Key}}"}}{{end}}
]
2. 告警规则模板配置
创建模板定义文件 /etc/confd/conf.d/prometheus-rules.toml
:
[template]
src = "rules.tmpl"
dest = "/etc/prometheus/rules/alerts.yml"
keys = ["/prometheus/rules"] # 监听整个 rules 目录
reload_cmd = "/bin/bash -c 'curl -X POST http://localhost:9090/-/reload'"
创建模板文件 /etc/confd/templates/rules.tmpl
:
groups:
{{range $key, $value := getvs "/prometheus/rules/*"}}{{$value | toYAML | nindent 2}}
{{end}}
六、配置 Prometheus
修改 prometheus.yml
启用动态配置:
scrape_configs:- job_name: 'node'file_sd_configs:- files: ['/etc/prometheus/targets/*.json'] # 加载 Confd 生成的目标文件rule_files:- /etc/prometheus/rules/*.yml # 加载 Confd 生成的规则文件
启动 Prometheus(启用配置重载 API):
prometheus --web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml
七、启动 Confd
confd -backend consul -node localhost:8500 -watch -log-level debug
参数说明:
-watch
:实时监听 Consul 变化-log-level debug
:输出详细日志(生产环境建议用info
)
八、验证流程
1. 测试服务发现
# 在 Consul 注册新服务
consul kv put prometheus/targets/node/web-server "192.168.1.101:9100"# 检查生成的目标文件
cat /etc/prometheus/targets/node.json# 在 Prometheus Web 界面(9090 端口)检查 Targets
2. 测试告警规则更新
# 修改 Consul 中的告警规则
consul kv put prometheus/rules/memory_high 'groups:
- name: memory_alertsrules:- alert: HighMemoryexpr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes < 0.2'# 检查生成的规则文件
cat /etc/prometheus/rules/alerts.yml# 在 Prometheus Web 界面检查 Rules
九、故障排查
-
Confd 未生成文件
- 检查 Consul KV 路径是否正确:
consul kv get -recurse /prometheus
- 查看 Confd 日志:
journalctl -u confd
(若使用 systemd 托管)
- 检查 Consul KV 路径是否正确:
-
Prometheus 未重载配置
- 确保启动参数包含
--web.enable-lifecycle
- 手动触发重载:
curl -X POST http://localhost:9090/-/reload
- 确保启动参数包含
-
配置语法错误
- 使用 Prometheus 校验工具:
promtool check rules /etc/prometheus/rules/*.yml
- 使用 Prometheus 校验工具:
十、维护说明
-
备份策略
- 定期备份 Consul 数据:
consul snapshot save backup.snap
- 备份 Confd 模板文件(
/etc/confd
目录)
- 定期备份 Consul 数据:
-
扩展建议
- 为不同环境(dev/test/prod)使用 Consul 前缀隔离:
/env/prod/prometheus/...
- 添加 Prometheus 配置版本管理(如与 Git 集成)
- 为不同环境(dev/test/prod)使用 Consul 前缀隔离:
附:架构图
通过这篇文档,可实现 Prometheus 监控系统的全动态管理,提升运维自动化程度。
相关文章:
@Prometheus动态配置管理-ConsulConfd
文章目录 动态配置管理 Consul Confd**一、目标****二、架构组件****三、环境准备****四、配置 Consul**1. 注册监控目标(服务发现)2. 存储告警规则(KV 存储) **五、配置 Confd**1. 监控目标模板配置2. 告警规则模板配置 **六、配…...
CentOS7 + JDK8 虚拟机安装与 Hadoop + Spark 集群搭建实践
前言 在大数据时代,Hadoop 和 Spark 是两种非常重要的分布式计算框架。本文将详细介绍如何在 CentOS7 JDK8 的虚拟机环境中搭建 Hadoop Spark 分布式集群,包括 Spark Standalone 和 Hadoop Spark on YARN 两种模式,并提供具体的代码示例。…...

从OSI到TCP/IP:网络协议的演变与作用
个人主页:chian-ocean 文章专栏-NET 从OSI到TCP/IP:网络协议的演变与作用 个人主页:chian-ocean文章专栏-NET 前言网络发展LANWAN 协议举个例子: 协议的产生背景 协议的标准化OSI模型参考OSI各个分层的作用各层次的功能简介 TCP/…...

Stream流性能分析及优雅使用
文章目录 摘要一、Stream原理解析1.1、Stream总概1.2、Stream运行机制1.2.1、创建结点1.2.1、搭建流水线1.2.3、启动流水线 1.3、ParallelStream 二、性能对比三、优雅使用3.1 Collectors.toMap()3.2 findFirst(),findAny()3.3 增删元素3.4 ParallelStream 四、总结…...
iOS 电子书听书功能的实现
在 iOS 应用中实现电子书听书(文本转语音)功能,可以通过系统提供的 AVFoundation 框架实现。以下是详细实现步骤和代码示例: 核心步骤: 导入框架创建语音合成器配置语音参数实现播放控制处理后台播放添加进度跟踪 完整…...

【和春笋一起学C++】(十七)C++函数新特性——内联函数和引用变量
C提供了新的函数特性,使之有别于C语言。主要包括: 内联函数;按引用传递变量;默认参数值;函数重载(多态);模版函数; 因篇幅限制,本文首先介绍内联函数和引用…...
GitHub 趋势日报 (2025年06月02日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 1339 prompt-eng-interactive-tutorial 1080 courses 624 onlook 596 system-desi…...
卫星的“太空陀螺”:反作用轮如何精准控制姿态?
卫星的“太空陀螺”:反作用轮如何精准控制姿态? 在距地面500公里的轨道上,一颗遥感卫星正以7.8km/s的速度飞越目标区域。此时星载计算机发出指令:“滚转15并对准目标点”。短短数秒后,数吨重的卫星如同被无形之手推动般…...

proteus新建工程
1 点击新建工程 2 输入项目名,选择工程文件夹 3 下一步 4 不创建pcb 5 直接下一步 6 点击完成 7 创建完毕...
缓存击穿 缓存穿透 缓存雪崩
缓存击穿 缓存穿透 缓存雪崩 在日常开发中,我们经常会在后端引入 Redis 缓存来减轻数据库压力、提高访问性能。本文将逐点介绍 Redis 缓存常见问题及解决策略。 缓存穿透 问题描述: 缓存穿透指的是客户端请求的数据,在缓存中和数据库中都不…...

RTC实时时钟DS1338Z-33/PT7C433833WEX国产替代FRTC1338S
FRTC1338S是NYFEA徕飞公司推出的一种高性能的实时时钟芯片,它采用了SOP8封装技术,这种技术因其紧凑的尺寸和出色的性能而被广泛应用于各类电子设备中。 FRTC1338S串行实时时钟(RTC)是一种低功耗的全二进制编码十进制(BCD)时钟/日历外加56字节的非易失性…...

Redis命令使用
Redis是以键值对进行数据存储的,添加数据和查找数据最常用的2个指令就是set和get。 set:set指令用来添加数据。把key和value存储进去。get:get指令用来查找相应的键所对应的值。根据key来取value。 首先,我们先进入到redis客户端…...

【免费数据】1980-2022年中国2384个站点的水质数据
水,是生命之源,关乎着地球上每一个生物的生存与发展。健康的水生生态系统维持着整个水生态的平衡与活力;更是确保人类能持续获得清洁水源的重要保障。水质数据在水质研究、海洋生物量测算以及生物多样性评估等诸多关键领域都扮演着举足轻重的…...
Java基础 Day28 完结篇
一、方法引用 对 Lambda 表达式的进一步简化 方法引用使用一对冒号 :: Tips:静态方法用类名加双冒号,非静态方法用对象名加双冒号 通过方法的名字来指向一个方法 参数可推导即可省略 可以使语言的构造更紧凑简洁,减少冗余代码 二、单元…...
小红薯商品搜索详情分析与实现
前言 小红书作为国内知名的社交电商平台,拥有丰富的商品数据和用户评价信息。对于数据分析师、产品经理或电商从业者来说,能够获取小红书的商品数据具有重要的商业价值。本文将详细介绍如何通过逆向工程实现小红书商品搜索API的调用。 免责声明:本文仅用于技术学习和研究目…...

Git 极简使用指南
Git 是一个强大的分布式版本控制系统,但入门只需要掌握几个核心概念和命令。本指南旨在帮助你快速上手,处理日常开发中最常见的 80% 的场景。 核心概念 仓库 (Repository / Repo): 你的项目文件夹,包含了项目的所有文件和完整的历史记录。…...

力扣刷题Day 69:搜索二维矩阵(74)
1.题目描述 2.思路 首先判断target是否有可能在矩阵的某一行里,没可能直接返回False,有可能就在这一行里二分查找。 3.代码(Python3) class Solution:def searchMatrix(self, matrix: List[List[int]], target: int) -> boo…...
c#压缩与解压缩-SharpCompress
SharpCompress SharpCompress 是一个开源项目库,能够处理文件。c#库对于压缩已经有很多,可以随意选择,看了SharpCompress感觉比较简洁,还是介绍给大家。 项目地址: sharpcompress 项目使用 引入nuget包࿱…...
Neo4j 安全深度解析:原理、技术与最佳实践
在当今数据驱动的世界中,图数据库承载着关键的关系信息,其安全性至关重要。Neo4j 提供了一套多层次、纵深防御的安全体系。 Neo4j 的安全体系提供了从认证授权到数据加密、审计追溯的完整解决方案。安全不是单一功能而是一种持续状态,其有效…...

MySQL指令个人笔记
MySQL学习,SQL语言笔记 一、MySQL 1.1 启动、停止 启动 net start mysql83停止 net stop mysql831.2 连接、断开 连接 mysql -h localhost -P 3306 -u root -p断开 exit或者ctrlc 二、DDL 2.1 库管理 2.1.1 直接创建库 使用默认字符集和排序方式…...

2022年 国内税务年鉴PDF电子版Excel
2022年 国内税务年鉴PDF电子版Excelhttps://download.csdn.net/download/2401_84585615/89784658 https://download.csdn.net/download/2401_84585615/89784658 2022年国内税务年鉴是对中国税收政策、税制改革和税务管理实践的全面总结。这份年鉴详细记录了中国税收系统的整体状…...

基于Java的OPCDA采集中间件
1.软件功能及技术特点简介: 软件功能及技术特点简介: OPCDA是基于Java语言开发的OPC client(OPC客户端)跨平台中间件软件,他支持OPC SERVER的OPC DA1.0/2.0/3.0。OPCDA实时采集数据(包括实时数据、报警数…...
基于PyQt5的相机手动标定工具:原理、实现与应用
基于PyQt5的相机手动标定工具:原理、实现与应用 一、背景介绍二、功能详解与实现原理2.1 图像加载与预处理2.2 交互式透视调整2.3 透视变换数学原理2.4 图像拼接核心技术2.5 用户界面优化细节三、完整使用流程四、应用场景实例五、技术优势分析六、代码七、总结一、背景介绍 …...

vue2 项目中 npm run dev 运行98% after emitting CopyPlugin 卡死
今天在运行项目时,发现如下问题: 开始以为是node_modules依赖的问题,于是重新 npm install,重启项目后还是未解决。 在网上找了一圈发现有人说是 require引入图片地址没有写。在我的项目中排查没有这个问题,最后发现某…...

JavaScript 性能优化实战:从原理到框架的全栈优化指南
在 Web 应用复杂度指数级增长的今天,JavaScript 性能优化已成为衡量前端工程质量的核心指标。本文将结合现代浏览器引擎特性与一线大厂实践经验,构建从基础原理到框架定制的完整优化体系,助你打造高性能 Web 应用。 一、性能优化基础&#x…...

2025年- H61-Lc169--74.搜索二维矩阵(二分查找)--Java版
1.题目描述 2.思路 方法一: 定义其实坐标,右上角的元素(0,n-1)。进入while循环(注意边界条件,行数小于m,列数要>0)从右上角开始开始向左遍历(比当…...
微服务商城-用户微服务
数据表 用户表 CREATE DATABASE user; USE user;CREATE TABLE user (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 用户ID,username varchar(50) NOT NULL DEFAULT COMMENT 用户名,password varchar(50) NOT NULL DEFAULT COMMENT 用户密码,MD5加密…...
数学复习笔记 26
5.25:这题还是有点难度的。主要是出现了新的知识点,我现在还没有那么熟悉这个新的知识点。这块就是,假设一个矩阵可以写成一个列向量乘以一个行向量的形式,这两个向量都是非零向量,那么这个矩阵的秩等于一。这个的原理…...
创建型-设计模式
文章目录 单例模式工厂模式建造者模式原型模式 单例模式 单例模式有饿汉式 和 懒汉式。这个我觉得无需多言,每个学过Java的都知道。 1.单例的使用:我一般就是用饿汉式,因为App开发的开发一般数据处理并不复杂,所以直接使用饿汉式…...
移动AI神器GPT Mobile:多模型自由切换
GPT Mobile是什么 GPT Mobile是一款开源的本地移动部署AI工具,主要用于安卓设备。以下是其相关介绍: 功能特点 多模型交互:支持与多个大型语言模型(LLM)同时进行对话,用户导入相应的API密钥,就可连接OpenAI、Anthropic、Google、Ollama等平台,还能根据需求自由切换不同…...