一、consul_sd_configs
Consul SD配置允许从Consul的Catalog API检索抓取目标
1.部署Consul
安装参考文档:https://developer.hashicorp.com/consul/install#linux ,确认自己的操作系统和安装环境及版本,根据文档下载并安装
unzip -q consul_1.12.2_linux_amd64.zip #由于下载比较慢,直接使用原来已有的,解压出来其实就是consul的二进制命令
mkdir -p /data/consul
cp consul /usr/local/bin/
consul -h
# agent -server:以server模式运行服务 -bootstrap:首次部署时使用,会进行初始化,后面启动不需要 -bind:集群通信的监听地址 -client:客户端访问的地址 --data-dir:consul数据保存的目录 -ui:启用内置的web服务器,其他节点也可以开启 --datacenter指定默认的集群名称,不指定则默认为dc1
nohup consul agent -server -bootstrap -bind=192.168.10.91 -client=192.168.10.91 -data-dir=/data/consul -ui -node=192.168.10.91 &
#如果是集群,则其他节点可以使用下面的命令和第一台组成集群,后面加入的集群不需要-bootstrap参数, -ui 可以只有第一个节点的也可以不配置 生产环境应当集群部署,此处仅为 验证通过consul自动发现功能
#nohup consul agent -bind=192.168.10.92 -client=192.168.10.92 -data-dir=/data/consul -node=192.168.10.92 -join=192.168.10.91 & #需要包二进制文件拷贝到节点上 -join:加入到已有的consul环境 91是第一个节点的IP,92是要加入节点的IP
netstat -tnlp|grep consul #其中8500为consul的web端口,下面回访问
2.访问web
3.测试写入数据
#通过consul API写入
#192.168.10.89 为k8s集群节点master,写其他节点也可以 91为consul的服务IP 9100为k8s节点node-exporter的监听端口
curl -X PUT -d '{"id": "node-exporter89","name": "node-exporter89","address":"192.168.10.89","port":9100,"tags": ["node-exporter"],"checks": [{"http":"http://192.168.10.89:9100/","interval": "5s"}]}' http://192.168.10.91:8500/v1/agent/service/register
web界面验证数据
点击进入查看明细
4.配置prometheus通过consul自动发现
参考文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#consul_sd_config
为了方便调了,prometheus使用二进制部署的方式
- job_name: monitor_for_consul
honor_labels: true
metrics_path: /metrics
scheme: http
consul_sd_configs:
- server: 192.168.10.91:8500 # consul服务器地址,如果是集群则可以继续添加 -server: node2地址 可以添加多个 复制这两行依次粘贴即可
services: [] #发现的目标服务名称,即consul中左侧列表中services标签内显示的服务 空为所有服务, 可以写 servicea,servcieb,servicec
relabel_configs:
- source_labels: ['__meta_consul_tags']
target_label: 'product'
- source_labels: ['__meta_consul_dc']
target_label: 'idc'
- source_labels: ['__meta_consul_service']
regex: "consul"
action: drop #删除consul自己本身的services
# honor_labels 控制 Prometheus 如何处理已经存在于已抓取数据中的标签与Prometheus 将附加服务器端的标签之间的冲突("job"和"instance"标签, 手动配置的目标标签以及服务发现实现生成的标签) 。
# 如果 honor_labels 设置为"true", 则通过保留已抓取数据的标签值并忽略冲突的服务器端标签来解决标签冲突。说人话就是prometheus不会对服务在consul中配置的tag做修改直接保留下来
# 如果 honor_labels 设 置 为 "false" , 则 通 过 将 已 抓 取 数 据 中 的 冲 突 标 签 重 命 名 为 "exported_<original-label>"(例如"exported_instance", "exported_job") 然后附加服务器端标签来解决标签冲突
5.重启prometheus并查看服务
curl -X POST http://127.0.0.1:9090/-/reload
6.添加其他k8s节点,验证是否会自动发现
curl -X PUT -d '{"id": "node-exporter90","name": "node-exporter90","address":"192.168.10.90","port":9100,"tags": ["node-exporter"],"checks": [{"http":"http://192.168.10.90:9100/","interval": "5s"}]}' http://192.168.10.91:8500/v1/agent/service/register
curl -X PUT -d '{"id": "node-exporter91","name": "node-exporter91","address":"192.168.10.91","port":9100,"tags": ["node-exporter"],"checks": [{"http":"http://192.168.10.91:9100/","interval": "5s"}]}' http://192.168.10.91:8500/v1/agent/service/register
consul验证
prometheus验证
7.验证节点下线
curl --request PUT http://192.168.10.91:8500/v1/agent/service/deregister/node-exporter91 #下线节点也叫反注册
二、file_sd_configs
参考文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#file_sd_config
基于文件的服务发现提供了一种更通用的配置静态目标的方法,并作为插入自定义服务发现机制的接口。优点在于无需重启prometheus服务,并且兼顾类似Nginx include的功能
它读取一组包含零个或多个<static-config>s列表的文件。对所有已定义文件的更改都会通过磁盘监视检测到并立即应用。
虽然这些单独的文件会被监视是否有更改,但父目录也会被隐式监视。这是为了高效地处理原子重命名,并检测与配置的glob匹配的新文件。如果父目录包含大量其他文件,这可能会导致问题,
因为这些文件中的每一个都会被监视,即使与它们相关的事件并不相关。
文件可以以YAML或JSON格式提供。只应用导致目标群体形成良好的变化。
1.创建服务发现的配置文件
cd /usr/local/prometheus/
mkdir file_sd
cd file_sd
vim node.yaml
- targets:
- '192.168.10.89:9100'
- '192.168.10.90:9100'
- '192.168.10.91:9100'
2.添加prometheus配置
- job_name: monitor_for_file
honor_labels: true
metrics_path: /metrics
scheme: http
file_sd_configs:
- files:
- /usr/local/prometheus/file_sd/node.yaml
refresh_interval: 10s #默认5分钟
3.验证
curl -X POST http://127.0.0.1:9090/-/reload
4.修改文件,验证是否自动发现
vim node.yaml #删除一个节点
- targets:
- '192.168.10.89:9100'
- '192.168.10.90:9100'
验证
三、dns_sd_configs
参考文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#dns_sd_config
基于 DNS 的服务发现配置允许指定一组 DNS 域名,定期查询这些域名以发现目标列表。从 /etc/resolv.conf 中读取要发现的 DNS 服务器。
DNS服务发现方法仅支持 A、AAAA、MX、NS 和 SRV 记录查询,不支持 RFC6763中指定的高级 DNS-SD 方法。
1.添加DNS解析记录
2.配置promtheus
- job_name: monitor_for_dns
metrics_path: "/metrics"
dns_sd_configs:
- names:
- k8s-master.xxxx.com
- k8s-node1.xxxx.com
type: A #类型
port: 9100
refresh_interval: 15s #默认30s
curl -X POST http://127.0.0.1:9090/-/reload
3.验证配置
4.添加记录验证自动发现
prometheus配置
dns_sd_configs:
- names:
- k8s-master.xxxx.com
- k8s-node1.xxxx.com
- k8s-node2.xxxx.com
curl -X POST http://127.0.0.1:9090/-/reload
验证
5.修改记录值验证自动发现
删除node2记录,修改node1记录值
prometheus验证
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少