Grafana / Prometheus / 监控平台 / 系统运维

Prometheus结合Consul实现服务自动发现注册

温馨提示:本文最后更新于2021-12-06 12:29:56,某些文章具有时效性,若有错误或已失效,请在下方留言或提交工单提交工单
浅时光 · 12月6日 · 2021年 · 本文5844个字,预计阅读15分钟 5896次已读

一、环境规划和初始化


1、环境规划

主机名服务器IP应用程序用途
c文章来源(Source):浅时光博客onsul01192.168.66.130consul服务发现、服务注册
consul02192.168.66.131consul
consul03192.168.66.132consul
prometheus192.168.66.133Prometheus Grafana Altermanager PrometheusAlert监控、数据展示、告警
node_export192.168.66.134node_export节点监控
Nginx-LB192.168.66.135nginx负载均衡

2、配置主机名

  • 所有节点执行
[root@localhost ~]# hostnamectl set-hostname xxxx

3、关闭防护墙

systemctl stop firewalld && systemctl disable firewalld && systemctl status firewalld
systemctl stop NetworkManager && systemctl disable NetworkManager && systemctl status NetworkManager

4、关闭SELinux

sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 && getenforce

二、Consul集群部署


1、下载安装包

#consul节点服务器执行下面的命令
mkdir /opt/soft
cd /opt/soft
wget https://releases.hashicorp.com/consul/1.10.3/consul_1.10.3_linux_amd64.zip

#创建数据目录
mkdir -p /data/consul

2、解压并安装

unzip consul_1.10.3_linux_amd64.zip -d /usr/local/
cp /usr/local/consul /usr/local/bin/

(1)通过systemd托管

#consul01节点
cat > /usr/lib/systemd/system/consul.service <<EOF
[Unit]
Description=Prometheus consul
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
User=root
Group=root
Type=simple
ExecStart=consul agent -server -bootstrap-expect=3 -data-dir=/data/consul -client=0.0.0.0 -datacenter=consul -bind=192.168.66.130 -ui
# data-dir 数据目录
# datacenter 数据中心名
# -bind绑定网卡,解决主机多张网卡冲突无法绑定的问题
[Install]
WantedBy=multi-user.target
EOF


#consul02节点
cat > /usr/lib/systemd/system/consul.service <<EOF
[Unit]
Description=Prometheus consul
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/consul agent -server -bootstrap-expect=3 -data-dir=/data/consul -client=0.0.0.0 -datacenter=consul -bind=192.168.66.131 -ui -join=192.168.66.130
# data-dir 数据目录
# datacenter 数据中心名
# join 需要加入的server的ip,我这里是192.168.66.130
# -bind绑定网卡,解决主机多张网卡冲突无法绑定的问题
[Install]
WantedBy=multi-user.target
EOF


#consul03节点
cat > /usr/lib/systemd/system/consul.service <<EOF
[Unit]
Description=Prometheus consul
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/consul agent -server -bootstrap-expect=3 -data-dir=/data/consul -client=0.0.0.0 -datacenter=consul -bind=192.168.66.132 -ui -join=192.168.66.130
# data-dir 数据目录
# datacenter 数据中心名
# join 需要加入的server的ip,我这里是192.168.66.130
# -bind绑定网卡,解决主机多张网卡冲突无法绑定的问题
[Install]
WantedBy=multi-user.target
EOF

(2)启动con文章来源(Source):https://www.dqzboy.comsul服务

  • 三台consul节点执行下面的命令
systemctl daemon-reload
systemctl start consul
systemctl enable consul
systemctl status consul

4、验证集群状态

[root@consul01 ~]# consul operator raft list-peers
Prometheus结合Consul实现服务自动发现注册-浅时光博客
  • 浏览器输入任意Consul节点IP加8500端口访问
Prometheus结合Consul实现服务自动发现注册-浅时光博客

二、Prometheus部署


三、Grafana部署


四、Consul集群负载


1、安装Nginx

[root@nginx-lb ~]# mkdir -p /opt/soft && cd /opt/soft
[root@nginx-lb soft]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.1-1.el7.ngx.x86_64.rpm

[root@nginx-lb soft]# rpm -ivh nginx-1.20.1-1.el7.ngx.x86_64.rpm

2、启动Nginx

