1、Prometheus 服务发现简介
Prometheus 的服务发现机制可以在动态监控场景中,自动化配置、变更监控目标。Prometheus提供多种服务发现机制支持,例如从k8s、consul甚至http接口获取监控目标,而无需手动干预。在监控目标频繁变化的场景中,Prometheus的动态监控能力,提供了极大的便捷性和自动性,易于运维管理。
下面以云场景常见的k8s服务发现为例,讲解Prometheus的服务发现机制。代码块给出了一段k8s服务发现配置,服务发现的目标是k8s集群中的pod对象。并通过relabel_config功能,从k8s pod的元数据标签中,获取__meta_kubernetes_namespace、__meta_kubernetes_pod_name、__meta_kubernetes_pod_container_name等信息,自动对不同ns、pod、container的监控指标完成了标记。并通过__meta_kubernetes_pod_annotation_prometheus_io_path、__meta_kubernetes_pod_annotation_prometheus_io_port等元数据标签,自动获取了pod对象监控数据的采集地址。
通过Prometheus的服务发现机制,可以灵活获取监控对象的元数据标签、监控地址等信息,不仅可以自动完成监控对象的区分打标,还可以灵活获取监控对象的监控地址信息,提供了极大的便捷性和自动性,降低运维管理成本。
scrape_configs:
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
target_label: pod
- source_labels: [__meta_kubernetes_pod_container_name]
target_label: container
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
target_label: __address__
regex: (.+);(.+)
replacement: $1:$2
2、通过 http_sd_config 实现自定义服务发现
在不同业务场景中,有时需要更灵活、更符合业务场景的服务发现机制,这时可以通过http_sd_config实现自定义的服务发现机制。只需要按照Prometheus的服务发现规范,在http接口中暴露需要监控的目标对象,就可以接入Prometheus的服务发现机制,实现动态配置监控目标的需求。
下面给出一个接口示例。如下的http接口向Prometheus提供了2个监控目标。第一个对象有两个目标:10.0.0.1:9100和10.0.0.2:9100。第二个对象只有一个目标10.0.0.3:9100。每个监控目标有不同的标签,这些标签会用于标记和区分监控数据。
使用http_sd_config功能,可以按不同业务场景,灵活动态配置监控目标。
[
{
"targets": ["10.0.0.1:9100", "10.0.0.2:9100"],
"labels": {
"job": "node_exporter",
"env": "production",
"region": "us-west"
}
},
{
"targets": ["10.0.0.3:9100"],
"labels": {
"job": "node_exporter",
"env": "staging",
"region": "us-east"
}
}
]