一般Prometheus 要增长一个target,须要在配置文件中已添加一个job,例以下:html
- job_name: 'prometheus' static_configs: - targets: ['localhost:9090']
每次修改须要直接修改服务器上的配置文件,很是麻烦。Prometheus 提供了多种动态服务发现的功能,这里使用consul来作一个例子。node
- job_name: 'consul-prometheus' consul_sd_configs: #consul 地址 - server: 'xx.xx.xx.xx:8500' services: [] relabel_configs: - source_labels: [__meta_consul_tags] regex: .*prometheus-target.* action: keep
配置这个以后,Prometheus就会动态发现consul的Service。
这里使用了 relabel_configs 用法能够参考https://prometheus.io/docs/prometheus/latest/configuration/configuration/#
我这里的意思是过滤,只有consul的service的tag为prometheus-target 的动态发现。
随后咱们只要在consul修改Service便可。json
consul注册注册service 的方式有多种,
若是静态注册.
建立文件夹consul.d
添加以下test.json:api
{ "service":{ "id": "node", "name": "prometheus-node", "address": "127.0.0.1", "port": 9100, "tags": ["prometheus-target"], "checks": [ { "http": "http://127.0.0.1:9100/metrics", "interval": "15s" } ] } }
在consul启动命令中,指定配置路径服务器
-config-dir=consul.d
启动后查看Prometheus 和consul 界面,能够看到target是否引入。curl
也能够使用http Api 的方式ui
curl -X PUT -d '{"service":{"id":"node","name":"prometheus-node","address":"127.0.0.1","port":9100,"tags":["prometheus-target"],"checks":[{"http":"http://127.0.0.1:9100/metrics","interval":"15s"}]}}' http://127.0.0.1:8500/v1/agent/service/register
还能够使用各语音版本的sdk:
https://www.consul.io/api/libraries-and-sdks.htmlurl
我这里使用JAVA 版本的spa
<dependency> <groupId>com.orbitz.consul</groupId> <artifactId>consul-client</artifactId> <version>1.0.0</version> </dependency>
使用以下:code
public class ConsulTest { Consul client; /** * 初始化. */ @Before public void init() { client = Consul.builder().withHostAndPort(HostAndPort.fromParts("xx.xx.xx.xx", 8500)).build(); // catalogClient = client.catalogClient(); } @Test public void queryAll() { Map<String, Service> services = client.agentClient().getServices(); for (Map.Entry<String, Service> entry : services.entrySet()) { System.out.println("key:" + entry.getKey()); System.out.println("value:" + entry.getValue().toString()); } } @Test public void testDelete() { client.agentClient().deregister("etcd"); } @Test public void testAdd1() { String serviceName = "prometheus-etcd"; String serviceId = "etcd"; Registration.RegCheck single = Registration.RegCheck.http("http://127.0.0.1:2379/metrics", 20); Registration reg = ImmutableRegistration.builder() .check(single) .addTags("prometheus-target") .address("127.0.0.1") .port(2379) .name(serviceName) .id(serviceId) .build(); client.agentClient().register(reg); } }