[root@nginx-lb soft]# systemctl start nginx
[root@nginx-lb soft]# systemctl enable nginx
[root@nginx-lb soft]# systemctl status nginx

#检查服务端口监听状态
[root@nginx-lb soft]# lsof -i:80

3、配置Nginx

1、Nginx代理Consul集群

[root@nginx-lb ~]# vim /etc/nginx/conf.d/consul.conf
upstream consul {  #负载均衡模块  
    server 192.168.66.130:8500;  #后端服务器IP和端口
    server 192.168.66.131:8500;
    server 192.168.66.132:8500;
}

server{
    listen       80;
    server_name  _;  #域名地址或当前nginx服务器IP地址;_表示匹配所有域名

    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-Host  $host:$server_port;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto  $http_x_forwarded_proto;
        proxy_set_header   Host $http_host;
        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        chunked_transfer_encoding off;
        proxy_ignore_client_abort on;
        proxy_pass http://consul;  #上面upstream的名称
    }
}

2、开启Nginx目录浏览

  • 用来存储export文件,下面通过脚本直接下载
[root@nginx-lb ~]# vim /etc/nginx/conf.d/files.conf
server {
    listen       8090;
    server_name  _;
    location / { 
        root   /opt/soft;       #创建文件存放的目录
        autoindex on;           #开启nginx目录浏览功能
        autoindex_format html;    #以html风格将目录展示在浏览器中
        autoindex_exact_size off; #切换为 off 后,以可读的方式显示文件大小,单位为 KB、MB 或者 GB
        autoindex_localtime on;   #以服务器的文件时间作为显示的时间  
        charset utf-8,gbk;     #展示中文文件名,解决中文乱码问题
    }
}

3、重载Nginx配置文件

[root@nginx-lb ~]# nginx -t
[root@nginx-lb ~]# nginx -s reload

4、测试验证

  • 浏览器输入LB服务器IP或者域名
Prometheus结合Consul实现服务自动发现注册-浅时光博客
  • 查看文件浏览
Prometheus结合Consul实现服务自动发现注册-浅时光博客

五、Consul注册节点


文章来源(Source):浅时光博客

1、修改Prometheus配置

[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
  - job_name: 'consul-node-exporter'
    consul_sd_configs:
      - server: '192.168.66.135'  #consul集群代理服务器地址
        services: []
    relabel_configs:
      - source_labels: [__meta_consul_tags]
        regex: .*node-exporter.* #匹配注册上来的服务tag,然后放到对应的组里
        action: keep
      - regex: __meta_consul_service_metadata_(.+)
        action: labelmap

2、重启Prometheus服务

[root@prometheus ~]# systemctl restart prometheus

3、部署export并注册服务

[root@node_export ~]# cat > consul_export.sh <<\EOF
#!/bin/bash
IP_ADDR=$(ifconfig ens33 | grep -w inet | awk '{print $2}')
echo ${IP_ADDR}
PROMETHETS="192.168.66.134"
CONSUL_LB="192.168.66.135"

wget http://192.168.66.135:8090/node_exporter-1.2.2.linux-amd64.tar.gz

tar -xf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/
cd /usr/local
mv node_exporter-1.2.2.linux-amd64 node_exporter
cat > /etc/systemd/system/node_exporter.service <<DEOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
DEOF

systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter

curl -X PUT -d '{"id": "node-exporter-'${IP_ADDR}'", "name": "PROD_NODES", "address": "'${IP_ADDR}'", "port": 9100, "tags": ["node-exporter"], "checks": [{"http": "http://'${PROMETHETS}':9100/metrics", "interval": "5s"}]}'  http://${CONSUL_LB}/v1/agent/service/register
EOF

#执行脚本
[root@node_export ~]# bash consul_export.sh
  • 删除服务操作如下
[root@prometheus ~]# curl -X PUT http://192.168.66.135/v1/agent/service/deregister/node-exporter-192.168.66.134
  • 注意:node-exporter-192.168.66.134是服务的ID

4、检查服务是否正常注册

Prometheus结合Consul实现服务自动发现注册-浅时光博客



关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【加群】即可加入到我们的技术讨论群里面共同学习。
关注博主不迷路~


本文作者:浅时光
原文链接:https://www.dqzboy.com/9297.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可
转载时请以超链接形式标明文章原始出处和作者信息

0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.422 秒 | 查询 18 次 | 内存 40.07 MB