prometheus学习笔记之其他常用服务自动发现

一、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验证

 

posted @ 2024-09-06 16:12  百衲本  阅读(50)  评论(0编辑  收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码