而对于Prometheus这一类基于Pull模式的监控系统,显然也无法继续使用的static_configs的方式静态的定义监控目标。而对于Prometheus而言其解决方案就是引入一个中间的代理人(服务注册中心),这个代理人掌握着当前所有监控目标的访问信息,Prometheus只需要向这个代理人询问有哪些监控目标控即可, 这种模式被称为服务发现。
在不同的场景下,会有不同的东西扮演者代理人(服务发现与注册中心)这一角色。比如在AWS公有云平台或者OpenStack的私有云平台中,由于这些平台自身掌握着所有资源的信息,此时这些云平台自身就扮演了代理人的角色。Prometheus通过使用平台提供的API就可以找到所有需要监控的云主机。在Kubernetes这类容器管理平台中,Kubernetes掌握并管理着所有的容器以及服务信息,那此时Prometheus只需要与Kubernetes打交道就可以找到所有需要监控的容器以及服务对象。Prometheus还可以直接与一些开源的服务发现工具进行集成,例如在微服务架构的应用程序中,经常会使用到例如Consul这样的服务发现注册软件,Promethues也可以与其集成从而动态的发现需要监控的应用服务实例。除了与这些平台级的公有云、私有云、容器云以及专门的服务发现注册中心集成以外,Prometheus还支持基于DNS以及文件的方式动态发现监控目标,从而大大的减少了在云原生,微服务以及云模式下监控实施难度。
基于文件的服务发现
用户可以通过JSON或者YAML格式的文件,定义所有的监控目标。
基于JSON文件服务发现注册示例:
1) 创建存放json文件夹
cd /usr/local/prometheus
mkdir conf.d
touch conf.d/alinode.json
2)配置主配置文件
vim prometheus.yml
- job_name: 'aliyun'
file_sd_configs:
- files: ['/usr/local/prometheus/conf.d/alinode.json'] json文件位置
refresh_interval: 5s 文件刷新
3)编辑JSON文件
[root@node1 conf.d]# cat conf.d/alinode.json
[
{
"targets": [
"192.168.184.129:9100"
],
"labels": {
"hostname": "test1"
}
},
{
"targets": [
"192.168.184.128:9100"
],
"labels": {
"hostname": "test2"
}
}
]
4) 重启服务
systemctl start prometheus
5)查看是否注册