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

@Prometheus动态配置管理-ConsulConfd

文章目录

      • 动态配置管理 Consul + Confd
        • **一、目标**
        • **二、架构组件**
        • **三、环境准备**
        • **四、配置 Consul**
          • 1. 注册监控目标(服务发现)
          • 2. 存储告警规则(KV 存储)
        • **五、配置 Confd**
          • 1. 监控目标模板配置
          • 2. 告警规则模板配置
        • **六、配置 Prometheus**
        • **七、启动 Confd**
        • **八、验证流程**
          • 1. **测试服务发现**
          • 2. **测试告警规则更新**
        • **九、故障排查**
        • **十、维护说明**

动态配置管理 Consul + Confd


一、目标

实现 Prometheus 监控目标和告警规则的动态管理:

  1. 服务自动注册到 Consul 时,Prometheus 自动发现并监控
  2. 修改 Consul 中的告警规则时,Prometheus 自动加载新规则
  3. 避免手动修改配置文件和重启 Prometheus

二、架构组件
组件作用
Consul服务注册与配置存储中心,存储监控目标元数据和告警规则
Confd监听 Consul 变化,动态生成 Prometheus 配置文件
Prometheus监控系统,通过 Confd 生成的配置文件加载监控目标和告警规则

三、环境准备
  1. 安装 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 &  # 启动开发模式
    
  2. 安装 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}
    
  3. 安装 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

九、故障排查
  1. Confd 未生成文件

    • 检查 Consul KV 路径是否正确:consul kv get -recurse /prometheus
    • 查看 Confd 日志:journalctl -u confd(若使用 systemd 托管)
  2. Prometheus 未重载配置

    • 确保启动参数包含 --web.enable-lifecycle
    • 手动触发重载:curl -X POST http://localhost:9090/-/reload
  3. 配置语法错误

    • 使用 Prometheus 校验工具:promtool check rules /etc/prometheus/rules/*.yml

十、维护说明
  1. 备份策略

    • 定期备份 Consul 数据:consul snapshot save backup.snap
    • 备份 Confd 模板文件(/etc/confd 目录)
  2. 扩展建议

    • 为不同环境(dev/test/prod)使用 Consul 前缀隔离:/env/prod/prometheus/...
    • 添加 Prometheus 配置版本管理(如与 Git 集成)

附:架构图

注册
注册
KV 变更通知
生成
生成
重载配置
Node Exporter
Consul
App Service
Confd
Prometheus 目标文件
Prometheus 规则文件
Prometheus

通过这篇文档,可实现 Prometheus 监控系统的全动态管理,提升运维自动化程度。

http://www.xdnf.cn/news/11893.html

相关文章:

  • ArcGIS Pro 3.4 二次开发 - 地图探索
  • unix/linux,sudo,其基本概念、定义、性质、定理
  • 705SJBH超市库存管理系统文献综述
  • 关于面试找工作的总结(四)
  • 【无标题】图着色问题的革命性解决方案:拓扑膨胀-收缩对偶理论
  • 【黄金评论】美元走强压制金价:基于NLP政策因子与ARIMA-GARCH的联动效应解析
  • react+taro 开发第五个小程序,解决拼音的学习
  • 如果安装并使用RustDesk
  • TDengine 在电力行业如何使用 AI ?
  • win32com.client模块 —— Python实现COM自动化控制与数据交互
  • Linux系统iptables防火墙实验拓补
  • 77、完全植入式脑机接口神经数据编码解码数据处理等问题答疑[嘿!快看,馒头老师在这里蹲着!]
  • 详解Jenkins Pipeline 中git 命令的使用方法
  • Kubernetes 网络方案:Flannel 插件全解析
  • 常用的录音芯片型号有哪些?
  • 高并发区块链系统实战:从架构设计到性能优化
  • NFS的基本配置
  • Java中的多态
  • Java SpringBoot 调用大模型 AI 构建智能应用实战指南
  • 在树莓派上添加音频输入设备的几种方法
  • Rust学习(1)
  • 采用 Docker GPU 部署的 Ubuntu 或者 windows 桌面环境
  • Elasticsearch中的刷新(Refresh)和刷新间隔介绍
  • 【Zephyr 系列 7】BLE 数据透传系统设计与实现:双向通信、缓冲区与状态同步全解析
  • c++第6天--运算符重载
  • Linux基础开发工具——yum工具
  • Flutter快速上手,入门教程
  • stm32——UART和USART
  • URL 结构说明+路由(接口)的认识
  • VSCode 工作区配置文件通用模板(CMake + Ninja + MinGW/GCC 编译器 的 C++ 或 Qt 项目)