系统环境

  • 操作系统: 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的服务发现流程如下:
  1. 在consul注册服务或注销服务(监控targets)
  2. 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界面是否注册成功
consul-3

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列表,可以看到如下,即表示配置成功
consul-4

文章作者: 鲜花的主人
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃可爱多
监控服务 Prometheus 监控服务 Prometheus
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