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