prometheus的配置参考:https://prometheus.io/docs/prometheus/2.53/configuration/configuration/
没有使用动态配置前,需要在 prometheus.yml 这个配置文件中创建数据采集任务,然后重新加载服务。
如果把采集job剥离出去,写在一个文件中,那么采集就会很灵活。
1 基于文件的服务发现
1.修改prometheus主配置文件。创建2个基于文件发现的采集任务,基于 yaml,json
vim /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml...# 基于文件的服务发现- job_name: 'zhiyong18-file-service-discovery-json'file_sd_configs:- files:- /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/config/*.json- job_name: 'zhiyong18-file-service-discovery-yaml'file_sd_configs:- files:- /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/config/*.yaml
2.创建配置文件目录:mkdir -pv /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/config
3.访问测试:http://10.0.0.31:9090/targets
,没有看到要被监控的主机,原因没有书写动态发现文件
4.编辑文件,去开启node41节点
cat > /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/config/linux.json <<EOF
[{"targets": [ "10.0.0.41:9100" ],"labels": {"name": "zhiyong18","yong": "zhiyong"}}
]
EOF
5.再次查看,就自动发现路主机 10.0.0.41。还有自定义的标签信息
6.使用yaml书写配置文件添加其他节点 node42、node43
cat > /zhiyong18/softwares/prometheus-2.53.2.linux-amd64/config/haha.yaml <<EOF
- targets:- '10.0.0.42:9100'- '10.0.0.43:9100'labels:apps: yamladdress: shahe
EOF
7.访问测试,可以看到node42,node43节点被prometheus发现了
2 consul的动态发现
2.1 consul介绍
consul 官网:https://www.consul.io/
Consul 是 HashiCorp 提供的一种开源工具,主要用于服务发现、配置管理和服务网格。用于管理微服务架构中的服务间通信、健康检查、配置存储等功能。Consul 使用一个中心化的服务目录来管理服务的注册和发现
consul功能:
- 服务发现:服务自动注册自己到consul,客户端可以查询其他服务的健康状况,以便其他服务可以动态地发现其他服务
- 健康检查:Consul 可以自动对服务进行健康检查(如 HTTP 请求、TCP 连接等),确保只有健康的服务可以被其他服务访问
- KV 存储:Consul 提供一个分布式的 Key-Value 存储,用于存储配置数据、配置信息、密钥等
- 服务网格:Consul 可以与 Kubernetes、Docker、Nomad 等工具进行集成,提供微服务的动态管理和调度功能
Consul 服务发现的工作原理:
- 服务在启动时将自己注册到 Consul 的中心化服务目录中。服务注册时会包含服务的 IP 地址、端口号、健康检查配置等信息。
- 其他服务可以向 Consul 查询服务信息,Consul 会返回可用服务列表及其健康状况
- Consul 提供两种服务发现方式:DNS 和 HTTP API。通过 DNS 方式,服务可以像查询域名一样查询其他服务的地址;通过 HTTP API,可以以编程的方式查询服务信息
- 健康检查是 Consul 的重要功能之一,可以定期检查服务的健康状况。如果服务变得不健康,Consul 会从服务目录中移除该服务
2.2 配置consul服务发现
01 部署consul
主机 | |
---|---|
10.0.0.41 | |
10.0.0.42 | |
10.0.0.43 |
1.所有节点下载consul
wget https://releases.hashicorp.com/consul/1.19.1/consul_1.19.1_linux_amd64.zip
2.所有节点解压consul。里面是一个二进制文件,直接移动到 /usr/sbin/ 就行
unzip consul_1.19.1_linux_amd64.zip -d /usr/local/bin/
3.运行consul 集群。由于没有配置相关目录、systemd,所以会一直在前台运行
follower41节点:
consul agent \
-server -bind=10.0.0.41 \
-data-dir=/zhiyong18/softwares/consul \
-client=10.0.0.41 \
-ui -retry-join=10.0.0.43follower42节点:
consul agent \
-bind=10.0.0.42 \
-data-dir=/zhiyong18/softwares/consul \
-client=10.0.0.42 \
-ui -retry-join=10.0.0.43leader43节点:
consul agent \
-server -bootstrap \
-bind=10.0.0.43 \
-data-dir=/zhiyong18/softwares/consul \
-client=10.0.0.43 -ui
4.查看各节点的监听端口
ss -ntl | grep 8500LISTEN 0 4096 10.0.0.41:8500 0.0.0.0:*
5.访问console服务的WebUI:http://10.0.0.43:8500/ui/dc1/nodes
02 注册prometheus
1.修改prometheus的配置文件。从指定的三个 Consul 服务器中发现服务,但排除名称为 consul 的服务
vim /zhiyong18/softwares/prometheus/prometheus.yml
...
scrape_configs:...- job_name: "zhiyong18-consul-seriver-discovery"consul_sd_configs:- server: 10.0.0.43:8500- server: 10.0.0.42:8500- server: 10.0.0.41:8500relabel_configs:# 匹配consul的源标签字段,表示服务名称- source_labels: [__meta_consul_service]# 指定源标签的正则表达式,若不定义,默认值为"(.*)"regex: consulaction: drop
标签处理参考:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_action
3.由于之前在node42安装了 prometheus的node-exporter。所以现在让节点被发现,需发送http PUT 方法
curl -X PUT -d '
{"id": "prn42","name": "prn42","address": "10.0.0.42","port": 9100,"tags": ["node-exporter"],"checks": [{"http": "http://10.0.0.42:9100","interval": "5m"}]
}' http://10.0.0.42:8500/v1/agent/service/register
4.在consul上查看节点注册情况
5.可以发现这些被监控的主机
6.注册到consul的服务如何删除:
curl -X PUT http://10.0.0.42:8500/v1/agent/service/deregister/prn42