Merge release-1.7 into upstream/master
This commit is contained in:
parent
ec38c689bb
commit
9799ac0e61
|
|
@ -1,3 +1,8 @@
|
|||
## v1.7.2 / 2019-08-05
|
||||
|
||||
* [CHANGE] Revert "add `kube_*_annotations metrics` for all objects" #859
|
||||
* [CHANGE] Remove `kube_namespace_annotations` metric #859
|
||||
|
||||
## v1.7.1 / 2019-07-18
|
||||
|
||||
* [BUGFIX] Fix crash due to missing ingress http block. #831
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ At most, 5 kube-state-metrics and 5 [kubernetes releases](https://github.com/kub
|
|||
| **v1.4.0** | v8.0.0 | ✓ | ✓ | - | - | - |
|
||||
| **v1.5.0** | v8.0.0 | ✓ | ✓ | - | - | - |
|
||||
| **v1.6.0** | v11.0.0 | ✓ | ✓ | ✓ | ✓ | - |
|
||||
| **v1.7.1** | v12.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| **v1.7.2** | v12.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
| **master** | v12.0.0 | ✓ | ✓ | ✓ | ✓ | ✓ |
|
||||
- `✓` Fully supported version range.
|
||||
- `-` The Kubernetes cluster has features the client-go library can't use (additional API objects, etc).
|
||||
|
|
@ -74,8 +74,8 @@ release.
|
|||
#### Container Image
|
||||
|
||||
The latest container image can be found at:
|
||||
* `quay.io/coreos/kube-state-metrics:v1.7.1`
|
||||
* `k8s.gcr.io/kube-state-metrics:v1.7.1`
|
||||
* `quay.io/coreos/kube-state-metrics:v1.7.2`
|
||||
* `k8s.gcr.io/kube-state-metrics:v1.7.2`
|
||||
|
||||
**Note**:
|
||||
The recommended docker registry for kube-state-metrics is `quay.io`. kube-state-metrics on
|
||||
|
|
|
|||
|
|
@ -6,4 +6,3 @@
|
|||
| kube_certificatesigningrequest_condition | Gauge | `certificatesigningrequest`=<certificatesigningrequest-name> <br> `condition`=<approved\|denied> | STABLE |
|
||||
| kube_certificatesigningrequest_labels | Gauge | `certificatesigningrequest`=<certificatesigningrequest-name>| STABLE |
|
||||
| kube_certificatesigningrequest_cert_length | Gauge | `certificatesigningrequest`=<certificatesigningrequest-name>| STABLE |
|
||||
| kube_certificatesigningrequest_annotations | Gauge | `annotation_CSR_ANNOTATION`=<CSR_ANNOTATION> <br> `certificatesigningrequest`=<certificatesigningrequest-name> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -5,4 +5,3 @@
|
|||
| kube_configmap_info | Gauge | `configmap`=<configmap-name> <br> `namespace`=<configmap-namespace> | STABLE |
|
||||
| kube_configmap_created | Gauge | `configmap`=<configmap-name> <br> `namespace`=<configmap-namespace> | STABLE |
|
||||
| kube_configmap_metadata_resource_version | Gauge | `configmap`=<configmap-name> <br> `namespace`=<configmap-namespace> <br> `resource_version`=<configmap-resource-version> | STABLE |
|
||||
| kube_configmap_annotations | Gauge | `annotation_CONFIGMAP_ANNOTATION`=<CONFIGMAP_ANNOTATION> <br> `configmap`=<configmap-name> <br> `namespace`=<configmap-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -10,4 +10,3 @@
|
|||
| kube_cronjob_status_last_schedule_time | Gauge | `cronjob`=<cronjob-name> <br> `namespace`=<cronjob-namespace> | STABLE
|
||||
| kube_cronjob_spec_suspend | Gauge | `cronjob`=<cronjob-name> <br> `namespace`=<cronjob-namespace> | STABLE
|
||||
| kube_cronjob_spec_starting_deadline_seconds | Gauge | `cronjob`=<cronjob-name> <br> `namespace`=<cronjob-namespace> | STABLE
|
||||
| kube_cronjob_annotations | Gauge | `annotation_CRONJOB_ANNOTATION`=<CRONJOB_ANNOTATION> <br> `cronjob`=<cronjob-name> <br> `namespace`=<cronjob-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -12,4 +12,3 @@
|
|||
| kube_daemonset_updated_number_scheduled | Gauge | `daemonset`=<daemonset-name> <br> `namespace`=<daemonset-namespace> | STABLE |
|
||||
| kube_daemonset_metadata_generation | Gauge | `daemonset`=<daemonset-name> <br> `namespace`=<daemonset-namespace> | STABLE |
|
||||
| kube_daemonset_labels | Gauge | `daemonset`=<daemonset-name> <br> `namespace`=<daemonset-namespace> <br> `label_DAEMONSET_LABEL`=<DAEMONSET_LABEL> | STABLE |
|
||||
| kube_daemonset_annotations | Gauge | `annotation_DAEMONSET_ANNOTATION`=<DAEMONSET_ANNOTATION> <br> `daemonset`=<daemonset-name> <br> `namespace`=<daemonset-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -14,4 +14,3 @@
|
|||
| kube_deployment_metadata_generation | Gauge | `deployment`=<deployment-name> <br> `namespace`=<deployment-namespace> | STABLE |
|
||||
| kube_deployment_labels | Gauge | `deployment`=<deployment-name> <br> `namespace`=<deployment-namespace> | STABLE |
|
||||
| kube_deployment_created | Gauge | `deployment`=<deployment-name> <br> `namespace`=<deployment-namespace> | STABLE |
|
||||
| kube_deployment_annotations | Gauge | `annotation_DEPLOYMENT_ANNOTATION`=<DEPLOYMENT_ANNOTATION> <br> `deployment`=<deployment-name> <br> `namespace`=<deployment-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -7,4 +7,3 @@
|
|||
| kube_endpoint_info | Gauge | `endpoint`=<endpoint-name> <br> `namespace`=<endpoint-namespace> | STABLE |
|
||||
| kube_endpoint_labels | Gauge | `endpoint`=<endpoint-name> <br> `namespace`=<endpoint-namespace> <br> `label_ENDPOINT_LABEL`=<ENDPOINT_LABEL> | STABLE |
|
||||
| kube_endpoint_created | Gauge | `endpoint`=<endpoint-name> <br> `namespace`=<endpoint-namespace> | STABLE |
|
||||
| kube_endpoint_annotations | Gauge | `annotation_ENDPOINT_ANNOTATION`=<ENDPOINT_ANNOTATION> <br> `endpoint`=<endpoint-name> <br> `namespace`=<endpoint-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -9,4 +9,3 @@
|
|||
| kube_hpa_status_desired_replicas | Gauge | `hpa`=<hpa-name> <br> `namespace`=<hpa-namespace> | STABLE |
|
||||
| kube_hpa_status_condition | Gauge | `hpa`=<hpa-name> <br> `namespace`=<hpa-namespace> | STABLE |
|
||||
| kube_hpa_labels | Gauge | `hpa`=<hpa-name> <br> `namespace`=<hpa-namespace> | STABLE |
|
||||
| kube_hpa_annotations | Gauge | `annotation_HPA_ANNOTATION`=<HPA_ANNOTATION> <br> `hpa`=<hpa-name> <br> `namespace`=<hpa-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -7,5 +7,4 @@
|
|||
| kube_ingress_created | Gauge | `ingress`=<ingress-name> <br> `namespace`=<ingress-namespace> | STABLE |
|
||||
| kube_ingress_metadata_resource_version | Gauge | `ingress`=<ingress-name> <br> `namespace`=<ingress-namespace> <br> `resource_version`=<ingress-resource-version> | STABLE |
|
||||
| kube_ingress_path | Gauge | `ingress`=<ingress-name> <br> `namespace`=<ingress-namespace> <br> `host`=<ingress-host> <br> `path`=<ingress-path> <br> `service_name`=<service name for the path> <br> `service_port`=<service port for hte path> | STABLE |
|
||||
| kube_ingress_annotations | Gauge | `annotation_INGRESS_ANNOTATION`=<INGRESS_ANNOTATION> <br> `ingress`=<ingress-name> <br> `namespace`=<ingress-namespace> | EXPERIMENTAL |
|
||||
| kube_ingress_tls | Gauge | `ingress`=<ingress-name> <br> `namespace`=<ingress-namespace> <br> `tls_host`=<tls hostname> <br> `secret`=<tls secret name>| STABLE |
|
||||
|
|
|
|||
|
|
@ -16,4 +16,3 @@
|
|||
| kube_job_complete | Gauge | `job_name`=<job-name> <br> `namespace`=<job-namespace> | STABLE |
|
||||
| kube_job_failed | Gauge | `job_name`=<job-name> <br> `namespace`=<job-namespace> | STABLE |
|
||||
| kube_job_created | Gauge | `job_name`=<job-name> <br> `namespace`=<job-namespace> | STABLE |
|
||||
| kube_job_annotations | Gauge | `annotation_JOB_ANNOTATION`=<JOB_ANNOTATION> <br> `job_name`=<job-name> <br> `namespace`=<job-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -4,4 +4,3 @@
|
|||
| ---------- | ----------- | ----------- | ----------- |
|
||||
| kube_limitrange | Gauge | `limitrange`=<limitrange-name> <br> `namespace`=<namespace> <br> `resource`=<ResourceName> <br> `type`=<Pod\|Container\|PersistentVolumeClaim> <br> `constraint`=<constraint>| STABLE |
|
||||
| kube_limitrange_created | Gauge | `limitrange`=<limitrange-name> <br> `namespace`=<namespace> | STABLE |
|
||||
| kube_limitrange_annotations | Gauge | `annotation_LIMITRANGE_ANNOTATION`=<LIMITRANGE_ANNOTATION> <br> `limitrange`=<limitrange-name> <br> `namespace`=<limitrange-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -4,5 +4,4 @@
|
|||
| ---------- | ----------- | ----------- | ----------- |
|
||||
| kube_namespace_status_phase| Gauge | `namespace`=<namespace-name> <br> `status`=<Active\|Terminating> | STABLE |
|
||||
| kube_namespace_labels | Gauge | `namespace`=<namespace-name> <br> `label_NS_LABEL`=<NS_LABEL> | STABLE |
|
||||
| kube_namespace_annotations | Gauge | `namespace`=<namespace-name> <br> `annotation_NS_ANNOTATION`=<NS_ANNOTATION> | STABLE |
|
||||
| kube_namespace_created | Gauge | `namespace`=<namespace-name> | STABLE |
|
||||
|
|
|
|||
|
|
@ -17,4 +17,3 @@
|
|||
| kube_node_status_allocatable_pods | Gauge | `node`=<node-address>| DEPRECATED |
|
||||
| kube_node_status_condition | Gauge | `node`=<node-address> <br> `condition`=<node-condition> <br> `status`=<true\|false\|unknown> | STABLE |
|
||||
| kube_node_created | Gauge | `node`=<node-address>| STABLE |
|
||||
| kube_node_annotations | Gauge | `annotation_NODE_ANNOTATION`=<NODE_ANNOTATION> <br> `node`=<endpoint-name> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -6,5 +6,4 @@
|
|||
| kube_persistentvolume_status_phase | Gauge | `persistentvolume`=<pv-name> <br>`phase`=<Bound\|Failed\|Pending\|Available\|Released>| STABLE |
|
||||
| kube_persistentvolume_labels | Gauge | `persistentvolume`=<persistentvolume-name> <br> `label_PERSISTENTVOLUME_LABEL`=<PERSISTENTVOLUME_LABEL> | STABLE |
|
||||
| kube_persistentvolume_info | Gauge | `persistentvolume`=<pv-name> <br> `storageclass`=<storageclass-name> | STABLE |
|
||||
| kube_persistentvolume_annotations | Gauge | `annotation_PERSISTENTVOLUME_ANNOTATION`=<PERSISTENTVOLUME_ANNOTATION> <br> `persistentvolume`=<persistentvolume-name> | EXPERIMENTAL |
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
| kube_persistentvolumeclaim_labels | Gauge | `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `namespace`=<persistentvolumeclaim-namespace> <br> `label_PERSISTENTVOLUMECLAIM_LABEL`=<PERSISTENTVOLUMECLAIM_LABEL> | STABLE |
|
||||
| kube_persistentvolumeclaim_status_phase | Gauge | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `phase`=<Pending\|Bound\|Lost> | STABLE |
|
||||
| kube_persistentvolumeclaim_resource_requests_storage_bytes | Gauge | `namespace`=<persistentvolumeclaim-namespace> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> | STABLE |
|
||||
| kube_persistentvolumeclaim_annotations | Gauge | `annotation_PERSISTENTVOLUMECLAIM_ANNOTATION`=<PERSISTENTVOLUMECLAIM_ANNOTATION> <br> `persistentvolumeclaim`=<persistentvolumeclaim-name> <br> `namespace`=<persistentvolumeclaim-namespace> | EXPERIMENTAL |
|
||||
|
||||
Note:
|
||||
|
||||
|
|
|
|||
|
|
@ -8,4 +8,3 @@
|
|||
| kube_poddisruptionbudget_status_pod_disruptions_allowed | Gauge | `poddisruptionbudget`=<pdb-name> <br> `namespace`=<pdb-namespace> | STABLE
|
||||
| kube_poddisruptionbudget_status_expected_pods | Gauge | `poddisruptionbudget`=<pdb-name> <br> `namespace`=<pdb-namespace> | STABLE
|
||||
| kube_poddisruptionbudget_status_observed_generation | Gauge | `poddisruptionbudget`=<pdb-name> <br> `namespace`=<pdb-namespace> | STABLE
|
||||
| kube_poddisruptionbudget_annotations | Gauge | `annotation_PODDISRUPTIONBUDGET_ANNOTATION`=<PODDISRUPTIONBUDGET_ANNOTATION> <br> `poddisruptionbudget`=<poddisruptionbudget-name> <br> `namespace`=<poddisruptionbudget-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -11,4 +11,3 @@
|
|||
| kube_replicaset_labels | Gauge | `replicaset`=<replicaset-name> <br> `namespace`=<replicaset-namespace> | STABLE |
|
||||
| kube_replicaset_created | Gauge | `replicaset`=<replicaset-name> <br> `namespace`=<replicaset-namespace> | STABLE |
|
||||
| kube_replicaset_owner | Gauge | `replicaset`=<replicaset-name> <br> `namespace`=<replicaset-namespace> <br> `owner_kind`=<owner kind> <br> `owner_name`=<owner name> <br> `owner_is_controller`=<whether owner is controller> | STABLE |
|
||||
| kube_replicaset_annotations | Gauge | `annotation_REPLICASET_ANNOTATION`=<REPLICASET_ANNOTATION> <br> `replicaset`=<replicaset-name> <br> `namespace`=<replicaset-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -10,4 +10,3 @@
|
|||
| kube_replicationcontroller_spec_replicas | Gauge | `replicationcontroller`=<replicationcontroller-name> <br> `namespace`=<replicationcontroller-namespace> | STABLE |
|
||||
| kube_replicationcontroller_metadata_generation | Gauge | `replicationcontroller`=<replicationcontroller-name> <br> `namespace`=<replicationcontroller-namespace> | STABLE |
|
||||
| kube_replicationcontroller_created | Gauge | `replicationcontroller`=<replicationcontroller-name> <br> `namespace`=<replicationcontroller-namespace> | STABLE |
|
||||
| kube_replicationcontroller_annotations | Gauge | `annotation_REPLICATIONCONTROLLER_ANNOTATION`=<REPLICATIONCONTROLLER_ANNOTATION> <br> `replicationcontroller`=<replicationcontroller-name> <br> `namespace`=<replicationcontroller-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -4,4 +4,3 @@
|
|||
| ---------- | ----------- | ----------- | ----------- |
|
||||
| kube_resourcequota | Gauge | `resourcequota`=<quota-name> <br> `namespace`=<namespace> <br> `resource`=<ResourceName> <br> `type`=<quota-type> | STABLE |
|
||||
| kube_resourcequota_created | Gauge | `resourcequota`=<quota-name> <br> `namespace`=<namespace> | STABLE |
|
||||
| kube_resourcequota_annotations | Gauge | `annotation_RESOURCEQUOTA_ANNOTATION`=<RESOURCEQUOTA_ANNOTATION> <br> `resourcequota`=<resourcequota-name> <br> `namespace`=<resourcequota-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -7,4 +7,3 @@
|
|||
| kube_secret_labels | Gauge | `secret`=<secret-name> <br> `namespace`=<secret-namespace> <br> `label_SECRET_LABEL`=<SECRET_LABEL> | STABLE |
|
||||
| kube_secret_created | Gauge | `secret`=<secret-name> <br> `namespace`=<secret-namespace> | STABLE |
|
||||
| kube_secret_metadata_resource_version | Gauge | `secret`=<secret-name> <br> `namespace`=<secret-namespace> <br> `resource_version`=<secret-resource-version> | STABLE |
|
||||
| kube_secret_annotations | Gauge | `annotation_SECRET_ANNOTATION`=<SECRET_ANNOTATION> <br> `secret`=<secret-name> <br> `namespace`=<secret-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -8,4 +8,3 @@
|
|||
| kube_service_spec_type | Gauge | `service`=<service-name> <br> `namespace`=<service-namespace> <br> `type`=<ClusterIP\|NodePort\|LoadBalancer\|ExternalName> | STABLE |
|
||||
| kube_service_spec_external_ip | Gauge | `service`=<service-name> <br> `namespace`=<service-namespace> <br> `external_ip`=<external-ip> | STABLE |
|
||||
| kube_service_status_load_balancer_ingress | Gauge | `service`=<service-name> <br> `namespace`=<service-namespace> <br> `ip`=<load-balancer-ingress-ip> <br> `hostname`=<load-balancer-ingress-hostname> | STABLE |
|
||||
| kube_service_annotations | Gauge | `annotation_SERVICE_ANNOTATION`=<SERVICE_ANNOTATION> <br> `service`=<service-name> <br> `namespace`=<service-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -13,4 +13,3 @@
|
|||
| kube_statefulset_labels | Gauge | `statefulset`=<statefulset-name> <br> `namespace`=<statefulset-namespace> <br> `label_STATEFULSET_LABEL`=<STATEFULSET_LABEL> | STABLE |
|
||||
| kube_statefulset_status_current_revision | Gauge | `statefulset`=<statefulset-name> <br> `namespace`=<statefulset-namespace> <br> `revision`=<statefulset-current-revision> | STABLE |
|
||||
| kube_statefulset_status_update_revision | Gauge | `statefulset`=<statefulset-name> <br> `namespace`=<statefulset-namespace> <br> `revision`=<statefulset-update-revision> | STABLE |
|
||||
| kube_statefulset_annotations | Gauge | `annotation_STATEFULSET_ANNOTATION`=<STATEFULSET_ANNOTATION> <br> `statefulset`=<statefulset-name> <br> `namespace`=<statefulset-namespace> | EXPERIMENTAL |
|
||||
|
|
|
|||
|
|
@ -95,23 +95,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_certificatesigningrequest_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapCSRFunc(func(j *certv1beta1.CertificateSigningRequest) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(j.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,6 @@ func TestCsrStore(t *testing.T) {
|
|||
# TYPE kube_certificatesigningrequest_condition gauge
|
||||
# HELP kube_certificatesigningrequest_cert_length Length of the issued cert
|
||||
# TYPE kube_certificatesigningrequest_cert_length gauge
|
||||
# HELP kube_certificatesigningrequest_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_certificatesigningrequest_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -48,9 +46,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{},
|
||||
|
|
@ -62,9 +57,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 0
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 0
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
{
|
||||
Obj: &certv1beta1.CertificateSigningRequest{
|
||||
|
|
@ -74,9 +68,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{
|
||||
|
|
@ -94,9 +85,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 1
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 0
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
{
|
||||
Obj: &certv1beta1.CertificateSigningRequest{
|
||||
|
|
@ -106,9 +96,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{
|
||||
|
|
@ -126,9 +113,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 0
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 0
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
{
|
||||
Obj: &certv1beta1.CertificateSigningRequest{
|
||||
|
|
@ -138,9 +124,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{
|
||||
|
|
@ -158,9 +141,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 0
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 13
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
{
|
||||
Obj: &certv1beta1.CertificateSigningRequest{
|
||||
|
|
@ -170,9 +152,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{
|
||||
|
|
@ -192,9 +171,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 1
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 0
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
{
|
||||
Obj: &certv1beta1.CertificateSigningRequest{
|
||||
|
|
@ -204,9 +182,6 @@ func TestCsrStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"cert": "test",
|
||||
},
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
},
|
||||
Status: certv1beta1.CertificateSigningRequestStatus{
|
||||
|
|
@ -232,9 +207,8 @@ func TestCsrStore(t *testing.T) {
|
|||
kube_certificatesigningrequest_condition{certificatesigningrequest="certificate-test",condition="denied"} 2
|
||||
kube_certificatesigningrequest_labels{certificatesigningrequest="certificate-test",label_cert="test"} 1
|
||||
kube_certificatesigningrequest_cert_length{certificatesigningrequest="certificate-test"} 0
|
||||
kube_certificatesigningrequest_annotations{certificatesigningrequest="certificate-test",annotation_cert="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length", "kube_certificatesigningrequest_annotations"},
|
||||
MetricNames: []string{"kube_certificatesigningrequest_created", "kube_certificatesigningrequest_condition", "kube_certificatesigningrequest_labels", "kube_certificatesigningrequest_cert_length"},
|
||||
},
|
||||
}
|
||||
for i, c := range cases {
|
||||
|
|
|
|||
|
|
@ -81,23 +81,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_configmap_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapConfigMapFunc(func(c *v1.ConfigMap) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(c.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -35,23 +35,17 @@ func TestConfigMapStore(t *testing.T) {
|
|||
Name: "configmap1",
|
||||
Namespace: "ns1",
|
||||
ResourceVersion: "123456",
|
||||
Annotations: map[string]string{
|
||||
"configmap": "test",
|
||||
},
|
||||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_configmap_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_configmap_info Information about configmap.
|
||||
# HELP kube_configmap_metadata_resource_version Resource version representing a specific version of the configmap.
|
||||
# TYPE kube_configmap_annotations gauge
|
||||
# TYPE kube_configmap_info gauge
|
||||
# TYPE kube_configmap_metadata_resource_version gauge
|
||||
kube_configmap_info{configmap="configmap1",namespace="ns1"} 1
|
||||
kube_configmap_metadata_resource_version{configmap="configmap1",namespace="ns1",resource_version="123456"} 1
|
||||
kube_configmap_annotations{configmap="configmap1",namespace="ns1",annotation_configmap="test"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_configmap_info", "kube_configmap_metadata_resource_version", "kube_configmap_annotations"},
|
||||
MetricNames: []string{"kube_configmap_info", "kube_configmap_metadata_resource_version"},
|
||||
},
|
||||
{
|
||||
Obj: &v1.ConfigMap{
|
||||
|
|
@ -60,26 +54,20 @@ func TestConfigMapStore(t *testing.T) {
|
|||
Namespace: "ns2",
|
||||
CreationTimestamp: metav1StartTime,
|
||||
ResourceVersion: "abcdef",
|
||||
Annotations: map[string]string{
|
||||
"configmap": "test2",
|
||||
},
|
||||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_configmap_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_configmap_created Unix creation timestamp
|
||||
# HELP kube_configmap_info Information about configmap.
|
||||
# HELP kube_configmap_metadata_resource_version Resource version representing a specific version of the configmap.
|
||||
# TYPE kube_configmap_annotations gauge
|
||||
# TYPE kube_configmap_created gauge
|
||||
# TYPE kube_configmap_info gauge
|
||||
# TYPE kube_configmap_metadata_resource_version gauge
|
||||
kube_configmap_info{configmap="configmap2",namespace="ns2"} 1
|
||||
kube_configmap_created{configmap="configmap2",namespace="ns2"} 1.501569018e+09
|
||||
kube_configmap_metadata_resource_version{configmap="configmap2",namespace="ns2",resource_version="abcdef"} 1
|
||||
kube_configmap_annotations{configmap="configmap2",namespace="ns2",annotation_configmap="test2"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_configmap_info", "kube_configmap_created", "kube_configmap_metadata_resource_version", "kube_configmap_annotations"},
|
||||
MetricNames: []string{"kube_configmap_info", "kube_configmap_created", "kube_configmap_metadata_resource_version"},
|
||||
},
|
||||
}
|
||||
for i, c := range cases {
|
||||
|
|
|
|||
|
|
@ -190,23 +190,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_cronjob_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapCronJobFunc(func(j *batchv1beta1.CronJob) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(j.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -108,9 +108,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-active-running-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-active-running-1",
|
||||
},
|
||||
},
|
||||
Status: batchv1beta1.CronJobStatus{
|
||||
Active: []v1.ObjectReference{{Name: "FakeJob1"}, {Name: "FakeJob2"}},
|
||||
|
|
@ -124,7 +121,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_cronjob_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_cronjob_created Unix creation timestamp
|
||||
# HELP kube_cronjob_info Info about cronjob.
|
||||
# HELP kube_cronjob_labels Kubernetes labels converted to Prometheus labels.
|
||||
|
|
@ -133,7 +129,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
# HELP kube_cronjob_spec_suspend Suspend flag tells the controller to suspend subsequent executions.
|
||||
# HELP kube_cronjob_status_active Active holds pointers to currently running jobs.
|
||||
# HELP kube_cronjob_status_last_schedule_time LastScheduleTime keeps information of when was the last time the job was successfully scheduled.
|
||||
# TYPE kube_cronjob_annotations gauge
|
||||
# TYPE kube_cronjob_created gauge
|
||||
# TYPE kube_cronjob_info gauge
|
||||
# TYPE kube_cronjob_labels gauge
|
||||
|
|
@ -148,10 +143,9 @@ func TestCronJobStore(t *testing.T) {
|
|||
kube_cronjob_spec_suspend{cronjob="ActiveRunningCronJob1",namespace="ns1"} 0
|
||||
kube_cronjob_status_active{cronjob="ActiveRunningCronJob1",namespace="ns1"} 2
|
||||
kube_cronjob_status_last_schedule_time{cronjob="ActiveRunningCronJob1",namespace="ns1"} 1.520742896e+09
|
||||
kube_cronjob_annotations{cronjob="ActiveRunningCronJob1",namespace="ns1",annotation_app="example-active-running-1"} 1
|
||||
` + fmt.Sprintf("kube_cronjob_next_schedule_time{cronjob=\"ActiveRunningCronJob1\",namespace=\"ns1\"} %ve+09\n",
|
||||
float64(ActiveRunningCronJob1NextScheduleTime.Unix())/math.Pow10(9)),
|
||||
MetricNames: []string{"kube_cronjob_next_schedule_time", "kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels", "kube_cronjob_status_last_schedule_time", "kube_cronjob_annotations"},
|
||||
MetricNames: []string{"kube_cronjob_next_schedule_time", "kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels", "kube_cronjob_status_last_schedule_time"},
|
||||
},
|
||||
{
|
||||
Obj: &batchv1beta1.CronJob{
|
||||
|
|
@ -162,9 +156,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-suspended-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-suspended-1",
|
||||
},
|
||||
},
|
||||
Status: batchv1beta1.CronJobStatus{
|
||||
Active: []v1.ObjectReference{},
|
||||
|
|
@ -178,7 +169,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_cronjob_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_cronjob_created Unix creation timestamp
|
||||
# HELP kube_cronjob_info Info about cronjob.
|
||||
# HELP kube_cronjob_labels Kubernetes labels converted to Prometheus labels.
|
||||
|
|
@ -186,7 +176,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
# HELP kube_cronjob_spec_suspend Suspend flag tells the controller to suspend subsequent executions.
|
||||
# HELP kube_cronjob_status_active Active holds pointers to currently running jobs.
|
||||
# HELP kube_cronjob_status_last_schedule_time LastScheduleTime keeps information of when was the last time the job was successfully scheduled.
|
||||
# TYPE kube_cronjob_annotations gauge
|
||||
# TYPE kube_cronjob_created gauge
|
||||
# TYPE kube_cronjob_info gauge
|
||||
# TYPE kube_cronjob_labels gauge
|
||||
|
|
@ -200,9 +189,8 @@ func TestCronJobStore(t *testing.T) {
|
|||
kube_cronjob_spec_suspend{cronjob="SuspendedCronJob1",namespace="ns1"} 1
|
||||
kube_cronjob_status_active{cronjob="SuspendedCronJob1",namespace="ns1"} 0
|
||||
kube_cronjob_status_last_schedule_time{cronjob="SuspendedCronJob1",namespace="ns1"} 1.520762696e+09
|
||||
kube_cronjob_annotations{cronjob="SuspendedCronJob1",namespace="ns1",annotation_app="example-suspended-1"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels", "kube_cronjob_status_last_schedule_time", "kube_cronjob_annotations"},
|
||||
MetricNames: []string{"kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels", "kube_cronjob_status_last_schedule_time"},
|
||||
},
|
||||
{
|
||||
Obj: &batchv1beta1.CronJob{
|
||||
|
|
@ -214,9 +202,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-active-no-last-scheduled-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-active-no-last-scheduled-1",
|
||||
},
|
||||
},
|
||||
Status: batchv1beta1.CronJobStatus{
|
||||
Active: []v1.ObjectReference{},
|
||||
|
|
@ -230,7 +215,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_cronjob_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_cronjob_created Unix creation timestamp
|
||||
# HELP kube_cronjob_info Info about cronjob.
|
||||
# HELP kube_cronjob_labels Kubernetes labels converted to Prometheus labels.
|
||||
|
|
@ -238,7 +222,6 @@ func TestCronJobStore(t *testing.T) {
|
|||
# HELP kube_cronjob_spec_starting_deadline_seconds Deadline in seconds for starting the job if it misses scheduled time for any reason.
|
||||
# HELP kube_cronjob_spec_suspend Suspend flag tells the controller to suspend subsequent executions.
|
||||
# HELP kube_cronjob_status_active Active holds pointers to currently running jobs.
|
||||
# TYPE kube_cronjob_annotations gauge
|
||||
# TYPE kube_cronjob_created gauge
|
||||
# TYPE kube_cronjob_info gauge
|
||||
# TYPE kube_cronjob_labels gauge
|
||||
|
|
@ -252,11 +235,10 @@ func TestCronJobStore(t *testing.T) {
|
|||
kube_cronjob_info{concurrency_policy="Forbid",cronjob="ActiveCronJob1NoLastScheduled",namespace="ns1",schedule="25 * * * *"} 1
|
||||
kube_cronjob_created{cronjob="ActiveCronJob1NoLastScheduled",namespace="ns1"} 1.520766296e+09
|
||||
kube_cronjob_labels{cronjob="ActiveCronJob1NoLastScheduled",label_app="example-active-no-last-scheduled-1",namespace="ns1"} 1
|
||||
kube_cronjob_annotations{cronjob="ActiveCronJob1NoLastScheduled",namespace="ns1",annotation_app="example-active-no-last-scheduled-1"} 1
|
||||
` +
|
||||
fmt.Sprintf("kube_cronjob_next_schedule_time{cronjob=\"ActiveCronJob1NoLastScheduled\",namespace=\"ns1\"} %ve+09\n",
|
||||
float64(ActiveCronJob1NoLastScheduledNextScheduleTime.Unix())/math.Pow10(9)),
|
||||
MetricNames: []string{"kube_cronjob_next_schedule_time", "kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels", "kube_cronjob_annotations"},
|
||||
MetricNames: []string{"kube_cronjob_next_schedule_time", "kube_cronjob_spec_starting_deadline_seconds", "kube_cronjob_status_active", "kube_cronjob_spec_suspend", "kube_cronjob_info", "kube_cronjob_created", "kube_cronjob_labels"},
|
||||
},
|
||||
}
|
||||
for i, c := range cases {
|
||||
|
|
|
|||
|
|
@ -195,23 +195,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_daemonset_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapDaemonSetFunc(func(d *v1.DaemonSet) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(d.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -35,9 +35,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Generation: 21,
|
||||
},
|
||||
Status: v1.DaemonSetStatus{
|
||||
|
|
@ -48,7 +45,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_daemonset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_daemonset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_daemonset_metadata_generation Sequence number representing a specific generation of the desired state.
|
||||
# HELP kube_daemonset_status_current_number_scheduled The number of nodes running at least one daemon pod and are supposed to.
|
||||
|
|
@ -58,7 +54,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
# HELP kube_daemonset_status_number_ready The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.
|
||||
# HELP kube_daemonset_status_number_unavailable The number of nodes that should be running the daemon pod and have none of the daemon pod running and available
|
||||
# HELP kube_daemonset_updated_number_scheduled The total number of nodes that are running updated daemon pod
|
||||
# TYPE kube_daemonset_annotations gauge
|
||||
# TYPE kube_daemonset_labels gauge
|
||||
# TYPE kube_daemonset_metadata_generation gauge
|
||||
# TYPE kube_daemonset_status_current_number_scheduled gauge
|
||||
|
|
@ -77,7 +72,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
kube_daemonset_status_number_unavailable{daemonset="ds1",namespace="ns1"} 0
|
||||
kube_daemonset_updated_number_scheduled{daemonset="ds1",namespace="ns1"} 0
|
||||
kube_daemonset_labels{daemonset="ds1",label_app="example1",namespace="ns1"} 1
|
||||
kube_daemonset_annotations{daemonset="ds1",namespace="ns1",annotation_app="example1"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_daemonset_labels",
|
||||
|
|
@ -89,7 +83,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
"kube_daemonset_status_number_ready",
|
||||
"kube_daemonset_status_number_unavailable",
|
||||
"kube_daemonset_updated_number_scheduled",
|
||||
"kube_daemonset_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -101,9 +94,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Generation: 14,
|
||||
},
|
||||
Status: v1.DaemonSetStatus{
|
||||
|
|
@ -134,8 +124,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
# TYPE kube_daemonset_metadata_generation gauge
|
||||
# HELP kube_daemonset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_daemonset_labels gauge
|
||||
# HELP kube_daemonset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_daemonset_annotations gauge
|
||||
kube_daemonset_metadata_generation{daemonset="ds2",namespace="ns2"} 14
|
||||
kube_daemonset_status_current_number_scheduled{daemonset="ds2",namespace="ns2"} 10
|
||||
kube_daemonset_status_desired_number_scheduled{daemonset="ds2",namespace="ns2"} 0
|
||||
|
|
@ -145,7 +133,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
kube_daemonset_status_number_unavailable{daemonset="ds2",namespace="ns2"} 0
|
||||
kube_daemonset_updated_number_scheduled{daemonset="ds2",namespace="ns2"} 0
|
||||
kube_daemonset_labels{daemonset="ds2",label_app="example2",namespace="ns2"} 1
|
||||
kube_daemonset_annotations{daemonset="ds2",namespace="ns2",annotation_app="example2"} 1
|
||||
kube_daemonset_created{namespace="ns2",daemonset="ds2"} 1.5e+09
|
||||
`,
|
||||
MetricNames: []string{
|
||||
|
|
@ -159,7 +146,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
"kube_daemonset_status_number_ready",
|
||||
"kube_daemonset_status_number_unavailable",
|
||||
"kube_daemonset_updated_number_scheduled",
|
||||
"kube_daemonset_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -171,9 +157,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
Generation: 15,
|
||||
},
|
||||
Status: v1.DaemonSetStatus{
|
||||
|
|
@ -207,8 +190,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
# TYPE kube_daemonset_metadata_generation gauge
|
||||
# HELP kube_daemonset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_daemonset_labels gauge
|
||||
# HELP kube_daemonset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_daemonset_annotations gauge
|
||||
kube_daemonset_created{daemonset="ds3",namespace="ns3"} 1.5e+09
|
||||
kube_daemonset_metadata_generation{daemonset="ds3",namespace="ns3"} 15
|
||||
kube_daemonset_status_current_number_scheduled{daemonset="ds3",namespace="ns3"} 10
|
||||
|
|
@ -219,7 +200,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
kube_daemonset_status_number_unavailable{daemonset="ds3",namespace="ns3"} 5
|
||||
kube_daemonset_updated_number_scheduled{daemonset="ds3",namespace="ns3"} 5
|
||||
kube_daemonset_labels{daemonset="ds3",label_app="example3",namespace="ns3"} 1
|
||||
kube_daemonset_annotations{daemonset="ds3",namespace="ns3",annotation_app="example3"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_daemonset_created",
|
||||
|
|
@ -232,7 +212,6 @@ func TestDaemonSetStore(t *testing.T) {
|
|||
"kube_daemonset_status_number_ready",
|
||||
"kube_daemonset_status_number_unavailable",
|
||||
"kube_daemonset_updated_number_scheduled",
|
||||
"kube_daemonset_annotations",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,23 +227,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_deployment_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapDeploymentFunc(func(d *v1.Deployment) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(d.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -65,8 +65,6 @@ func TestDeploymentStore(t *testing.T) {
|
|||
# TYPE kube_deployment_spec_strategy_rollingupdate_max_surge gauge
|
||||
# HELP kube_deployment_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_deployment_labels gauge
|
||||
# HELP kube_deployment_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_deployment_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -78,9 +76,6 @@ func TestDeploymentStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Generation: 21,
|
||||
},
|
||||
Status: v1.DeploymentStatus{
|
||||
|
|
@ -113,7 +108,6 @@ func TestDeploymentStore(t *testing.T) {
|
|||
kube_deployment_status_replicas_unavailable{deployment="depl1",namespace="ns1"} 5
|
||||
kube_deployment_status_replicas_updated{deployment="depl1",namespace="ns1"} 2
|
||||
kube_deployment_status_replicas{deployment="depl1",namespace="ns1"} 15
|
||||
kube_deployment_annotations{annotation_app="example1",deployment="depl1",namespace="ns1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -124,9 +118,6 @@ func TestDeploymentStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Generation: 14,
|
||||
},
|
||||
Status: v1.DeploymentStatus{
|
||||
|
|
@ -159,7 +150,6 @@ func TestDeploymentStore(t *testing.T) {
|
|||
kube_deployment_status_replicas_unavailable{deployment="depl2",namespace="ns2"} 0
|
||||
kube_deployment_status_replicas_updated{deployment="depl2",namespace="ns2"} 1
|
||||
kube_deployment_status_replicas{deployment="depl2",namespace="ns2"} 10
|
||||
kube_deployment_annotations{annotation_app="example2",deployment="depl2",namespace="ns2"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,23 +120,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_endpoint_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapEndpointFunc(func(e *v1.Endpoints) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(e.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -39,8 +39,6 @@ func TestEndpointStore(t *testing.T) {
|
|||
# TYPE kube_endpoint_info gauge
|
||||
# HELP kube_endpoint_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_endpoint_labels gauge
|
||||
# HELP kube_endpoint_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_endpoint_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -52,9 +50,6 @@ func TestEndpointStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "foobar",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "foobar",
|
||||
},
|
||||
},
|
||||
Subsets: []v1.EndpointSubset{
|
||||
{Addresses: []v1.EndpointAddress{
|
||||
|
|
@ -93,7 +88,6 @@ func TestEndpointStore(t *testing.T) {
|
|||
kube_endpoint_created{endpoint="test-endpoint",namespace="default"} 1.5e+09
|
||||
kube_endpoint_info{endpoint="test-endpoint",namespace="default"} 1
|
||||
kube_endpoint_labels{endpoint="test-endpoint",label_app="foobar",namespace="default"} 1
|
||||
kube_endpoint_annotations{endpoint="test-endpoint",namespace="default",annotation_app="foobar"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,23 +143,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_hpa_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapHPAFunc(func(a *autoscaling.HorizontalPodAutoscaler) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(a.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -48,8 +48,6 @@ func TestHPAStore(t *testing.T) {
|
|||
# TYPE kube_hpa_status_condition gauge
|
||||
# HELP kube_hpa_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_hpa_labels gauge
|
||||
# HELP kube_hpa_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_hpa_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -62,9 +60,6 @@ func TestHPAStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "foobar",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "foobar",
|
||||
},
|
||||
},
|
||||
Spec: autoscaling.HorizontalPodAutoscalerSpec{
|
||||
MaxReplicas: 4,
|
||||
|
|
@ -96,7 +91,6 @@ func TestHPAStore(t *testing.T) {
|
|||
kube_hpa_status_condition{condition="unknown",hpa="hpa1",namespace="ns1",status="AbleToScale"} 0
|
||||
kube_hpa_status_current_replicas{hpa="hpa1",namespace="ns1"} 2
|
||||
kube_hpa_status_desired_replicas{hpa="hpa1",namespace="ns1"} 2
|
||||
kube_hpa_annotations{hpa="hpa1",namespace="ns1",annotation_app="foobar"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_hpa_metadata_generation",
|
||||
|
|
@ -106,7 +100,6 @@ func TestHPAStore(t *testing.T) {
|
|||
"kube_hpa_status_desired_replicas",
|
||||
"kube_hpa_status_condition",
|
||||
"kube_hpa_labels",
|
||||
"kube_hpa_annotations",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,23 +119,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_ingress_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapIngressFunc(func(i *v1beta1.Ingress) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(i.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_ingress_tls",
|
||||
Type: metric.Gauge,
|
||||
|
|
|
|||
|
|
@ -32,14 +32,12 @@ func TestIngressStore(t *testing.T) {
|
|||
// Fixed metadata on type and help text. We prepend this to every expected
|
||||
// output so we only have to modify a single place when doing adjustments.
|
||||
const metadata = `
|
||||
# HELP kube_ingress_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_ingress_created Unix creation timestamp
|
||||
# HELP kube_ingress_info Information about ingress.
|
||||
# HELP kube_ingress_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_ingress_metadata_resource_version Resource version representing a specific version of ingress.
|
||||
# HELP kube_ingress_path Ingress host, paths and backend service information.
|
||||
# HELP kube_ingress_tls Ingress TLS host and secret information.
|
||||
# TYPE kube_ingress_annotations gauge
|
||||
# TYPE kube_ingress_created gauge
|
||||
# TYPE kube_ingress_info gauge
|
||||
# TYPE kube_ingress_labels gauge
|
||||
|
|
@ -54,18 +52,14 @@ func TestIngressStore(t *testing.T) {
|
|||
Name: "ingress1",
|
||||
Namespace: "ns1",
|
||||
ResourceVersion: "000000",
|
||||
Annotations: map[string]string{
|
||||
"app": "ingress1",
|
||||
},
|
||||
},
|
||||
},
|
||||
Want: metadata + `
|
||||
kube_ingress_info{namespace="ns1",ingress="ingress1"} 1
|
||||
kube_ingress_metadata_resource_version{namespace="ns1",resource_version="000000",ingress="ingress1"} 1
|
||||
kube_ingress_labels{namespace="ns1",ingress="ingress1"} 1
|
||||
kube_ingress_annotations{namespace="ns1",ingress="ingress1",annotation_app="ingress1"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_annotations", "kube_ingress_tls"},
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
|
||||
},
|
||||
{
|
||||
Obj: &v1beta1.Ingress{
|
||||
|
|
@ -74,9 +68,6 @@ func TestIngressStore(t *testing.T) {
|
|||
Namespace: "ns2",
|
||||
CreationTimestamp: metav1StartTime,
|
||||
ResourceVersion: "123456",
|
||||
Annotations: map[string]string{
|
||||
"app": "ingress2",
|
||||
},
|
||||
},
|
||||
},
|
||||
Want: metadata + `
|
||||
|
|
@ -84,9 +75,8 @@ func TestIngressStore(t *testing.T) {
|
|||
kube_ingress_created{namespace="ns2",ingress="ingress2"} 1.501569018e+09
|
||||
kube_ingress_metadata_resource_version{namespace="ns2",resource_version="123456",ingress="ingress2"} 1
|
||||
kube_ingress_labels{namespace="ns2",ingress="ingress2"} 1
|
||||
kube_ingress_annotations{namespace="ns2",ingress="ingress2",annotation_app="ingress2"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_annotations", "kube_ingress_tls"},
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
|
||||
},
|
||||
{
|
||||
Obj: &v1beta1.Ingress{
|
||||
|
|
@ -96,9 +86,6 @@ func TestIngressStore(t *testing.T) {
|
|||
CreationTimestamp: metav1StartTime,
|
||||
Labels: map[string]string{"test-3": "test-3"},
|
||||
ResourceVersion: "abcdef",
|
||||
Annotations: map[string]string{
|
||||
"test-3": "test-3",
|
||||
},
|
||||
},
|
||||
},
|
||||
Want: metadata + `
|
||||
|
|
@ -106,9 +93,8 @@ func TestIngressStore(t *testing.T) {
|
|||
kube_ingress_created{namespace="ns3",ingress="ingress3"} 1.501569018e+09
|
||||
kube_ingress_metadata_resource_version{namespace="ns3",resource_version="abcdef",ingress="ingress3"} 1
|
||||
kube_ingress_labels{label_test_3="test-3",namespace="ns3",ingress="ingress3"} 1
|
||||
kube_ingress_annotations{namespace="ns3",ingress="ingress3",annotation_test_3="test-3"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_annotations", "kube_ingress_tls"},
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
|
||||
},
|
||||
{
|
||||
Obj: &v1beta1.Ingress{
|
||||
|
|
@ -118,9 +104,6 @@ func TestIngressStore(t *testing.T) {
|
|||
CreationTimestamp: metav1StartTime,
|
||||
Labels: map[string]string{"test-4": "test-4"},
|
||||
ResourceVersion: "abcdef",
|
||||
Annotations: map[string]string{
|
||||
"test-4": "test-4",
|
||||
},
|
||||
},
|
||||
Spec: v1beta1.IngressSpec{
|
||||
Rules: []v1beta1.IngressRule{
|
||||
|
|
@ -152,9 +135,8 @@ func TestIngressStore(t *testing.T) {
|
|||
kube_ingress_metadata_resource_version{namespace="ns4",resource_version="abcdef",ingress="ingress4"} 1
|
||||
kube_ingress_labels{label_test_4="test-4",namespace="ns4",ingress="ingress4"} 1
|
||||
kube_ingress_path{namespace="ns4",ingress="ingress4",host="somehost",path="/somepath",service_name="someservice",service_port="1234"} 1
|
||||
kube_ingress_annotations{namespace="ns4",ingress="ingress4",annotation_test_4="test-4"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_annotations", "kube_ingress_tls"},
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
|
||||
},
|
||||
{
|
||||
Obj: &v1beta1.Ingress{
|
||||
|
|
@ -164,9 +146,6 @@ func TestIngressStore(t *testing.T) {
|
|||
CreationTimestamp: metav1StartTime,
|
||||
Labels: map[string]string{"test-5": "test-5"},
|
||||
ResourceVersion: "abcdef",
|
||||
Annotations: map[string]string{
|
||||
"test-5": "test-5",
|
||||
},
|
||||
},
|
||||
Spec: v1beta1.IngressSpec{
|
||||
TLS: []v1beta1.IngressTLS{
|
||||
|
|
@ -182,11 +161,10 @@ func TestIngressStore(t *testing.T) {
|
|||
kube_ingress_created{namespace="ns5",ingress="ingress5"} 1.501569018e+09
|
||||
kube_ingress_metadata_resource_version{namespace="ns5",resource_version="abcdef",ingress="ingress5"} 1
|
||||
kube_ingress_labels{label_test_5="test-5",namespace="ns5",ingress="ingress5"} 1
|
||||
kube_ingress_annotations{namespace="ns5",ingress="ingress5",annotation_test_5="test-5"} 1
|
||||
kube_ingress_tls{namespace="ns5",ingress="ingress5",tls_host="somehost1",secret="somesecret"} 1
|
||||
kube_ingress_tls{namespace="ns5",ingress="ingress5",tls_host="somehost2",secret="somesecret"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_annotations", "kube_ingress_tls"},
|
||||
MetricNames: []string{"kube_ingress_info", "kube_ingress_metadata_resource_version", "kube_ingress_created", "kube_ingress_labels", "kube_ingress_path", "kube_ingress_tls"},
|
||||
},
|
||||
}
|
||||
for i, c := range cases {
|
||||
|
|
|
|||
|
|
@ -306,23 +306,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_job_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapJobFunc(func(j *v1batch.Job) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(j.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -75,8 +75,6 @@ func TestJobStore(t *testing.T) {
|
|||
# TYPE kube_job_status_start_time gauge
|
||||
# HELP kube_job_status_succeeded The number of pods which reached Phase Succeeded.
|
||||
# TYPE kube_job_status_succeeded gauge
|
||||
# HELP kube_job_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_job_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -89,9 +87,6 @@ func TestJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-running-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-running-1",
|
||||
},
|
||||
OwnerReferences: []metav1.OwnerReference{
|
||||
{
|
||||
Kind: "CronJob",
|
||||
|
|
@ -125,7 +120,6 @@ func TestJobStore(t *testing.T) {
|
|||
kube_job_status_failed{job_name="RunningJob1",namespace="ns1"} 0
|
||||
kube_job_status_start_time{job_name="RunningJob1",namespace="ns1"} 1.495800007e+09
|
||||
kube_job_status_succeeded{job_name="RunningJob1",namespace="ns1"} 0
|
||||
kube_job_annotations{job_name="RunningJob1",namespace="ns1",annotation_app="example-running-1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -137,9 +131,6 @@ func TestJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-successful-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-successful-1",
|
||||
},
|
||||
},
|
||||
Status: v1batch.JobStatus{
|
||||
Active: 0,
|
||||
|
|
@ -172,7 +163,6 @@ func TestJobStore(t *testing.T) {
|
|||
kube_job_status_failed{job_name="SuccessfulJob1",namespace="ns1"} 0
|
||||
kube_job_status_start_time{job_name="SuccessfulJob1",namespace="ns1"} 1.495800007e+09
|
||||
kube_job_status_succeeded{job_name="SuccessfulJob1",namespace="ns1"} 1
|
||||
kube_job_annotations{job_name="SuccessfulJob1",namespace="ns1",annotation_app="example-successful-1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -184,9 +174,6 @@ func TestJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-failed-1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-failed-1",
|
||||
},
|
||||
},
|
||||
Status: v1batch.JobStatus{
|
||||
Active: 0,
|
||||
|
|
@ -219,7 +206,6 @@ func TestJobStore(t *testing.T) {
|
|||
kube_job_status_failed{job_name="FailedJob1",namespace="ns1"} 1
|
||||
kube_job_status_start_time{job_name="FailedJob1",namespace="ns1"} 1.495807207e+09
|
||||
kube_job_status_succeeded{job_name="FailedJob1",namespace="ns1"} 0
|
||||
kube_job_annotations{job_name="FailedJob1",namespace="ns1",annotation_app="example-failed-1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -231,9 +217,6 @@ func TestJobStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example-successful-2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example-successful-2",
|
||||
},
|
||||
},
|
||||
Status: v1batch.JobStatus{
|
||||
Active: 0,
|
||||
|
|
@ -255,6 +238,7 @@ func TestJobStore(t *testing.T) {
|
|||
kube_job_owner{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1",owner_is_controller="<none>",owner_kind="<none>",owner_name="<none>"} 1
|
||||
kube_job_complete{condition="false",job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
|
||||
kube_job_complete{condition="true",job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1
|
||||
|
||||
kube_job_complete{condition="unknown",job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
|
||||
kube_job_info{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1
|
||||
kube_job_labels{job_name="SuccessfulJob2NoActiveDeadlineSeconds",label_app="example-successful-2",namespace="ns1"} 1
|
||||
|
|
@ -265,7 +249,6 @@ func TestJobStore(t *testing.T) {
|
|||
kube_job_status_failed{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 0
|
||||
kube_job_status_start_time{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1.495800607e+09
|
||||
kube_job_status_succeeded{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1"} 1
|
||||
kube_job_annotations{job_name="SuccessfulJob2NoActiveDeadlineSeconds",namespace="ns1",annotation_app="example-successful-2"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -104,23 +104,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_limitrange_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapLimitRangeFunc(func(r *v1.LimitRange) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(r.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,6 @@ func TestLimitRangeStore(t *testing.T) {
|
|||
# TYPE kube_limitrange_created gauge
|
||||
# HELP kube_limitrange Information about limit range.
|
||||
# TYPE kube_limitrange gauge
|
||||
# HELP kube_limitrange_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_limitrange_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -46,9 +44,6 @@ func TestLimitRangeStore(t *testing.T) {
|
|||
Name: "quotaTest",
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
Namespace: "testNS",
|
||||
Annotations: map[string]string{
|
||||
"quota": "test",
|
||||
},
|
||||
},
|
||||
Spec: v1.LimitRangeSpec{
|
||||
Limits: []v1.LimitRangeItem{
|
||||
|
|
@ -80,7 +75,7 @@ func TestLimitRangeStore(t *testing.T) {
|
|||
kube_limitrange{constraint="max",limitrange="quotaTest",namespace="testNS",resource="memory",type="Pod"} 2.1e+09
|
||||
kube_limitrange{constraint="maxLimitRequestRatio",limitrange="quotaTest",namespace="testNS",resource="memory",type="Pod"} 2.1e+09
|
||||
kube_limitrange{constraint="min",limitrange="quotaTest",namespace="testNS",resource="memory",type="Pod"} 2.1e+09
|
||||
kube_limitrange_annotations{limitrange="quotaTest",namespace="testNS",annotation_quota="test"} 1
|
||||
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,23 +67,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_namespace_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapNamespaceFunc(func(n *v1.Namespace) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(n.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_namespace_status_phase",
|
||||
Type: metric.Gauge,
|
||||
|
|
|
|||
|
|
@ -33,8 +33,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
# TYPE kube_namespace_created gauge
|
||||
# HELP kube_namespace_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_namespace_labels gauge
|
||||
# HELP kube_namespace_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_namespace_annotations gauge
|
||||
# HELP kube_namespace_status_phase kubernetes namespace status phase.
|
||||
# TYPE kube_namespace_status_phase gauge
|
||||
`
|
||||
|
|
@ -44,9 +42,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
Obj: &v1.Namespace{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "nsActiveTest",
|
||||
Annotations: map[string]string{
|
||||
"test": "testNS",
|
||||
},
|
||||
},
|
||||
Spec: v1.NamespaceSpec{
|
||||
Finalizers: []v1.FinalizerName{v1.FinalizerKubernetes},
|
||||
|
|
@ -59,16 +54,12 @@ func TestNamespaceStore(t *testing.T) {
|
|||
kube_namespace_labels{namespace="nsActiveTest"} 1
|
||||
kube_namespace_status_phase{namespace="nsActiveTest",phase="Active"} 1
|
||||
kube_namespace_status_phase{namespace="nsActiveTest",phase="Terminating"} 0
|
||||
kube_namespace_annotations{namespace="nsActiveTest",annotation_test="testNS"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
Obj: &v1.Namespace{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "nsTerminateTest",
|
||||
Annotations: map[string]string{
|
||||
"test": "nsTerminateTest",
|
||||
},
|
||||
},
|
||||
Spec: v1.NamespaceSpec{
|
||||
Finalizers: []v1.FinalizerName{v1.FinalizerKubernetes},
|
||||
|
|
@ -81,7 +72,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
kube_namespace_labels{namespace="nsTerminateTest"} 1
|
||||
kube_namespace_status_phase{namespace="nsTerminateTest",phase="Active"} 0
|
||||
kube_namespace_status_phase{namespace="nsTerminateTest",phase="Terminating"} 1
|
||||
kube_namespace_annotations{namespace="nsTerminateTest",annotation_test="nsTerminateTest"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -93,9 +83,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
},
|
||||
Spec: v1.NamespaceSpec{
|
||||
Finalizers: []v1.FinalizerName{v1.FinalizerKubernetes},
|
||||
|
|
@ -109,7 +96,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
kube_namespace_labels{label_app="example1",namespace="ns1"} 1
|
||||
kube_namespace_status_phase{namespace="ns1",phase="Active"} 1
|
||||
kube_namespace_status_phase{namespace="ns1",phase="Terminating"} 0
|
||||
kube_namespace_annotations{annotation_app="example1",namespace="ns1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -120,10 +106,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
"app": "example2",
|
||||
"l2": "label2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
"l2": "label2",
|
||||
},
|
||||
},
|
||||
Spec: v1.NamespaceSpec{
|
||||
Finalizers: []v1.FinalizerName{v1.FinalizerKubernetes},
|
||||
|
|
@ -134,7 +116,6 @@ func TestNamespaceStore(t *testing.T) {
|
|||
},
|
||||
Want: metadata + `
|
||||
kube_namespace_labels{label_app="example2",label_l2="label2",namespace="ns2"} 1
|
||||
kube_namespace_annotations{annotation_app="example2",annotation_l2="label2",namespace="ns2"} 1
|
||||
kube_namespace_status_phase{namespace="ns2",phase="Active"} 1
|
||||
kube_namespace_status_phase{namespace="ns2",phase="Terminating"} 0
|
||||
`,
|
||||
|
|
|
|||
|
|
@ -478,23 +478,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_node_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapNodeFunc(func(n *v1.Node) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(n.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -33,9 +33,6 @@ func TestNodeStore(t *testing.T) {
|
|||
Obj: &v1.Node{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "127.0.0.1",
|
||||
Annotations: map[string]string{
|
||||
"kubeadm.alpha.kubernetes.io/ttl": "0",
|
||||
},
|
||||
},
|
||||
Status: v1.NodeStatus{
|
||||
NodeInfo: v1.NodeSystemInfo{
|
||||
|
|
@ -51,20 +48,17 @@ func TestNodeStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_node_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_node_info Information about a cluster node.
|
||||
# HELP kube_node_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_node_spec_unschedulable Whether a node can schedule new pods.
|
||||
# TYPE kube_node_annotations gauge
|
||||
# TYPE kube_node_info gauge
|
||||
# TYPE kube_node_labels gauge
|
||||
# TYPE kube_node_spec_unschedulable gauge
|
||||
kube_node_info{container_runtime_version="rkt",kernel_version="kernel",kubelet_version="kubelet",kubeproxy_version="kubeproxy",node="127.0.0.1",os_image="osimage",provider_id="provider://i-uniqueid"} 1
|
||||
kube_node_labels{node="127.0.0.1"} 1
|
||||
kube_node_spec_unschedulable{node="127.0.0.1"} 0
|
||||
kube_node_annotations{node="127.0.0.1",annotation_kubeadm_alpha_kubernetes_io_ttl="0"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_node_annotations", "kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info"},
|
||||
MetricNames: []string{"kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info"},
|
||||
},
|
||||
// Verify resource metric.
|
||||
{
|
||||
|
|
@ -107,7 +101,6 @@ func TestNodeStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_node_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_node_created Unix creation timestamp
|
||||
# HELP kube_node_info Information about a cluster node.
|
||||
# HELP kube_node_labels Kubernetes labels converted to Prometheus labels.
|
||||
|
|
@ -120,7 +113,6 @@ func TestNodeStore(t *testing.T) {
|
|||
# HELP kube_node_status_capacity_cpu_cores The total CPU resources of the node.
|
||||
# HELP kube_node_status_capacity_memory_bytes The total memory resources of the node.
|
||||
# HELP kube_node_status_capacity_pods The total pod resources of the node.
|
||||
# TYPE kube_node_annotations gauge
|
||||
# TYPE kube_node_created gauge
|
||||
# TYPE kube_node_info gauge
|
||||
# TYPE kube_node_labels gauge
|
||||
|
|
@ -155,9 +147,8 @@ func TestNodeStore(t *testing.T) {
|
|||
kube_node_status_capacity{node="127.0.0.1",resource="nvidia_com_gpu",unit="integer"} 4
|
||||
kube_node_status_capacity{node="127.0.0.1",resource="pods",unit="integer"} 1000
|
||||
kube_node_status_capacity{node="127.0.0.1",resource="storage",unit="byte"} 3e+09
|
||||
kube_node_annotations{node="127.0.0.1"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_node_annotations", "kube_node_status_capacity", "kube_node_status_capacity_pods", "kube_node_status_capacity_memory_bytes", "kube_node_status_capacity_cpu_cores", "kube_node_status_allocatable", "kube_node_status_allocatable_pods", "kube_node_status_allocatable_memory_bytes", "kube_node_status_allocatable_cpu_cores", "kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info", "kube_node_created"},
|
||||
MetricNames: []string{"kube_node_status_capacity", "kube_node_status_capacity_pods", "kube_node_status_capacity_memory_bytes", "kube_node_status_capacity_cpu_cores", "kube_node_status_allocatable", "kube_node_status_allocatable_pods", "kube_node_status_allocatable_memory_bytes", "kube_node_status_allocatable_cpu_cores", "kube_node_spec_unschedulable", "kube_node_labels", "kube_node_info", "kube_node_created"},
|
||||
},
|
||||
// Verify phase enumerations.
|
||||
{
|
||||
|
|
|
|||
|
|
@ -127,23 +127,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_persistentvolume_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapPersistentVolumeFunc(func(p *v1.PersistentVolume) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(p.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -54,9 +54,6 @@ func TestPersistentVolumeStore(t *testing.T) {
|
|||
Obj: &v1.PersistentVolume{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test-pv-available",
|
||||
Annotations: map[string]string{
|
||||
"pv": "test",
|
||||
},
|
||||
},
|
||||
Status: v1.PersistentVolumeStatus{
|
||||
Phase: v1.VolumeAvailable,
|
||||
|
|
@ -65,19 +62,13 @@ func TestPersistentVolumeStore(t *testing.T) {
|
|||
Want: `
|
||||
# HELP kube_persistentvolume_status_phase The phase indicates if a volume is available, bound to a claim, or released by a claim.
|
||||
# TYPE kube_persistentvolume_status_phase gauge
|
||||
# HELP kube_persistentvolume_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_persistentvolume_annotations gauge
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-available",phase="Available"} 1
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-available",phase="Bound"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-available",phase="Failed"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-available",phase="Pending"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-available",phase="Released"} 0
|
||||
kube_persistentvolume_annotations{persistentvolume="test-pv-available",annotation_pv="test"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_persistentvolume_status_phase",
|
||||
"kube_persistentvolume_annotations",
|
||||
},
|
||||
MetricNames: []string{"kube_persistentvolume_status_phase"},
|
||||
},
|
||||
{
|
||||
Obj: &v1.PersistentVolume{
|
||||
|
|
@ -144,9 +135,6 @@ func TestPersistentVolumeStore(t *testing.T) {
|
|||
Obj: &v1.PersistentVolume{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "test-pv-pending",
|
||||
Annotations: map[string]string{
|
||||
"pv-test": "test",
|
||||
},
|
||||
},
|
||||
Status: v1.PersistentVolumeStatus{
|
||||
Phase: v1.VolumePending,
|
||||
|
|
@ -158,18 +146,14 @@ func TestPersistentVolumeStore(t *testing.T) {
|
|||
Want: `
|
||||
# HELP kube_persistentvolume_status_phase The phase indicates if a volume is available, bound to a claim, or released by a claim.
|
||||
# TYPE kube_persistentvolume_status_phase gauge
|
||||
# HELP kube_persistentvolume_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_persistentvolume_annotations gauge
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-pending",phase="Available"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-pending",phase="Bound"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-pending",phase="Failed"} 0
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-pending",phase="Pending"} 1
|
||||
kube_persistentvolume_status_phase{persistentvolume="test-pv-pending",phase="Released"} 0
|
||||
kube_persistentvolume_annotations{persistentvolume="test-pv-pending",annotation_pv_test="test"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_persistentvolume_status_phase",
|
||||
"kube_persistentvolume_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
|||
|
|
@ -144,23 +144,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_persistentvolumeclaim_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapPersistentVolumeClaimFunc(func(p *v1.PersistentVolumeClaim) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(p.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -37,9 +37,6 @@ func TestPersistentVolumeClaimStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "mysql-server",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "mysql-server",
|
||||
},
|
||||
},
|
||||
Spec: v1.PersistentVolumeClaimSpec{
|
||||
AccessModes: []v1.PersistentVolumeAccessMode{
|
||||
|
|
@ -59,13 +56,11 @@ func TestPersistentVolumeClaimStore(t *testing.T) {
|
|||
},
|
||||
Want: `
|
||||
# HELP kube_persistentvolumeclaim_access_mode The access mode(s) specified by the persistent volume claim.
|
||||
# HELP kube_persistentvolumeclaim_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_persistentvolumeclaim_info Information about persistent volume claim.
|
||||
# HELP kube_persistentvolumeclaim_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_persistentvolumeclaim_resource_requests_storage_bytes The capacity of storage requested by the persistent volume claim.
|
||||
# HELP kube_persistentvolumeclaim_status_phase The phase the persistent volume claim is currently in.
|
||||
# TYPE kube_persistentvolumeclaim_access_mode gauge
|
||||
# TYPE kube_persistentvolumeclaim_annotations gauge
|
||||
# TYPE kube_persistentvolumeclaim_info gauge
|
||||
# TYPE kube_persistentvolumeclaim_labels gauge
|
||||
# TYPE kube_persistentvolumeclaim_resource_requests_storage_bytes gauge
|
||||
|
|
@ -77,9 +72,8 @@ func TestPersistentVolumeClaimStore(t *testing.T) {
|
|||
kube_persistentvolumeclaim_resource_requests_storage_bytes{namespace="default",persistentvolumeclaim="mysql-data"} 1.073741824e+09
|
||||
kube_persistentvolumeclaim_labels{label_app="mysql-server",namespace="default",persistentvolumeclaim="mysql-data"} 1
|
||||
kube_persistentvolumeclaim_access_mode{namespace="default",persistentvolumeclaim="mysql-data",access_mode="ReadWriteOnce"} 1
|
||||
kube_persistentvolumeclaim_annotations{namespace="default",persistentvolumeclaim="mysql-data",annotation_app="mysql-server"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_persistentvolumeclaim_info", "kube_persistentvolumeclaim_status_phase", "kube_persistentvolumeclaim_resource_requests_storage_bytes", "kube_persistentvolumeclaim_labels", "kube_persistentvolumeclaim_access_mode", "kube_persistentvolumeclaim_annotations"},
|
||||
MetricNames: []string{"kube_persistentvolumeclaim_info", "kube_persistentvolumeclaim_status_phase", "kube_persistentvolumeclaim_resource_requests_storage_bytes", "kube_persistentvolumeclaim_labels", "kube_persistentvolumeclaim_access_mode"},
|
||||
},
|
||||
{
|
||||
Obj: &v1.PersistentVolumeClaim{
|
||||
|
|
|
|||
|
|
@ -119,23 +119,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_poddisruptionbudget_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapPodDisruptionBudgetFunc(func(p *v1beta1.PodDisruptionBudget) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(p.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -41,8 +41,6 @@ func TestPodDisruptionBudgetStore(t *testing.T) {
|
|||
# TYPE kube_poddisruptionbudget_status_expected_pods gauge
|
||||
# HELP kube_poddisruptionbudget_status_observed_generation Most recent generation observed when updating this PDB status
|
||||
# TYPE kube_poddisruptionbudget_status_observed_generation gauge
|
||||
# HELP kube_poddisruptionbudget_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_poddisruptionbudget_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -52,9 +50,6 @@ func TestPodDisruptionBudgetStore(t *testing.T) {
|
|||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
Namespace: "ns1",
|
||||
Generation: 21,
|
||||
Annotations: map[string]string{
|
||||
"pdb1": "pdb1",
|
||||
},
|
||||
},
|
||||
Status: v1beta1.PodDisruptionBudgetStatus{
|
||||
CurrentHealthy: 12,
|
||||
|
|
@ -71,7 +66,6 @@ func TestPodDisruptionBudgetStore(t *testing.T) {
|
|||
kube_poddisruptionbudget_status_pod_disruptions_allowed{namespace="ns1",poddisruptionbudget="pdb1"} 2
|
||||
kube_poddisruptionbudget_status_expected_pods{namespace="ns1",poddisruptionbudget="pdb1"} 15
|
||||
kube_poddisruptionbudget_status_observed_generation{namespace="ns1",poddisruptionbudget="pdb1"} 111
|
||||
kube_poddisruptionbudget_annotations{namespace="ns1",poddisruptionbudget="pdb1",annotation_pdb1="pdb1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -95,7 +89,6 @@ func TestPodDisruptionBudgetStore(t *testing.T) {
|
|||
kube_poddisruptionbudget_status_pod_disruptions_allowed{namespace="ns2",poddisruptionbudget="pdb2"} 0
|
||||
kube_poddisruptionbudget_status_expected_pods{namespace="ns2",poddisruptionbudget="pdb2"} 10
|
||||
kube_poddisruptionbudget_status_observed_generation{namespace="ns2",poddisruptionbudget="pdb2"} 1111
|
||||
kube_poddisruptionbudget_annotations{namespace="ns2",poddisruptionbudget="pdb2"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -202,23 +202,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_replicaset_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapReplicaSetFunc(func(d *v1.ReplicaSet) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(d.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -53,8 +53,6 @@ func TestReplicaSetStore(t *testing.T) {
|
|||
# TYPE kube_replicaset_owner gauge
|
||||
# HELP kube_replicaset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# TYPE kube_replicaset_labels gauge
|
||||
# HELP kube_replicaset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_replicaset_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -74,9 +72,6 @@ func TestReplicaSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
},
|
||||
Status: v1.ReplicaSetStatus{
|
||||
Replicas: 5,
|
||||
|
|
@ -98,7 +93,6 @@ func TestReplicaSetStore(t *testing.T) {
|
|||
kube_replicaset_status_ready_replicas{namespace="ns1",replicaset="rs1"} 5
|
||||
kube_replicaset_spec_replicas{namespace="ns1",replicaset="rs1"} 5
|
||||
kube_replicaset_owner{namespace="ns1",owner_is_controller="true",owner_kind="Deployment",owner_name="dp-name",replicaset="rs1"} 1
|
||||
kube_replicaset_annotations{namespace="ns1",replicaset="rs1",annotation_app="example1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -111,10 +105,6 @@ func TestReplicaSetStore(t *testing.T) {
|
|||
"app": "example2",
|
||||
"env": "ex",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
"env": "ex",
|
||||
},
|
||||
},
|
||||
Status: v1.ReplicaSetStatus{
|
||||
Replicas: 0,
|
||||
|
|
@ -135,7 +125,6 @@ func TestReplicaSetStore(t *testing.T) {
|
|||
kube_replicaset_status_ready_replicas{namespace="ns2",replicaset="rs2"} 0
|
||||
kube_replicaset_spec_replicas{namespace="ns2",replicaset="rs2"} 0
|
||||
kube_replicaset_owner{namespace="ns2",owner_is_controller="<none>",owner_kind="<none>",owner_name="<none>",replicaset="rs2"} 1
|
||||
kube_replicaset_annotations{namespace="ns2",replicaset="rs2",annotation_app="example2",annotation_env="ex"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -151,23 +151,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_replicationcontroller_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapReplicationControllerFunc(func(r *v1.ReplicationController) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(r.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,8 +50,6 @@ func TestReplicationControllerStore(t *testing.T) {
|
|||
# TYPE kube_replicationcontroller_status_observed_generation gauge
|
||||
# HELP kube_replicationcontroller_spec_replicas Number of desired pods for a ReplicationController.
|
||||
# TYPE kube_replicationcontroller_spec_replicas gauge
|
||||
# HELP kube_replicationcontroller_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_replicationcontroller_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -61,9 +59,6 @@ func TestReplicationControllerStore(t *testing.T) {
|
|||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
Namespace: "ns1",
|
||||
Generation: 21,
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
},
|
||||
Status: v1.ReplicationControllerStatus{
|
||||
Replicas: 5,
|
||||
|
|
@ -85,7 +80,6 @@ func TestReplicationControllerStore(t *testing.T) {
|
|||
kube_replicationcontroller_status_ready_replicas{namespace="ns1",replicationcontroller="rc1"} 5
|
||||
kube_replicationcontroller_status_available_replicas{namespace="ns1",replicationcontroller="rc1"} 3
|
||||
kube_replicationcontroller_spec_replicas{namespace="ns1",replicationcontroller="rc1"} 5
|
||||
kube_replicationcontroller_annotations{namespace="ns1",replicationcontroller="rc1",annotation_app="example1"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -94,9 +88,6 @@ func TestReplicationControllerStore(t *testing.T) {
|
|||
Name: "rc2",
|
||||
Namespace: "ns2",
|
||||
Generation: 14,
|
||||
Annotations: map[string]string{
|
||||
"app": "rc2",
|
||||
},
|
||||
},
|
||||
Status: v1.ReplicationControllerStatus{
|
||||
Replicas: 0,
|
||||
|
|
@ -117,7 +108,6 @@ func TestReplicationControllerStore(t *testing.T) {
|
|||
kube_replicationcontroller_status_ready_replicas{namespace="ns2",replicationcontroller="rc2"} 0
|
||||
kube_replicationcontroller_status_available_replicas{namespace="ns2",replicationcontroller="rc2"} 0
|
||||
kube_replicationcontroller_spec_replicas{namespace="ns2",replicationcontroller="rc2"} 0
|
||||
kube_replicationcontroller_annotations{namespace="ns2",replicationcontroller="rc2",annotation_app="rc2"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -79,23 +79,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_resourcequota_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapResourceQuotaFunc(func(r *v1.ResourceQuota) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(r.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -34,8 +34,6 @@ func TestResourceQuotaStore(t *testing.T) {
|
|||
# TYPE kube_resourcequota gauge
|
||||
# HELP kube_resourcequota_created Unix creation timestamp
|
||||
# TYPE kube_resourcequota_created gauge
|
||||
# HELP kube_resourcequota_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_resourcequota_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
// Verify populating base metric and that metric for unset fields are skipped.
|
||||
|
|
@ -45,15 +43,11 @@ func TestResourceQuotaStore(t *testing.T) {
|
|||
Name: "quotaTest",
|
||||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
Namespace: "testNS",
|
||||
Annotations: map[string]string{
|
||||
"rq": "rq",
|
||||
},
|
||||
},
|
||||
Status: v1.ResourceQuotaStatus{},
|
||||
},
|
||||
Want: metadata + `
|
||||
kube_resourcequota_created{namespace="testNS",resourcequota="quotaTest"} 1.5e+09
|
||||
kube_resourcequota_annotations{namespace="testNS",resourcequota="quotaTest",annotation_rq="rq"} 1
|
||||
`,
|
||||
},
|
||||
// Verify resource metric.
|
||||
|
|
@ -62,9 +56,6 @@ func TestResourceQuotaStore(t *testing.T) {
|
|||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: "quotaTest",
|
||||
Namespace: "testNS",
|
||||
Annotations: map[string]string{
|
||||
"RQ": "RQ",
|
||||
},
|
||||
},
|
||||
Spec: v1.ResourceQuotaSpec{
|
||||
Hard: v1.ResourceList{
|
||||
|
|
@ -138,7 +129,6 @@ func TestResourceQuotaStore(t *testing.T) {
|
|||
kube_resourcequota{namespace="testNS",resource="services.nodeports",resourcequota="quotaTest",type="used"} 1
|
||||
kube_resourcequota{namespace="testNS",resource="storage",resourcequota="quotaTest",type="hard"} 1e+10
|
||||
kube_resourcequota{namespace="testNS",resource="storage",resourcequota="quotaTest",type="used"} 9e+09
|
||||
kube_resourcequota_annotations{namespace="testNS",resourcequota="quotaTest",annotation_RQ="RQ"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -115,23 +115,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_secret_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapSecretFunc(func(s *v1.Secret) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(s.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -92,20 +92,15 @@ func TestSecretStore(t *testing.T) {
|
|||
CreationTimestamp: metav1StartTime,
|
||||
Labels: map[string]string{"test-3": "test-3"},
|
||||
ResourceVersion: "abcdef",
|
||||
Annotations: map[string]string{
|
||||
"test-3": "test-3",
|
||||
},
|
||||
},
|
||||
Type: v1.SecretTypeDockercfg,
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_secret_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_secret_created Unix creation timestamp
|
||||
# HELP kube_secret_info Information about secret.
|
||||
# HELP kube_secret_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_secret_metadata_resource_version Resource version representing a specific version of secret.
|
||||
# HELP kube_secret_type Type about secret.
|
||||
# TYPE kube_secret_annotations gauge
|
||||
# TYPE kube_secret_created gauge
|
||||
# TYPE kube_secret_info gauge
|
||||
# TYPE kube_secret_labels gauge
|
||||
|
|
@ -116,9 +111,8 @@ func TestSecretStore(t *testing.T) {
|
|||
kube_secret_created{namespace="ns3",secret="secret3"} 1.501569018e+09
|
||||
kube_secret_metadata_resource_version{namespace="ns3",resource_version="abcdef",secret="secret3"} 1
|
||||
kube_secret_labels{label_test_3="test-3",namespace="ns3",secret="secret3"} 1
|
||||
kube_secret_annotations{namespace="ns3",secret="secret3",annotation_test_3="test-3"} 1
|
||||
`,
|
||||
MetricNames: []string{"kube_secret_info", "kube_secret_metadata_resource_version", "kube_secret_created", "kube_secret_labels", "kube_secret_type", "kube_secret_annotations"},
|
||||
MetricNames: []string{"kube_secret_info", "kube_secret_metadata_resource_version", "kube_secret_created", "kube_secret_labels", "kube_secret_type"},
|
||||
},
|
||||
}
|
||||
for i, c := range cases {
|
||||
|
|
|
|||
|
|
@ -143,23 +143,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_service_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapSvcFunc(func(s *v1.Service) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(s.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -41,8 +41,6 @@ func TestServiceStore(t *testing.T) {
|
|||
# TYPE kube_service_spec_external_ip gauge
|
||||
# HELP kube_service_status_load_balancer_ingress Service load balancer ingress status
|
||||
# TYPE kube_service_status_load_balancer_ingress gauge
|
||||
# HELP kube_service_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# TYPE kube_service_annotations gauge
|
||||
`
|
||||
cases := []generateMetricsTestCase{
|
||||
{
|
||||
|
|
@ -54,9 +52,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
ClusterIP: "1.2.3.4",
|
||||
|
|
@ -64,12 +59,10 @@ func TestServiceStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_service_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_service_created Unix creation timestamp
|
||||
# HELP kube_service_info Information about service.
|
||||
# HELP kube_service_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_service_spec_type Type about service.
|
||||
# TYPE kube_service_annotations gauge
|
||||
# TYPE kube_service_created gauge
|
||||
# TYPE kube_service_info gauge
|
||||
# TYPE kube_service_labels gauge
|
||||
|
|
@ -78,14 +71,12 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_info{cluster_ip="1.2.3.4",external_name="",load_balancer_ip="",namespace="default",service="test-service1"} 1
|
||||
kube_service_labels{label_app="example1",namespace="default",service="test-service1"} 1
|
||||
kube_service_spec_type{namespace="default",service="test-service1",type="ClusterIP"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service1",annotation_app="example1"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_service_created",
|
||||
"kube_service_info",
|
||||
"kube_service_labels",
|
||||
"kube_service_spec_type",
|
||||
"kube_service_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -98,9 +89,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
ClusterIP: "1.2.3.5",
|
||||
|
|
@ -112,7 +100,6 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_info{cluster_ip="1.2.3.5",external_name="",load_balancer_ip="",namespace="default",service="test-service2"} 1
|
||||
kube_service_labels{label_app="example2",namespace="default",service="test-service2"} 1
|
||||
kube_service_spec_type{namespace="default",service="test-service2",type="NodePort"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service2",annotation_app="example2"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -124,9 +111,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
ClusterIP: "1.2.3.6",
|
||||
|
|
@ -139,8 +123,6 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_info{cluster_ip="1.2.3.6",external_name="",load_balancer_ip="1.2.3.7",namespace="default",service="test-service3"} 1
|
||||
kube_service_labels{label_app="example3",namespace="default",service="test-service3"} 1
|
||||
kube_service_spec_type{namespace="default",service="test-service3",type="LoadBalancer"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service3",annotation_app="example3"} 1
|
||||
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -152,9 +134,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example4",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example4",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
ExternalName: "www.example.com",
|
||||
|
|
@ -166,7 +145,6 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_info{cluster_ip="",external_name="www.example.com",load_balancer_ip="",namespace="default",service="test-service4"} 1
|
||||
kube_service_labels{label_app="example4",namespace="default",service="test-service4"} 1
|
||||
kube_service_spec_type{namespace="default",service="test-service4",type="ExternalName"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service4",annotation_app="example4"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -178,9 +156,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example5",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example5",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
Type: v1.ServiceTypeLoadBalancer,
|
||||
|
|
@ -202,7 +177,6 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_labels{label_app="example5",namespace="default",service="test-service5"} 1
|
||||
kube_service_spec_type{namespace="default",service="test-service5",type="LoadBalancer"} 1
|
||||
kube_service_status_load_balancer_ingress{hostname="www.example.com",ip="1.2.3.8",namespace="default",service="test-service5"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service5",annotation_app="example5"} 1
|
||||
`,
|
||||
},
|
||||
{
|
||||
|
|
@ -214,9 +188,6 @@ func TestServiceStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example6",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example6",
|
||||
},
|
||||
},
|
||||
Spec: v1.ServiceSpec{
|
||||
Type: v1.ServiceTypeClusterIP,
|
||||
|
|
@ -233,7 +204,6 @@ func TestServiceStore(t *testing.T) {
|
|||
kube_service_spec_type{namespace="default",service="test-service6",type="ClusterIP"} 1
|
||||
kube_service_spec_external_ip{external_ip="1.2.3.9",namespace="default",service="test-service6"} 1
|
||||
kube_service_spec_external_ip{external_ip="1.2.3.10",namespace="default",service="test-service6"} 1
|
||||
kube_service_annotations{namespace="default",service="test-service6",annotation_app="example6"} 1
|
||||
`,
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -202,23 +202,6 @@ var (
|
|||
}
|
||||
}),
|
||||
},
|
||||
{
|
||||
Name: "kube_statefulset_annotations",
|
||||
Type: metric.Gauge,
|
||||
Help: "Kubernetes annotations converted to Prometheus labels.",
|
||||
GenerateFunc: wrapStatefulSetFunc(func(s *v1.StatefulSet) *metric.Family {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(s.Annotations)
|
||||
return &metric.Family{
|
||||
Metrics: []*metric.Metric{
|
||||
{
|
||||
LabelKeys: annotationKeys,
|
||||
LabelValues: annotationValues,
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
}
|
||||
}),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -45,9 +45,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example1",
|
||||
},
|
||||
Generation: 3,
|
||||
},
|
||||
Spec: v1.StatefulSetSpec{
|
||||
|
|
@ -62,7 +59,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_statefulset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_statefulset_created Unix creation timestamp
|
||||
# HELP kube_statefulset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_statefulset_metadata_generation Sequence number representing a specific generation of the desired state for the StatefulSet.
|
||||
|
|
@ -74,7 +70,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
# HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_update_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
|
||||
# TYPE kube_statefulset_annotations gauge
|
||||
# TYPE kube_statefulset_created gauge
|
||||
# TYPE kube_statefulset_labels gauge
|
||||
# TYPE kube_statefulset_metadata_generation gauge
|
||||
|
|
@ -97,7 +92,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
kube_statefulset_replicas{namespace="ns1",statefulset="statefulset1"} 3
|
||||
kube_statefulset_metadata_generation{namespace="ns1",statefulset="statefulset1"} 3
|
||||
kube_statefulset_labels{label_app="example1",namespace="ns1",statefulset="statefulset1"} 1
|
||||
kube_statefulset_annotations{namespace="ns1",statefulset="statefulset1",annotation_app="example1"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_statefulset_created",
|
||||
|
|
@ -111,7 +105,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
"kube_statefulset_status_replicas_updated",
|
||||
"kube_statefulset_status_update_revision",
|
||||
"kube_statefulset_status_current_revision",
|
||||
"kube_statefulset_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -122,9 +115,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example2",
|
||||
},
|
||||
Generation: 21,
|
||||
},
|
||||
Spec: v1.StatefulSetSpec{
|
||||
|
|
@ -142,7 +132,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_statefulset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_statefulset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_statefulset_metadata_generation Sequence number representing a specific generation of the desired state for the StatefulSet.
|
||||
# HELP kube_statefulset_replicas Number of desired pods for a StatefulSet.
|
||||
|
|
@ -153,7 +142,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
# HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_update_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
|
||||
# TYPE kube_statefulset_annotations gauge
|
||||
# TYPE kube_statefulset_labels gauge
|
||||
# TYPE kube_statefulset_metadata_generation gauge
|
||||
# TYPE kube_statefulset_replicas gauge
|
||||
|
|
@ -174,7 +162,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
kube_statefulset_metadata_generation{namespace="ns2",statefulset="statefulset2"} 21
|
||||
kube_statefulset_labels{label_app="example2",namespace="ns2",statefulset="statefulset2"} 1
|
||||
kube_statefulset_status_current_revision{namespace="ns2",revision="cr2",statefulset="statefulset2"} 1
|
||||
kube_statefulset_annotations{namespace="ns2",statefulset="statefulset2",annotation_app="example2"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_statefulset_labels",
|
||||
|
|
@ -187,7 +174,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
"kube_statefulset_status_replicas_updated",
|
||||
"kube_statefulset_status_update_revision",
|
||||
"kube_statefulset_status_current_revision",
|
||||
"kube_statefulset_annotations",
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -198,9 +184,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
Labels: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
Annotations: map[string]string{
|
||||
"app": "example3",
|
||||
},
|
||||
Generation: 36,
|
||||
},
|
||||
Spec: v1.StatefulSetSpec{
|
||||
|
|
@ -215,7 +198,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
},
|
||||
},
|
||||
Want: `
|
||||
# HELP kube_statefulset_annotations Kubernetes annotations converted to Prometheus labels.
|
||||
# HELP kube_statefulset_labels Kubernetes labels converted to Prometheus labels.
|
||||
# HELP kube_statefulset_metadata_generation Sequence number representing a specific generation of the desired state for the StatefulSet.
|
||||
# HELP kube_statefulset_replicas Number of desired pods for a StatefulSet.
|
||||
|
|
@ -225,7 +207,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
# HELP kube_statefulset_status_replicas_ready The number of ready replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_replicas_updated The number of updated replicas per StatefulSet.
|
||||
# HELP kube_statefulset_status_update_revision Indicates the version of the StatefulSet used to generate Pods in the sequence [replicas-updatedReplicas,replicas)
|
||||
# TYPE kube_statefulset_annotations gauge
|
||||
# TYPE kube_statefulset_labels gauge
|
||||
# TYPE kube_statefulset_metadata_generation gauge
|
||||
# TYPE kube_statefulset_replicas gauge
|
||||
|
|
@ -244,7 +225,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
kube_statefulset_metadata_generation{namespace="ns3",statefulset="statefulset3"} 36
|
||||
kube_statefulset_labels{label_app="example3",namespace="ns3",statefulset="statefulset3"} 1
|
||||
kube_statefulset_status_current_revision{namespace="ns3",revision="cr3",statefulset="statefulset3"} 1
|
||||
kube_statefulset_annotations{namespace="ns3",statefulset="statefulset3",annotation_app="example3"} 1
|
||||
`,
|
||||
MetricNames: []string{
|
||||
"kube_statefulset_labels",
|
||||
|
|
@ -256,7 +236,6 @@ func TestStatefulSetStore(t *testing.T) {
|
|||
"kube_statefulset_status_replicas_updated",
|
||||
"kube_statefulset_status_update_revision",
|
||||
"kube_statefulset_status_current_revision",
|
||||
"kube_statefulset_annotations",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -74,21 +74,6 @@ func kubeLabelsToPrometheusLabels(labels map[string]string) ([]string, []string)
|
|||
return labelKeys, labelValues
|
||||
}
|
||||
|
||||
func kubeAnnotationsToPrometheusLabels(annotations map[string]string) ([]string, []string) {
|
||||
annotationKeys := make([]string, 0, len(annotations))
|
||||
for k := range annotations {
|
||||
annotationKeys = append(annotationKeys, k)
|
||||
}
|
||||
sort.Strings(annotationKeys)
|
||||
|
||||
annotationValues := make([]string, 0, len(annotations))
|
||||
for i, k := range annotationKeys {
|
||||
annotationKeys[i] = "annotation_" + sanitizeLabelName(k)
|
||||
annotationValues = append(annotationValues, annotations[k])
|
||||
}
|
||||
return annotationKeys, annotationValues
|
||||
}
|
||||
|
||||
func sanitizeLabelName(s string) string {
|
||||
return invalidLabelCharRE.ReplaceAllString(s, "_")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -198,67 +198,3 @@ func TestKubeLabelsToPrometheusLabels(t *testing.T) {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
func TestKubeAnnotationsToPrometheusLabels(t *testing.T) {
|
||||
testCases := []struct {
|
||||
kubeAnnotations map[string]string
|
||||
expectKeys []string
|
||||
expectValues []string
|
||||
}{
|
||||
{
|
||||
kubeAnnotations: map[string]string{
|
||||
"app1": "normal",
|
||||
},
|
||||
expectKeys: []string{"annotation_app1"},
|
||||
expectValues: []string{"normal"},
|
||||
},
|
||||
{
|
||||
kubeAnnotations: map[string]string{
|
||||
"0_app3": "starts_with_digit",
|
||||
},
|
||||
expectKeys: []string{"annotation_0_app3"},
|
||||
expectValues: []string{"starts_with_digit"},
|
||||
},
|
||||
{
|
||||
kubeAnnotations: map[string]string{
|
||||
"": "empty",
|
||||
},
|
||||
expectKeys: []string{"annotation_"},
|
||||
expectValues: []string{"empty"},
|
||||
},
|
||||
{
|
||||
kubeAnnotations: map[string]string{
|
||||
"$app4": "special_char",
|
||||
},
|
||||
expectKeys: []string{"annotation__app4"},
|
||||
expectValues: []string{"special_char"},
|
||||
},
|
||||
{
|
||||
kubeAnnotations: map[string]string{
|
||||
"_app5": "starts_with_underscore",
|
||||
},
|
||||
expectKeys: []string{"annotation__app5"},
|
||||
expectValues: []string{"starts_with_underscore"},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(fmt.Sprintf("kubeannotations input=%v , expected prometheus keys=%v, expected prometheus values=%v", tc.kubeAnnotations, tc.expectKeys, tc.expectValues), func(t *testing.T) {
|
||||
annotationKeys, annotationValues := kubeAnnotationsToPrometheusLabels(tc.kubeAnnotations)
|
||||
if len(annotationKeys) != len(tc.expectKeys) {
|
||||
t.Errorf("Got Prometheus label keys with len %d but expected %d", len(annotationKeys), len(tc.expectKeys))
|
||||
}
|
||||
|
||||
if len(annotationValues) != len(tc.expectValues) {
|
||||
t.Errorf("Got Prometheus label values with len %d but expected %d", len(annotationValues), len(tc.expectValues))
|
||||
}
|
||||
|
||||
for i := range tc.expectKeys {
|
||||
if !(tc.expectKeys[i] == annotationKeys[i] && tc.expectValues[i] == annotationValues[i]) {
|
||||
t.Errorf("Got Prometheus label %q: %q but expected %q: %q", annotationKeys[i], annotationValues[i], tc.expectKeys[i], tc.expectValues[i])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ spec:
|
|||
serviceAccountName: kube-state-metrics
|
||||
containers:
|
||||
- name: kube-state-metrics
|
||||
image: quay.io/coreos/kube-state-metrics:v1.7.1
|
||||
image: quay.io/coreos/kube-state-metrics:v1.7.2
|
||||
ports:
|
||||
- name: http-metrics
|
||||
containerPort: 8080
|
||||
|
|
|
|||
|
|
@ -383,9 +383,6 @@ func pod(client *fake.Clientset, index int) error {
|
|||
CreationTimestamp: metav1.Time{Time: time.Unix(1500000000, 0)},
|
||||
Namespace: "default",
|
||||
UID: types.UID("abc-" + i),
|
||||
Annotations: map[string]string{
|
||||
"pod": "pod",
|
||||
},
|
||||
},
|
||||
Spec: v1.PodSpec{
|
||||
RestartPolicy: v1.RestartPolicyAlways,
|
||||
|
|
|
|||
Loading…
Reference in New Issue