Prometheus 服务发现

概述:

说明:前面我们构建的,都是手动在配置文件中指定要抓取的IP和端口,这种场景适用于主机较少的情形,在主机规模较大时,或者是使用容器和基于云的实例的动态集群,手动几乎无法实现监控维护,prometheus通过使用服务发现解决上述问题

prometheus服务发现实现方式:

1. 基于文件的服务发现

2. 查询API的服务发现

3. 使用DNS记录的服务发现


方式一: 基于文件的服务发现

说明:基于文件的服务发现只是比静态配置先进一点,实现原理是:在文件中配置target的目标和端口,prometheus读取文件中target作为监控目标,实现指标数据采集。这里注意:文件的数据来源,可以是ansible、CMDB等

具体实现:

1) prometheus server配置

  - job_name: "node"
    file_sd_configs:
      - files:
        - targets/nodes/*.json
        refresh_interval: 5m

说明:我们使用file_sd_configs模块代替static_configs模块,并指定files路径,并指定每5分钟prometheus重新加载该配置文件

 2) 创建主机清单的JSON文件

mkdir -p  /usr/local/prometheus/targets/nodes/

cat >/usr/local/prometheus/targets/nodes/nodes.json<

- targets: 
  - "192.168.161.116:9100"
  - "192.168.161.117:9100"
  - "192.168.161.118:9100"

EOF

清单文件的第二种写法:

[{
"targets": [
"192.168.161.116:9100",
"192.168.161.117:9100",
"192.168.161.118:9100"
],

labels: {

  "locaiton": "BeiJing"

}
}]

3) 重新加载prometheus即可验证


方式二:基于API的服务发现

kubernetes内置的API支持Prometheus,这些API可以返回目标列表

待细化


方式三:基于DNS查询的服务发现

  实现方式: 通过指定DNS条目列表,然后查询这些条目中的记录以发现目标列表,它依赖于A,AAAA或SRV DNS记录查询

注意: DNS记录将由Prometheus服务器上的本地定义的DNS服务器解析

 - job_name: webapp
  dns_sd_configs: 
    - names: ["_prometheus._tcp.myapp.com"]

说明:

1. 指定job名称为webapp

2. 指定dns_sd_configs块,替代static_configs块

3. names指定我们要查询的DNS条目

4. prometheus的DNS服务发现假定会你查询SRV或者服务记录、服务记录是一种在DNS配置中定义服务的方法,服务通常由运行服务的一个或多个目标主机和端口组成,格式如下:

_service.proto.name TTL IN SRV priority weight port target.

_service: 要查询的服务的名称

_proto: 服务的协议

.name: 条目名称

TTL: time to live ,跳数

IN: 标准的DNS类

priority: 优先级

weight: 权重

port和target: 指定运行的端口和主机名

示例:监控prometheus

_prometheus._tcp.example.com 300 IN SRV 10 1 9100 webapp1. 

配置prometheus

- job_name: webapp
  dns_sd_configs: 
    - names: ["myapp.com"]
      type: A
      port: 9100

你可能感兴趣的:(prometheus,prometheus,服务发现,服务器)