prometheus使用 (十) 服务发现

在之前我们的服务发现是通过在prometheus.yml文件中配置以下的ip+端口来抓取的

 

但这种方法在监控主机较少的情况下还行,但不适合大规模的集群

尤其不适合用于使用容器和基于云的实例的动态集群,这些实例经常会出现变化的,创建或消耗的情况

Prometheus通过使用"服务发现"来通过自动化的机制来检测、分类和试别新的变更的目标。

 服务发现分类

#服务发现的方法大致有以下3种
1. file_sd_configs   #基于文件列表来服务发现
2. dns_sd_configs   #使用dns记录以返回目标列表
3. kubernetes_sd_configs  #查询api以获取目标列表(k8s) 后面说

一. 基于文件的服务发现

这些文件是可以yaml的或json格式,包含定义的目标列表,就像我们在静态配置中定义的一样。

我们将现有的环境中的主机迁入到文件中,如下我们先转换node和docker

指定主机文件路径

vi prometheus.yml

  - job_name: 'node'
#    static_configs:            #注释
#      - targets: ['192.168.1.21:9100','192.168.1.20:9100'] #注释

  #添加
    file_sd_configs:
    - files:
      - targets/nodes/node.json     #匹配节点所在的文件
      refresh_interval: 5m          #5分钟检测一次
  
  
  - job_name: 'docker'
#    static_configs:                     #注释
#      - targets: ['192.168.1.20:8081']  #注释
   #添加
    file_sd_configs:
    - files:
      - targets/dockers/docker.json   
      refresh_interval: 5m

#检查语法
promtool check config /etc/prometheus/prometheus.yml

#重载配置
systemctl restart prometheus

添加主机文件

#创建主机目录
mkdir /etc/prometheus/targets/{nodes,docker} -p


#创建node主机文件
cat > /etc/prometheus/targets/nodes/node.json <<EOF
[
{
  "targets": [
    "192.168.1.20:9100",
    "192.168.1.21:9100"
             ]
}
]
EOF

#创建docker文件
cat > /etc/prometheus/targets/dockers/docker.json <<EOF
[
{
  "targets": [
    "192.168.1.20:8081"
             ]
}
]
EOF

这个是自发现的,添加完主机后无需重启服务

 

 

二. 基于dns的服务发现

如果基于文件的服务发现不适合你,或者你的源或服务不支持任何现有的服务发现工具,则可以选择基于DNS的服务发现。

DNS服务发现允许你指定DNS条目列表,然后查询这些条目中的记录以发现目标列表。它依赖于A、AAAA或SRV DNS记录查询

1. 部署dns解析

#拉取阿里云yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 

#安装dns
yum -y install bind


#基本配置
vim /etc/named.conf
#修改
 12 options {
 13         listen-on port 53 { any; };    #修改为作为dns的地址
 21         allow-query     { any; };       #允许所有节点来解析

添加解析文件

#添加正向解析文件
cat >> /etc/named.rfc1912.zones <<EOF
zone "test.com" IN {
        type master;
        file "test.com.zone";
};
EOF

#添加区域文件
cat > /var/named/test.com.zone <<EOF
\$TTL 1D
@       IN SOA www.test.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      www.test.com.
        A       127.0.0.1
www     A       192.168.1.20
EOF

#检查配置
named-checkzone test.com /var/named/test.com.zone

#启动服务
systemctl restart named

#3台主机指定dns服务器(默认应该是有个114的,放他上面)
sed -i "1 i\nameserver 192.168.1.20" /etc/resolv.conf


#测试解析
[root@k8s-master01 named]# nslookup www.test.com
Server:		192.168.1.20
Address:	192.168.1.20#53

Name:	www.test.com
Address: 192.168.1.20

2. 测试

vi /etc/prometheus/prometheus.yml

     29   - job_name: 'grafana' 
     30 #    static_configs:
     31 #      - targets: ['192.168.1.20:3000']   #注释掉静态服务发现
     32     dns_sd_configs:                   #改用dns服务发现
     33       - names: [ 'www.test.com' ]
     34         type: A                   #正向解析
     35         port: 3000

重启服务

systemctl restart prometheus

还有一种是SRV记录的,但是没研究过。这里就不误导了o(* ̄▽ ̄*)o

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值