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

consul-server端的启动与监控

一、使用consu-server来做服务发现动态管理每个节点的node_exporter

wget https://releases.hashicorp.com/consul/1.15.4/consul_1.15.4_linux_amd64.zip
unzip consul_1.15.4_linux_amd64.zip
mv consul /usr/local/bin/
consul version 
useradd -M -s /sbin/nologin consul
mkdir -p /etc/consul.d /opt/consul/data
chown -R consul:consul /opt/consul /etc/consul.d

配置启动文件

cat > /etc/consul.d/server.hcl <<'EOF'
datacenter = "dc1"
node_name  = "consul_server_BJ"
server     = true
bootstrap_expect = 1
client_addr = "0.0.0.0"
#bind_addr   = "{{ GetInterfaceIP \"eth0\" }}"   # 自动取 eth0 IP,也可手动写
bind_addr   = "192.168.70.15"
data_dir    = "/opt/consul/data"
ui          = true
ports {http = 8500
}
EOF

写成systemd服务

cat > /etc/systemd/system/consul.service <<'EOF'
[Unit]
Description=Consul Service Discovery
After=network.target[Service]
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5s
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now consul
systemctl status consul -l

访问页面:http://192.168.70.15:8500

给node_expoter配置的在线模板服务发现示例:

{"service": {"name": "node-exporter","tags": ["prometheus", "node-exporter", "metrics"],"port": 9100,"meta": {"metrics_path": "/metrics","scheme": "http","job": "node0000747"},"check": {"name": "node-exporter-health","http": "http://localhost:9100/metrics","interval": "30s","timeout": "5s"}}
}

image

 二、对于consul-server的监控,即补充通过curlAPI的方式获取到他的成员,然后写入到一个文件,让node_exporter去读取

1、在 Consul Server 上部署脚本创建/usr/local/bin/consul_members_exporter.sh

#!/bin/bash
# 通过 Consul API 获取成员状态,生成 Prometheus 格式指标OUTPUT_DIR="/var/lib/node_exporter/textfile_collector"
OUTPUT_FILE="$OUTPUT_DIR/consul_members.prom"mkdir -p $OUTPUT_DIR# 写入指标头
cat > $OUTPUT_FILE << 'EOF'
# HELP consul_serf_lan_member_status Serf LAN member status: 1=alive, 2=leaving, 3=left, 4=failed
# TYPE consul_serf_lan_member_status gauge
EOF# 调用 API 获取成员列表,生成指标
curl -s http://127.0.0.1:8500/v1/agent/members | jq -r '.[] | "consul_serf_lan_member_status{member=\"" + .Name + "\",addr=\"" + .Addr + "\"} " + (.Status | tostring)
' >> $OUTPUT_FILE

# 同时生成成员总数指标
cat >> $OUTPUT_FILE << EOF
# HELP consul_serf_lan_members_total Total number of LAN members
# TYPE consul_serf_lan_members_total gauge
consul_serf_lan_members_total $(curl -s http://127.0.0.1:8500/v1/agent/members | jq 'length')
EOF

赋权并测试:

chmod +x /usr/local/bin/consul_members_exporter.sh
bash /usr/local/bin/consul_members_exporter.sh
cat /var/lib/node_exporter/textfile_collector/consul_members.prom

加入定时任务

echo '* * * * * root /usr/local/bin/consul_members_exporter.sh > /dev/null 2>&1' > /etc/cron.d/consul-members

node_exporter 加载 textfile

node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector

如果是 systemd 管理,修改 /etc/systemd/system/node_exporter.service:

[Service]
ExecStart=/usr/local/bin/node_exporter --collector.textfile.directory=/var/lib/node_exporter/textfile_collector

systemctl daemon-reload
systemctl restart node_exporter

2、Prometheus 采集与告警

Prometheus 自动通过 node_exporter 采集到 consul_serf_lan_member_status。
告警规则:

groups:- name: consul-membersrules:- alert: ConsulNodeNotAliveexpr: consul_serf_lan_member_status != 1for: 1mlabels:severity: criticalannotations:summary: "Consul 节点 {{ $labels.member }} 状态异常"description: "节点 {{ $labels.member }} ({{ $labels.addr }}) 当前状态码为 {{ $value }},1=alive, 2=leaving, 3=left, 4=failed"

 

 

 
http://www.jsqmd.com/news/700746/

相关文章:

  • 算子数学|独立完整学科章节(百条原创公式· ROOT传世定稿)
  • 【AI原生开发实战】6.2 Agent生产部署与可观测性
  • Python的__enter__方法返回上下文管理器自身与with语句的嵌套支持
  • 2026房屋安全鉴定哪家靠谱:房屋鉴定/承载力专项检测鉴定/抗震性专项检测鉴定/灾后房屋质量检测/自建房安全排查/选择指南 - 优质品牌商家
  • 二手拆机公司 在笔记本上先贴一个唯一的编码 然后比如拆下 内存和硬盘 在内存和硬盘上各贴一个 二维码然后用pad扫描进去 这样做的目的是什么
  • CL2307OL CL2315OL带输入保护功能的原边控制恒压/恒流 PWM 驱动器
  • 稳定性-资金安全和资损防控
  • 深度测评2026年最佳餐厅预约小程序:智能就餐新选择你选对了吗
  • 基于领航-跟随者和人工潜能的无人机协调编队控制模拟研究(Matlab代码实现)
  • 2026年防爆声光报警灯公司权威推荐:防爆信号灯,防爆声光报警灯,防爆扬声器,防爆灯,qlight,优选指南! - 优质品牌商家
  • 2026年宁波粉末冶金齿轮定制:高精度零件快速交付与国产替代完全指南 - 精选优质企业推荐官
  • 一页纸|ELN全域基底 十大初等函数统一公式【乖乖数学】
  • C++编写低延迟MCP网关必须绕开的5个“教科书陷阱”:第3个让87%团队重构三次以上
  • 期刊论文用DeepSeek V4写,2026年4月比话降AI实测
  • 3分钟搞定Elsevier投稿监控:告别手动刷新的智能追踪方案
  • 用富文本写文章如何让文章变得优雅美观
  • 2026年第二季度无锡回收名酒市场指南:如何甄选专业可靠的服务伙伴 - 2026年企业推荐榜
  • 今日学习——信号signal
  • 2026学Java好不好找工作?揭秘行业真相与我的亲身经历
  • 如何配置Oracle 19c JSON存储_环境要求与自动类型映射
  • 创新实训开发日志:研途Buddy(二)
  • PLSQL插件DBATools,亲测可用
  • 全域数学|纳维-斯托克斯方程 完整严格求解过程【乖乖数学】
  • 2026年现阶段,江苏宥拓新材料有限公司在PTC加热膜领域口碑如何? - 2026年企业推荐榜
  • 怎么通过Node.js监控MongoDB的慢查询_监听数据库事件或利用APM工具集成
  • 嵌入式端部署Qwen1.5-0.5B仅需1.2MB RAM?揭秘GCC-O2+CMSIS-NN联合优化的7个关键补丁(附裸机运行实测日志)
  • C++26 contracts正式进入ISO标准后,你还在用assert调试?:4类生产环境崩溃案例+合约启用黄金 checklist
  • 2025届毕业生推荐的五大AI科研平台实际效果
  • 如何高效实现多用户通知系统而不造成数据库冗余
  • 零成本使用Claude Code的终极方案:Free Claude Code