最近更新时间:2024.04.26 15:28:58
首次发布时间:2023.10.30 15:47:57
注册集群安装 prometheus-agent 组件后,允许通过 ServiceMonitor 来满足自定义采集规则的需求。本文为您介绍如何通过 ServiceMonitor 来配置服务发现。
您可以使用以下 Demo,体验基于 golang 的应用接入和 ServiceMonitor 服务发现过程。下面的示例中,使用 golang 语言创建了一个应用,并在应用中暴露了一个名为 rpc_durations_seconds 的指标,用于对服务的 RPC 延迟进行统计。
package main import ( "math" "math/rand" "net/http" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/collectors" "github.com/prometheus/client_golang/prometheus/promhttp" ) var rpcDurations = prometheus.NewSummaryVec( prometheus.SummaryOpts{ Name: "rpc_durations_seconds", Help: "RPC latency distributions.", Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001}, }, []string{"service"}, ) func main() { // Create a new registry. reg := prometheus.NewRegistry() // Add Go module build info. reg.MustRegister(collectors.NewBuildInfoCollector()) // Add go runtime metrics and process collectors. reg.MustRegister( collectors.NewGoCollector(), collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}), ) reg.MustRegister(rpcDurations) start := time.Now() oscillationFactor := func() float64 { return 2 + math.Sin(math.Sin(2*math.Pi*float64(time.Since(start))/float64(10*time.Minute))) } // Periodically record some sample latencies for the three services. go func() { for { v := rand.Float64() * 0.0002 rpcDurations.WithLabelValues("uniform").Observe(v) time.Sleep(time.Duration(100*oscillationFactor()) * time.Millisecond) } }() go func() { for { v := (rand.NormFloat64() * 0.0002) + 0.00001 rpcDurations.WithLabelValues("normal").Observe(v) time.Sleep(time.Duration(75*oscillationFactor()) * time.Millisecond) } }() go func() { for { v := rand.ExpFloat64() / 1e6 rpcDurations.WithLabelValues("exponential").Observe(v) time.Sleep(time.Duration(50*oscillationFactor()) * time.Millisecond) } }() http.Handle("/metrics", promhttp.HandlerFor( reg, promhttp.HandlerOpts{}, )) http.ListenAndServe(":2023", nil) }
...
中的 安装。配置项 | 说明 |
---|---|
Prometheus 工作区 | 按需选择 Prometheus 工作区,可使用 通过公网采集监控数据 来筛选工作区。 说明
|
认证方式 | 按照所选工作区实际配置,选择认证方式,并填写参数。
说明 若目标工作区未开启期望的认证方式,可前往 托管 prometheus 控制台,对目标工作区的配置进行修改。 |
配置项 | 说明 |
---|---|
部署方式 | 组件的部署方式。当前该参数已固定,不可配置。 |
vm-agent 资源 | 配置 vm-agent 采集器的默认资源配置,包括:CPU 请求、CPU 上限、内存请求、内存上限。 |
kube-state-metrics 资源配置 | 配置 kube-state-metrics 组件的默认资源配置,包括:CPU 请求、CPU 上限、内存请求、内存上限。 说明 由于 kube-state-metrics 组件本身存在的限制(例如:每个组件实例允许采集的 Target 数量有限),在大规模集群中,建议优先使用增加分片数的方式,提升 kube-state-metrics 组件的指标采集能力。 |
vm-agent 初始分片数 | 配置 vm-agent 采集器的初始分片数。 |
kube-state-metrics 初始分片数 | 配置 kube-state-metrics 组件的初始分片数。 |
组件扩缩容 | 配置是否开启 vm-agent 采集器和 kube-state-metrics 组件的自动扩缩容功能。
注意
|
部署插件 | 配置是否同步安装 node-exporter 插件,默认安装插件。该插件用于采集节点操作系统的各项软硬件指标;如果不安装,则无法监控节点指标。建议您保持默认值。 |
若当前容器集群中不存在 ServiceMonitor CRD 资源,可在本地环境中连接集群并执行以下命令,在集群中创建 ServiceMonitor CRD 资源。
kubectl apply -f https://vmp-release-cn-beijing.tos-cn-beijing.volces.com/manifests/crds/promopeartor-crd-servicemonitors.yaml
说明
cn-beijing
字段修改为对应地域的 RegionID。例如:华东2(上海)地域的集群,部署命令为 kubectl apply -f https://vmp-release-cn-shanghai.tos-cn-shanghai.volces.com/manifests/crds/promopeartor-crd-servicemonitors.yaml
。地域的 RegionID 详情请参见:地域和可用区。可使用镜像仓库中的镜像,在容器集群中部署应用。步骤如下:
说明
本例中的镜像地址为举例,您需要将其修改为实际环境中镜像的正确地址。
apiVersion: apps/v1 kind: Deployment metadata: name: golang-demo # 配置应用的名称 namespace: volcano-metrics # 配置应用所在的命名空间 labels: app: golang-demo # 配置应用的标签 spec: replicas: 2 # 配置应用副本数 selector: matchLabels: app: golang-demo template: metadata: labels: app: golang-demo spec: containers: - name: golang-demo # 配置容器名称 image: doc-cn-beijing.cr.volces.com/vmp/golang-demo:1.0 # 配置应用镜像的地址和版本 ports: - containerPort: 2023 # 配置容器端口
apiVersion: v1 kind: Service metadata: name: golang-service-demo namespace: volcano-metrics # 配置服务所在的命名空间 labels: app: golang-service-demo # 配置服务的标签 spec: selector: app: golang-demo ports: - protocol: TCP port: 2023 targetPort: 2023 name: metrics # 配置服务端口名称 type: ClusterIP
登录 分布式云原生控制台。
在左侧菜单栏中选择 容器集群,进入集群管理页面。
单击目标集群名称,进入集群配置页面。
在左侧菜单栏中选择 运维管理 > 对象浏览器。 单击 使用 Yaml 创建 ,通过 ServiceMonitor 配置采集规则。
在 类型 下拉菜单中选择 自定义。
在 Yaml 配置框内输入 Yaml 配置。
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: golang-demo-discover # 配置采集规则名称 namespace: default # 配置 ServiceMonitor 命名空间 labels: volcengine.vmp: "true" # 配置 ServiceMonitor 的标签,允许被 Prometheus-agent 发现 spec: endpoints: - port: metrics # 填写服务端口名称 relabelings: # 配置指标的 relabel。如没有需求,可省略 - targetLabel: environment action: replace # 这个例子中我们添加一个固定 label:environment="Production" replacement: Production namespaceSelector: matchNames: - volcano-metrics # 配置为服务所在的命名空间 selector: matchLabels: app: golang-service-demo # 配置服务的 Label 值,以定位和选择目标 Service
单击 确定,完成配置。
up{job="golang-service-demo"}
,查看对应的服务是否被正确发现。