Prometheus服务发现
目标列表和关联标签都是采用手动服务发现的方式。不难看出,在繁杂的工作中维护一长串主机列表并不是一个可扩展的任务(HUP的Prometheus服务器也不是每次都可以优雅地启动)。尤其对于大多数环境的动态特性,以及被监控主机、应用程序和服务的规模来说,这种局限性更为明显。因此需要更成熟的服务发现方式。
探索以下几种服务发现方案:
• 通过配置管理工具填充的文件接收目标列表。
• 查询API(如Amazon AWS API)以获取目标列表。
• 使用DNS记录返回目标列表。
基于文件发现
基于文件的发现只是比静态配置更高级的一小步,但是它对于配置管理工具的配置非常有用。通过基于文件的发现,普罗米修斯使用文件中指定的目标。这些文件通常由另一个系统生成,例如配置管理系统,如Puppet、Ansible,或者从另一个源(如CMDB)查询。定期运行脚本或查询,或触发它们(重新)填充这些文件。然后,普罗米修斯按照指定的时间表从这些文件中重新加载目标。
这些文件可以是YAML或JSON格式,并包含定义的目标列表,就像我们在静态配置中定义它们一样。
- job_name: 'node'
file_sd_configs:
- files:
- targets/nodes/*.json
refresh_interval: 5m
- job_name: 'docker'
file_sd_configs:
- files:
- targets/docker/*.yml
refresh_interval: 5m
查看配置文件
[root@localhost prometheus]# cd targets/
[root@localhost targets]# ll
总用量 0
drwxr-xr-x. 2 root root 24 9月 18 10:37 docker
drwxr-xr-x. 2 root root 24 9月 18 10:40 nodes
[root@localhost targets]# cat docker/docker.yml
- targets:
- "192.168.1.124:8080"
[root@localhost targets]# cat nodes/nodes.json
[{
"targets": [
"192.168.1.124:9100"
]
}]
[root@localhost targets]#
基于API的服务
发现原生的服务发现集成在某些工具和平台上提供,它们内置支持Prometheus。这些服务发现插件使用工具和平台现有的数据存储或API来返回目标列表。当前可用的本机服务发现插件包括以下平台:
-
Amazon EC2
-
Azure
-
Consul
-
Google Compute Cloud
-
Kubernetes
下面我在研究发现Consul中的服务
基于DNS的服务
发现如果基于文件的服务发现不适合你,或者你的源或服务不支持任何现有的服务发现工具,则可以选择基于DNS的服务发现。DNS服务发现允许你指定DNS条目列表,然后查询这些条目中的记录以发现目标列表。它依赖于A、AAAA或SRV DNS记录查询。提示 DNS记录将由Prometheus服务器上本地定义的DNS服务器解析。例如,Linux上的/etc/resolv.conf。让我们看一下使用DNS服务发现的新作业。
这里有点懵,实验就不做了
DNS服务发现依赖于查询A、AAAA或SRV DNS记录。
# 基于 SRV 记录发现
scrape_configs:
- job_name: ‘webapp'
dns_sd_configs:
- names: [‘_prometheus._tcp.xiodi.cn’]
注意:_prometheus 为服务名称,_tcp 为协议, xiodi.cn 为域名
# 基于 A 记录
- job_name: 'webapp'
dns_sd_configs:
- names: [ 'c720174.xiodi.cn']
type: A
port: 9090