github.com/banzaicloud/operator-tools@v0.28.10/pkg/prometheus/servicemonitor.go (about) 1 // Copyright © 2020 Banzai Cloud 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package prometheus 16 17 import ( 18 v1 "k8s.io/api/core/v1" 19 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 20 "k8s.io/apimachinery/pkg/runtime/schema" 21 "k8s.io/apimachinery/pkg/util/intstr" 22 "sigs.k8s.io/controller-runtime/pkg/scheme" 23 ) 24 25 const ( 26 ServiceMonitorsKind = "ServiceMonitor" 27 ServiceMonitorName = "servicemonitors" 28 ServiceMonitorKindKey = "servicemonitor" 29 ) 30 31 var ( 32 // GroupVersion is group version used to register these objects 33 GroupVersion = schema.GroupVersion{Group: "monitoring.coreos.com", Version: "v1"} 34 35 // SchemeBuilder is used to add go types to the GroupVersionKind scheme 36 SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} 37 38 // AddToScheme adds the types in this group-version to the given scheme. 39 AddToScheme = SchemeBuilder.AddToScheme 40 ) 41 42 func init() { 43 SchemeBuilder.Register(&ServiceMonitor{}, &ServiceMonitorList{}) 44 } 45 46 // +kubebuilder:object:root=true 47 48 type ServiceMonitor struct { 49 metav1.TypeMeta `json:",inline"` 50 // Standard object’s metadata. More info: 51 // https://github.com/kubernetes/community/blob/master/contributors/devel/api-conventions.md#metadata 52 // +k8s:openapi-gen=false 53 metav1.ObjectMeta `json:"metadata,omitempty"` 54 // Specification of desired Service selection for target discrovery by 55 // Prometheus. 56 Spec ServiceMonitorSpec `json:"spec"` 57 } 58 59 // +kubebuilder:object:root=true 60 61 type ServiceMonitorList struct { 62 metav1.TypeMeta `json:",inline"` 63 // Standard list metadata 64 // More info: https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#metadata 65 metav1.ListMeta `json:"metadata,omitempty"` 66 // List of ServiceMonitors 67 Items []*ServiceMonitor `json:"items"` 68 } 69 70 // +kubebuilder:object:generate=true 71 72 type ServiceMonitorSpec struct { 73 // The label to use to retrieve the job name from. 74 JobLabel string `json:"jobLabel,omitempty"` 75 // TargetLabels transfers labels on the Kubernetes Service onto the target. 76 TargetLabels []string `json:"targetLabels,omitempty"` 77 // PodTargetLabels transfers labels on the Kubernetes Pod onto the target. 78 PodTargetLabels []string `json:"podTargetLabels,omitempty"` 79 // A list of endpoints allowed as part of this ServiceMonitor. 80 Endpoints []Endpoint `json:"endpoints"` 81 // Selector to select Endpoints objects. 82 Selector metav1.LabelSelector `json:"selector"` 83 // Selector to select which namespaces the Endpoints objects are discovered from. 84 NamespaceSelector NamespaceSelector `json:"namespaceSelector,omitempty"` 85 // SampleLimit defines per-scrape limit on number of scraped samples that will be accepted. 86 SampleLimit uint64 `json:"sampleLimit,omitempty"` 87 } 88 89 // +kubebuilder:object:generate=true 90 91 type Endpoint struct { 92 // Name of the service port this endpoint refers to. Mutually exclusive with targetPort. 93 Port string `json:"port,omitempty"` 94 // Name or number of the target port of the endpoint. Mutually exclusive with port. 95 TargetPort *intstr.IntOrString `json:"targetPort,omitempty"` 96 // HTTP path to scrape for metrics. 97 Path string `json:"path,omitempty"` 98 // HTTP scheme to use for scraping. 99 Scheme string `json:"scheme,omitempty"` 100 // Optional HTTP URL parameters 101 Params map[string][]string `json:"params,omitempty"` 102 // Interval at which metrics should be scraped 103 Interval string `json:"interval,omitempty"` 104 // Timeout after which the scrape is ended 105 ScrapeTimeout string `json:"scrapeTimeout,omitempty"` 106 // Certificate configuration to use when scraping the endpoint 107 TLSConfig *TLSConfig `json:"tlsConfig,omitempty"` 108 // File to read bearer token for scraping targets. 109 BearerTokenFile string `json:"bearerTokenFile,omitempty"` 110 // HonorLabels chooses the metric's labels on collisions with target labels. 111 HonorLabels bool `json:"honorLabels,omitempty"` 112 // BasicAuth allow an endpoint to authenticate over basic authentication 113 // More info: https://prometheus.io/docs/operating/configuration/#endpoints 114 BasicAuth *BasicAuth `json:"basicAuth,omitempty"` 115 // MetricRelabelConfigs to apply to samples before ingestion. 116 MetricRelabelConfigs []*RelabelConfig `json:"metricRelabelings,omitempty"` 117 // RelabelConfigs to apply to samples before ingestion. 118 // More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#<relabel_config> 119 RelabelConfigs []*RelabelConfig `json:"relabelings,omitempty"` 120 // ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint. 121 ProxyURL *string `json:"proxyUrl,omitempty"` 122 } 123 124 // +kubebuilder:object:generate=true 125 126 type TLSConfig struct { 127 // The CA cert to use for the targets. 128 CAFile string `json:"caFile,omitempty"` 129 // The client cert file for the targets. 130 CertFile string `json:"certFile,omitempty"` 131 // The client key file for the targets. 132 KeyFile string `json:"keyFile,omitempty"` 133 // Used to verify the hostname for the targets. 134 ServerName string `json:"serverName,omitempty"` 135 // Disable target certificate validation. 136 InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"` 137 } 138 139 // +kubebuilder:object:generate=true 140 141 type BasicAuth struct { 142 // The secret that contains the username for authenticate 143 Username v1.SecretKeySelector `json:"username,omitempty"` 144 // The secret that contains the password for authenticate 145 Password v1.SecretKeySelector `json:"password,omitempty"` 146 } 147 148 // +kubebuilder:object:generate=true 149 150 type RelabelConfig struct { 151 //The source labels select values from existing labels. Their content is concatenated 152 //using the configured separator and matched against the configured regular expression 153 //for the replace, keep, and drop actions. 154 SourceLabels []string `json:"sourceLabels,omitempty"` 155 //Separator placed between concatenated source label values. default is ';'. 156 Separator string `json:"separator,omitempty"` 157 //Label to which the resulting value is written in a replace action. 158 //It is mandatory for replace actions. Regex capture groups are available. 159 TargetLabel string `json:"targetLabel,omitempty"` 160 //Regular expression against which the extracted value is matched. defailt is '(.*)' 161 Regex string `json:"regex,omitempty"` 162 // Modulus to take of the hash of the source label values. 163 Modulus uint64 `json:"modulus,omitempty"` 164 //Replacement value against which a regex replace is performed if the 165 //regular expression matches. Regex capture groups are available. Default is '$1' 166 Replacement string `json:"replacement,omitempty"` 167 // Action to perform based on regex matching. Default is 'replace' 168 Action string `json:"action,omitempty"` 169 } 170 171 // +kubebuilder:object:generate=true 172 173 type NamespaceSelector struct { 174 // Boolean describing whether all namespaces are selected in contrast to a 175 // list restricting them. 176 Any bool `json:"any,omitempty"` 177 // List of namespace names. 178 MatchNames []string `json:"matchNames,omitempty"` 179 }