步骤2的自动化脚本方式:
采用的是consul-agent + consul-template的方式。即 consul-template负责动态拉取server端的配置,然后consul-agent端动态更新配置上报到server端,最终实现promethes数据动态更新
其实这种方案跟后面的方案5的升级版达到的效果是一样的。只不过方案5没用使用consul-agent
#!/bin/bash# ====================== 你的配置 ====================== CONSUL_SERVER="192.168.70.16" HOSTNAME=$(hostname) LOCAL_IP=$(hostname -I | awk '{print $1}') # ======================================================set -e# 1. 安装依赖 apt update && apt install -y wget curl unzip# 2. 安装 node_exporter cd /tmp wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux_amd64.tar.gz tar zxf node_exporter-1.8.2.linux_amd64.tar.gz cp node_exporter-1.8.2.linux_amd64/node_exporter /usr/local/bin/cat > /etc/systemd/system/node_exporter.service <<EOF [Unit] Description=node_exporter [Service] ExecStart=/usr/local/bin/node_exporter Restart=always [Install] WantedBy=multi-user.target EOFsystemctl daemon-reload systemctl enable --now node_exporter# 3. 安装 Consul Agent wget https://releases.hashicorp.com/consul/1.15.4/consul_1.15.4_linux_amd64.zip unzip -o consul_1.15.4_linux_amd64.zip cp consul /usr/local/bin/mkdir -p /etc/consul.d /var/lib/consulcat > /etc/consul.d/consul.hcl <<EOF data_dir = "/var/lib/consul" client_addr = "0.0.0.0" retry_join = ["${CONSUL_SERVER}"] bind_addr = "${LOCAL_IP}" node_name = "${HOSTNAME}" enable_local_script_checks = true EOFcat > /etc/systemd/system/consul.service <<EOF [Unit] Description=Consul Agent After=network.target [Service] ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d Restart=always User=root [Install] WantedBy=multi-user.target EOFsystemctl daemon-reload systemctl enable --now consul# 4. 安装 consul-template(从 KV 拉模板) wget https://releases.hashicorp.com/consul-template/0.39.0/consul-template_0.39.0_linux_amd64.zip unzip -o consul-template_0.39.0_linux_amd64.zip cp consul-template /usr/local/bin/mkdir -p /etc/consul-template# 5. 配置从 KV 拉取模板,生成 agent 服务文件 cat > /etc/consul-template/config.hcl <<EOF consul {address = "${CONSUL_SERVER}:8500" }template {# 从 Consul KV 读取模板source = "kv://config/templates/node_exporter.ctmpl"# 生成到 Consul Agent 目录destination = "/etc/consul.d/node_exporter.json"# 渲染后自动让 agent 加载command = "consul reload"wait {min = 2smax = 5s} } EOFcat > /etc/systemd/system/consul-template.service <<EOF [Unit] Description=consul-template After=network.target consul.service[Service] ExecStart=/usr/local/bin/consul-template -config=/etc/consul-template/config.hcl Restart=always Environment="HOSTNAME=${HOSTNAME}" Environment="LOCAL_IP=${LOCAL_IP}" User=root[Install] WantedBy=multi-user.target EOFsystemctl daemon-reload systemctl enable --now consul-templateecho "=============================================" echo "✅ 部署完成!终极架构已启动!" echo "📌 模板来源:Consul KV" echo "📌 服务注册:Consul Agent" echo "📌 修改 KV 模板 → 自动全机更新!" echo "============================================="
