Prometheus基于consul服务发现
系统环境
- 操作系统: CentOS 7.6
- Docker版本: 19.03.5
- consul版本:1.21.1
- kubernetes版本:1.20.0
Consul是分布式k/v数据库,是一个服务注册组件,其他服务都可以注册到consul上,Prometheus也不例外,通过consul的服务发现,我们可以避免在Prometheus中指定大量的target
prometheus基于consul的服务发现流程如下:
- 在consul注册服务或注销服务(监控targets)
- Prometheus一直监视consul服务,当发现consul中符合要求的服务有新变化就会更新Prometheus监控对象
这里不复述prometheus和consul集群部署,可以参考博客部署文章
部署MySQL监控及Redis监控
MySQL监控
安装运行mysqld-exporter,本文采取docker方式
[root@nginx ~]# docker run -d \
--name mysqld-exporter \
-p 9104:9104 \
-e DATA_SOURCE_NAME="root:test-pwd@(10.x.0.x:30336)/nacos_config_cluster" \
prom/mysqld-exporter
Redis监控
安装运行 redis-exporter
[root@nginx ~]# docker run -d \
--name redis_exporter \
-p 9121:9121 \
--redis.addr redis://10.x.x.x:6379 \
--redis.password 123456 \
oliver006/redis_exporter
注册服务到Consul
[root@k8s01 consul]# curl -X PUT -d '{
"id": "mysql-exporter",
"name": "mysql-exporter",
"address": "10.x.x.141",
"port": 9104,
"tags": ["mysql"],
"checks": [{"http": "http://10.x.x.141:9104/metrics", "interval": "5s"}]}'
http://10.x.x.161:38500/v1/agent/service/register
#参数说明
id : 注册ID 在consul中为唯一标识
name :Service名称
address:自动注册绑定ip
port:自动注册绑定端口
tags:注册标签,可多个
checks : 健康检查
http: 检查数据来源
interval: 检查时间间隔
http://10.x.x.161:38500/v1/agent/service/register consul注册接口
[root@k8s01 consul]# curl -X PUT -d '{"id": "mysql-exporter","name": "mysql-exporter","address": "10.x.x.141","port": 9104,"tags": ["mysql"],"checks": [{"http": "http://10.x.x.141:9104/metrics", "interval": "5s"}]}' http://10.x.x.161:38500/v1/agent/service/register
#如果要注销掉某个服务,可以通过如下API命令操作
curl -X PUT http://10.x.x.161:38500/v1/agent/service/deregister/mysql-exporter
执行完注册后查看consul web界面是否注册成功
Prometheus配置Consul实现自动服务发现
修改prometheus的configmap配置文件
[root@k8s01 prometheus]# cat prometheus-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: monitoring
data:
prometheus.yml: |
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
cluster: "kubernetes"
scrape_configs:
...
- job_name: consul
honor_labels: true
metrics_path: /metrics
scheme: http
consul_sd_configs: #基于consul服务发现的配置
- server: consul.tools-env.svc.cluster.local:8500 #consul的监听地址
services: [] #匹配consul中所有的service
relabel_configs: #relabel_configs下面都是重写标签相关配置
- source_labels: ['__meta_consul_tags'] #将__meta_consul_tags标签的至赋值给product
target_label: 'servername'
- source_labels: ['__meta_consul_dc'] #将__meta_consul_dc的值赋值给idc
target_label: 'idc'
- source_labels: ['__meta_consul_service']
regex: "consul" #匹配为"consul"的service
action: drop #执行的动作为删除
访问Prometheus的target列表,可以看到如下,即表示配置成功
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
爱吃可爱多!
喜欢就支持一下吧
打赏
微信
支付宝