高可用的SSL consul cluster实践
这里我就不在赘述了。注意:在注册到 Consul 时
name
字段可以相同,但是
id
字段一定不能相同。
prometheus.yml
配置如下:
1 2 3 4 5 6 7 8 9
|
... scrape_configs: - job_name: 'prometheus' consul_sd_configs: - server: "192.168.28.10:8500" - server: "192.168.28.11:8500" - server: "192.168.28.12:8500" datacenter: 'dc1' services: []
|
说明一下:这里需要使用
consul_sd_configs
来配置使用 Consul 服务发现类型,
server
为 Consul 的服务地址, 配置完毕后重启 Prometheus 服务,此时可以通过 Prometheus UI 页面的 Targets 下查看是否配置成功。
通过consul的其中一个节点查看注册服务
可以看到,在 Targets 中能够成功的自动发现 Consul 中的 Services 信息,后期需要添加新的 Targets 时,只需要通过 API或JSON格式文件往 Consul 中注册服务即可,Prometheus 就能自动发现该服务,是不是很方便。
不过,我们会发现有如下几个问题:
会发现 Prometheus 同时加载出来了默认服务 consul,这个是不需要的。
默认只显示 job 及 instance 两个标签,其他标签都默认属于
before relabeling
下,有些必要的服务信息,也想要在标签中展示,该如何操作呢?
如果需要自定义一些标签,例如 team、group、project 等关键分组信息,方便后边
alertmanager
进行告警规则匹配,该如何处理呢?
所有 Consul 中注册的 Service 都会默认加载到 Prometheus 下配置的 prometheus 组,如果有多种类型的 exporter,如何在 Prometheus 中配置分配给指定类型的组,方便直观的区别它们?
以上问题,我们可以通过 Prometheus 配置中的 relabel_configs 参数来解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
- job_name: 'node-exporter' consul_sd_configs: - server: "192.168.28.10:8500" - server: "192.168.28.11:8500" - server: "192.168.28.12:8500" datacenter: 'dc1' services: [] relabel_configs: - source_labels: [__meta_consul_service] regex: ".*node-exporter.*" action: keep - source_labels: [__scheme__, __address__, __metrics_path__] regex: "(http|https)(.*)" separator: "" target_label: "endpoint" replacement: "${1}://${2}" action: replace
|
1 2 3 4 5 6 7 8 9 10 11 12
|
- source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name] separator: ; regex: Node;(.*) target_label: node replacement: ${1} action: replace - source_labels: [__meta_kubernetes_endpoint_address_target_kind, __meta_kubernetes_endpoint_address_target_name] separator: ; regex: Pod;(.*) target_label: pod replacement: ${1} action: replace
|