# 实现K8S Prometheus自定义标签

## 概述
在Kubernetes集群中监控应用程序性能和健康状况通常使用Prometheus。Prometheus是一个开源的时间序列数据库,用于监控系统和服务的性能。在使用Prometheus监控Kubernetes集群时,我们可以通过为应用程序添加自定义标签来更好地区分和过滤监控指标。

## 实现步骤
下面是实现K8S Prometheus自定义标签的步骤及相应的操作方法:

| 步骤 | 操作 |
| ---- | ---- |
| 1. 创建ServiceMonitor | 通过定义ServiceMonitor对象,告诉Prometheus要监控哪些Service |
| 2. 在ServiceMonitor中添加labelSelector | 在ServiceMonitor中添加labelSelector,过滤出需要监控的Service |
| 3. 在Service中添加标签 | 在Service的metadata.labels中添加自定义标签 |

### 步骤一:创建ServiceMonitor
```yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app-monitor
spec:
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
app: example-app
endpoints:
- interval: 30s
path: /metrics
```
在这个示例中,我们创建了一个名为example-app-monitor的ServiceMonitor对象,它指定了要监控default命名空间中的带有app=example-app标签的Service,并通过/path路径暴露的/metrics端点获取监控指标。

### 步骤二:在ServiceMonitor中添加labelSelector
```yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: example-app-monitor
spec:
selector:
matchLabels:
app: example-app
namespaceSelector:
matchNames:
- default
endpoints:
- interval: 30s
path: /metrics
namespaceSelector:
matchNames:
- default
selector:
matchLabels:
app: example-app
labelSelector:
matchLabels:
custom-label: value
```
这段代码中,我们通过labelSelector添加了一个名为custom-label的自定义标签匹配器,与此标签匹配的Service将被Prometheus监控。

### 步骤三:在Service中添加标签
```yaml
apiVersion: v1
kind: Service
metadata:
name: example-app
labels:
app: example-app
custom-label: value
spec:
selector:
app: example-app
ports:
- name: http
port: 80
targetPort: 8080
```
在这个示例中,我们为名为example-app的Service添加了一个名为custom-label的自定义标签,该标签的值为value。这个自定义标签将与Prometheus中ServiceMonitor中定义的labelSelector匹配。

通过以上的步骤,我们成功实现了在Kubernetes集群中使用Prometheus监控应用程序,并通过自定义标签来更好地区分和过滤监控指标。希望这篇文章能帮助到你理解如何实现K8S Prometheus自定义标签。