• 一、 Prometheus与服务发现

    • 1.1 目前支持的服务发现方式
  • 二、 案例
    • 2.1 基于文件的服务发现
    • 2.2 基于Consul的服务发现
  • 三、本地测试
    • 3.1 基于文件的服务发现

      • 1.测试环境
      • 2.配置文件
      • 3.可视化
    • 3.2 prometheus.yml热加载

一、 Prometheus与服务发现

云原生、容器场景下按需的资源使用方式对于监控系统而言就意味着没有了一个固定的监控目标,所有的监控对象(基础设施、应用、服务)都在动态的变化,这对基于Push模式传统监控软件带来挑战。

对于Prometheus这一类基于Pull模式的监控系统,显然也无法继续使用的static_configs的方式静态的定义监控目标。而对于Prometheus而言其解决方案就是引入一个中间的代理人(服务注册中心),这个代理人掌握着当前所有监控目标的访问信息,Prometheus只需要向这个代理人询问有哪些监控目标控即可, 这种模式被称为服务发现。


通过服务发现的方式,管理员可以在不重启Prometheus服务的情况下动态的发现需要监控的Target实例信息。

1.1 目前支持的服务发现方式

 

# List of Azure service discovery configurations.
azure_sd_configs:
[ - <azure_sd_config> ... ] # List of Consul service discovery configurations.
consul_sd_configs:
[ - <consul_sd_config> ... ] # List of DNS service discovery configurations.
dns_sd_configs:
[ - <dns_sd_config> ... ] # List of EC2 service discovery configurations.
ec2_sd_configs:
[ - <ec2_sd_config> ... ] # List of OpenStack service discovery configurations.
openstack_sd_configs:
[ - <openstack_sd_config> ... ] # List of file service discovery configurations.
file_sd_configs:
[ - <file_sd_config> ... ] # List of GCE service discovery configurations.
gce_sd_configs:
[ - <gce_sd_config> ... ] # List of Kubernetes service discovery configurations.
kubernetes_sd_configs:
[ - <kubernetes_sd_config> ... ] # List of Marathon service discovery configurations.
marathon_sd_configs:
[ - <marathon_sd_config> ... ] # List of AirBnB's Nerve service discovery configurations.
nerve_sd_configs:
[ - <nerve_sd_config> ... ] # List of Zookeeper Serverset service discovery configurations.
serverset_sd_configs:
[ - <serverset_sd_config> ... ] # List of Triton service discovery configurations.
triton_sd_configs:
[ - <triton_sd_config> ... ]

二、 案例

2.1 基于文件的服务发现

用户可以通过JSON或者YAML格式的文件,定义所有的监控目标。例如,在下面的JSON文件(targets.json)中分别定义了3个采集任务,以及每个任务对应的Target列表:

模板:

[
{
"targets": [ "<host>", ... ],
"labels": {
"<labelname>": "<labelvalue>", ...
}
},
...
]

PS:以上targets是必填项。

实例:

[
{
"targets": [ "localhost:8080"],
"labels": {
"env": "localhost",
"job": "cadvisor" #默认是prometheus.yml中配置的file_ds(见下),此cadvisor会覆盖前者
}
},
{
"targets": [ "localhost:9104" ],
"labels": {
"env": "prod",
"job": "mysqld"
}
},
{
"targets": [ "localhost:9100"],
"labels": {
"env": "prod",
"job": "node"
}
}
]

创建Prometheus配置文件/etc/prometheus/prometheus-file-sd.yml,并添加以下内容:

global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
scrape_configs:
- job_name: 'file_ds'
file_sd_configs:
- files:
- /opt/prometheus/file_sd_configs/targets.json #也可以模糊匹配多个文件
refresh_interval: 10s

通过这种方式,Prometheus会自动的周期性读取文件中的内容。当文件中定义的内容发生变化时,不需要对Prometheus进行任何的重启操作。

2.2 基于Consul的服务发现

Consul是由HashiCorp开发的一个支持多数据中心的分布式服务发现和键值对存储服务的开源软件,被大量应用于基于微服务的软件架构当中。

Consul作为一个通用的服务发现和注册中心,记录并且管理了环境中所有服务的信息。Prometheus通过与Consul的交互可以获取到相应Exporter实例的访问信息。在Prometheus的配置文件当可以通过以下方式与Consul进行集成:

- job_name: node_exporter
metrics_path: /metrics
scheme: http
consul_sd_configs:
- server: localhost:8500 #指定了consul的访问地址
services: #为注册到consul中的实例信息
- node_exporter
- cadvisor

在consul_sd_configs定义当中通过server定义了Consul服务的访问地址,services则定义了当前需要发现哪些类型服务实例的信息,这里限定了只获取node_exporter和cadvisor的服务实例信息。

三、本地测试

3.1 基于文件的服务发现

1.测试环境

1)export:在m162p84和m162p65两台机器上分别启动两个node_export;

2)prometheus: 通过m162p84机器上的globle Prometheus监控收集node数据 ;

2.配置文件

1)prometheus_main.yml 配置文件

2)targets.json配置文件

以上targets是先后加入,通过查看章节3.可视化部分验证其可自动加载配置文件并生效。

3.可视化

prometheus_UI:

grafana:

3.2 prometheus.yml热加载

我们从上可以知道prometheus支持动态加载,通过file_sd_configs配置将target放置到yaml文件中,当yaml文件中的内容发生变化时,Prometheus会自动更新自身的target,从而实现动态配置target。

同样我们也可以将rule放置到yaml文件中,我们也希望Prometheus能够动态更新rule规则。然而实验中却发现,修改了rule配置文件后Prometheus并不会动态刷新,重启Prometheus后才能生效。

开启配置文件热加载,Prometheus启动时在参数中加入--web.enable-lifecycle(该参数默认关闭),然后执行curl命令刷新配置:
./执行路径/prometheus --web.enable-lifecycle
curl -X POST http://IP:port/-/reload #测试也支持put请求

prometheus服务发现机制的更多相关文章

  1. Prometheus在Kubernetes下的服务发现机制

    Prometheus作为容器监控领域的事实标准,随着以Kubernetes为核心的云原生热潮的兴起,已经得到了广泛的应用部署.灵活的服务发现机制是Prometheus和Kubernetes两者得以连接 ...

  2. 基于consul构建golang系统分布式服务发现机制

    原文地址-石匠的Blog: http://www.bugclosed.com/post/5 在分布式架构中,服务治理是一个重要的问题.在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进 ...

  3. Java编程技术之浅析SPI服务发现机制

    SPI服务发现机制 SPI是Java JDK内部提供的一种服务发现机制. SPI->Service Provider Interface,服务提供接口,是Java JDK内置的一种服务发现机制 ...

  4. 深入理解SPI机制-服务发现机制

    https://www.jianshu.com/p/3a3edbcd8f24 SPI ,全称为 Service Provider Interface,是一种服务发现机制.它通过在ClassPath路径 ...

  5. Istio技术与实践01: 源码解析之Pilot多云平台服务发现机制

    服务模型 首先,Istio作为一个(微)服务治理的平台,和其他的微服务模型一样也提供了Service,ServiceInstance这样抽象服务模型.如Service的定义中所表达的,一个服务有一个全 ...

  6. 基于Kubernetes服务发现机制的探讨Non Service

    服务注册 注册中⼼作为一般的RPC/Web服务中的底层设施提供了服务进程元数据(IP, Port, Interface, Group,Method等)存储,被Watch的功能,每个服务进程均需接⼊同⼀ ...

  7. Prometheus基于文件的服务发现

    Prometheus基于文件的服务发现 一.基于文件的服务发现 1.prometheus.yml 配置文件的写法 2.file_sd 目录下的文件 3.配置结果 二.注意事项 三.参考链接 一.基于文 ...

  8. Dubbo(二):深入理解Dubbo的服务发现SPI机制

    一.前言 用到微服务就不得不来谈谈服务发现的话题.通俗的来说,就是在提供服务方把服务注册到注册中心,并且告诉服务消费方现在已经存在了这个服务.那么里面的细节到底是怎么通过代码实现的呢,现在我们来看看D ...

  9. Atitit webservice发现机制 WS-Discovery标准的规范attilax总结

    Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1.   ...

随机推荐

  1. Exchange Onine 公用文件夹

    公用文件夹专为共享访问设计,为收集.组织信息及工作组织中的其他人共享信息提供提供了一种轻松.有效的方式.公用文件夹帮助以易于浏览的层次结构来组织内容. 一.公用文件夹的适用环境 公用文件夹在以下out ...

  2. Exception in thread "main" java.lang.AbstractMethodError

    参考https://stackoverflow.com/questions/15758151/class-conflict-when-starting-up-java-project-classmet ...

  3. BigDecimal不整除的一个异常java.lang.ArithmeticException

    转载地址:http://blog.csdn.net/jobjava/article/details/6764623 金额的数据类型是BigDecimal 通过BigDecimal的divide方法进行 ...

  4. Anaconda 安装、TensorFlow 安装、pytorch 安装

    问题 1 假设已经安装完Anaconda Navigator,按照 网址:https://www.zhihu.com/question/55577586 的教程操作,设置镜像源地址,安装. 问题 2: ...

  5. 疯狂收集个人信息的谷歌,为何不像Facebook那样让人毛骨悚然?

    自从Facebook信息泄露丑闻事件发生后,互联网上的个人隐私及安全成为大众的"心病".而大众最讨厌的,是互联网企业收集自己的信息,因此都在积极讨伐这种行为.但他们却忘了,收集用户 ...

  6. Angular开发者指南(四)控制器

    了解控制器controller 在AngularJS中,Controller由JavaScript构造函数定义,用于扩充AngularJS Scope. 当控制器通过ng-controller指令连接 ...

  7. 史无前例的KDD 2014大会记

    2014大会记" title="史无前例的KDD 2014大会记"> 作者:蒋朦 微软亚洲研究院实习生 创造多项纪录的KDD 2014 ACM SIGKDD 国际会 ...

  8. redis保存dataset

    公司统一走redis缓存,也将之前的memcache迁移到redis碰到问题是redis的dataset缓存. memcache底层封装了dataset的序列化. 而redis引的DLL包,未支持.所 ...

  9. mvn -v报java.lang.ClassNotFoundException

    Tips: 比如要下载版本3.2.5的,请选择binaries下的apache-maven-3.2.5-bin.zip. binaries 指的是可以执行的. source 指的源码. 下载地址:ht ...

  10. Spring Boot 鉴权之—— JWT 鉴权

    第一:什么是JWT鉴权 1. JWT即JSON Web Tokens,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519),他可以用来安全的传递信息,因为传递的信息是 ...