mirror of
				https://github.com/carlosedp/cluster-monitoring.git
				synced 2025-10-26 10:23:04 +01:00 
			
		
		
		
	Better file organization
This commit is contained in:
		
							parent
							
								
									a1752635cf
								
							
						
					
					
						commit
						80bedf1e20
					
				
							
								
								
									
										8
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
									
									
									
									
								
							| @ -30,13 +30,15 @@ fmt:       ## Formats all jsonnet and libsonnet files (except on vendor dir) | ||||
| 	@find . -name 'vendor' -prune -o -name '*.libsonnet' -o -name '*.jsonnet' -print | xargs -n 1 -- $(JSONNET_FMT) -i | ||||
| 
 | ||||
| deploy: manifests       ## Rebuilds manifests and deploy to configured cluster
 | ||||
| 	kubectl apply -f ./manifests/ | ||||
| 	echo "Will wait 40 seconds to reapply manifests" | ||||
| 	sleep 40 | ||||
| 	echo "Deploying stack setup manifests..." | ||||
| 	kubectl apply -f ./manifests/setup/ | ||||
| 	echo "Will wait 10 seconds to deploy the additional manifests.." | ||||
| 	sleep 10 | ||||
| 	kubectl apply -f ./manifests/ | ||||
| 
 | ||||
| teardown:       ## Delete all monitoring stack resources from configured cluster
 | ||||
| 	kubectl delete -f ./manifests/ | ||||
| 	kubectl delete -f ./manifests/setup/ | ||||
| 
 | ||||
| tar: manifests       ## Generates a .tar.gz from manifests dir
 | ||||
| 	rm -rf manifests.tar.gz | ||||
|  | ||||
| @ -8,18 +8,17 @@ local kp = (import 'kube-prometheus/kube-prometheus.libsonnet') | ||||
|            // Additional modules are loaded dynamically from vars.jsonnet | ||||
|            + utils.join_objects([module.file for module in vars.modules if module.enabled]) | ||||
|            // Load K3s customized modules | ||||
|            + utils.join_objects([m for m in [import 'k3s-overrides.jsonnet'] if vars.k3s.enabled]) | ||||
|            + utils.join_objects([m for m in [import 'modules/k3s-overrides.jsonnet'] if vars.k3s.enabled]) | ||||
|            // Base stack is loaded at the end to override previous definitions | ||||
|            + (import 'base_operator_stack.jsonnet') | ||||
|            // Load image versions last to override default from modules | ||||
|            + (import 'image_sources_versions.jsonnet'); | ||||
| 
 | ||||
| 
 | ||||
| // Generate core modules | ||||
| { ['00namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } | ||||
| { ['setup/0namespace-' + name]: kp.kubePrometheus[name] for name in std.objectFields(kp.kubePrometheus) } | ||||
| // First generate operator resources except the serviceMonitors | ||||
| { | ||||
|   ['0prometheus-operator-' + name]: kp.prometheusOperator[name] | ||||
|   ['setup/prometheus-operator-' + name]: kp.prometheusOperator[name] | ||||
|   for name in std.filter((function(name) name != 'serviceMonitor'), std.objectFields(kp.prometheusOperator)) | ||||
| } | ||||
| // serviceMonitor is separated so that it can be created after the CRDs are ready | ||||
|  | ||||
| @ -0,0 +1,292 @@ | ||||
| { | ||||
|    "apiVersion": "apiextensions.k8s.io/v1beta1", | ||||
|    "kind": "CustomResourceDefinition", | ||||
|    "metadata": { | ||||
|       "annotations": { | ||||
|          "controller-gen.kubebuilder.io/version": "v0.2.4" | ||||
|       }, | ||||
|       "creationTimestamp": null, | ||||
|       "name": "podmonitors.monitoring.coreos.com" | ||||
|    }, | ||||
|    "spec": { | ||||
|       "group": "monitoring.coreos.com", | ||||
|       "names": { | ||||
|          "kind": "PodMonitor", | ||||
|          "listKind": "PodMonitorList", | ||||
|          "plural": "podmonitors", | ||||
|          "singular": "podmonitor" | ||||
|       }, | ||||
|       "scope": "Namespaced", | ||||
|       "validation": { | ||||
|          "openAPIV3Schema": { | ||||
|             "description": "PodMonitor defines monitoring for a set of pods.", | ||||
|             "properties": { | ||||
|                "apiVersion": { | ||||
|                   "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", | ||||
|                   "type": "string" | ||||
|                }, | ||||
|                "kind": { | ||||
|                   "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", | ||||
|                   "type": "string" | ||||
|                }, | ||||
|                "metadata": { | ||||
|                   "type": "object" | ||||
|                }, | ||||
|                "spec": { | ||||
|                   "description": "Specification of desired Pod selection for target discovery by Prometheus.", | ||||
|                   "properties": { | ||||
|                      "jobLabel": { | ||||
|                         "description": "The label to use to retrieve the job name from.", | ||||
|                         "type": "string" | ||||
|                      }, | ||||
|                      "namespaceSelector": { | ||||
|                         "description": "Selector to select which namespaces the Endpoints objects are discovered from.", | ||||
|                         "properties": { | ||||
|                            "any": { | ||||
|                               "description": "Boolean describing whether all namespaces are selected in contrast to a list restricting them.", | ||||
|                               "type": "boolean" | ||||
|                            }, | ||||
|                            "matchNames": { | ||||
|                               "description": "List of namespace names.", | ||||
|                               "items": { | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "type": "array" | ||||
|                            } | ||||
|                         }, | ||||
|                         "type": "object" | ||||
|                      }, | ||||
|                      "podMetricsEndpoints": { | ||||
|                         "description": "A list of endpoints allowed as part of this PodMonitor.", | ||||
|                         "items": { | ||||
|                            "description": "PodMetricsEndpoint defines a scrapeable endpoint of a Kubernetes Pod serving Prometheus metrics.", | ||||
|                            "properties": { | ||||
|                               "honorLabels": { | ||||
|                                  "description": "HonorLabels chooses the metric's labels on collisions with target labels.", | ||||
|                                  "type": "boolean" | ||||
|                               }, | ||||
|                               "honorTimestamps": { | ||||
|                                  "description": "HonorTimestamps controls whether Prometheus respects the timestamps present in scraped data.", | ||||
|                                  "type": "boolean" | ||||
|                               }, | ||||
|                               "interval": { | ||||
|                                  "description": "Interval at which metrics should be scraped", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "metricRelabelings": { | ||||
|                                  "description": "MetricRelabelConfigs to apply to samples before ingestion.", | ||||
|                                  "items": { | ||||
|                                     "description": "RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs", | ||||
|                                     "properties": { | ||||
|                                        "action": { | ||||
|                                           "description": "Action to perform based on regex matching. Default is 'replace'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "modulus": { | ||||
|                                           "description": "Modulus to take of the hash of the source label values.", | ||||
|                                           "format": "int64", | ||||
|                                           "type": "integer" | ||||
|                                        }, | ||||
|                                        "regex": { | ||||
|                                           "description": "Regular expression against which the extracted value is matched. Default is '(.*)'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "replacement": { | ||||
|                                           "description": "Replacement value against which a regex replace is performed if the regular expression matches. Regex capture groups are available. Default is '$1'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "separator": { | ||||
|                                           "description": "Separator placed between concatenated source label values. default is ';'.", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "sourceLabels": { | ||||
|                                           "description": "The source labels select values from existing labels. Their content is concatenated using the configured separator and matched against the configured regular expression for the replace, keep, and drop actions.", | ||||
|                                           "items": { | ||||
|                                              "type": "string" | ||||
|                                           }, | ||||
|                                           "type": "array" | ||||
|                                        }, | ||||
|                                        "targetLabel": { | ||||
|                                           "description": "Label to which the resulting value is written in a replace action. It is mandatory for replace actions. Regex capture groups are available.", | ||||
|                                           "type": "string" | ||||
|                                        } | ||||
|                                     }, | ||||
|                                     "type": "object" | ||||
|                                  }, | ||||
|                                  "type": "array" | ||||
|                               }, | ||||
|                               "params": { | ||||
|                                  "additionalProperties": { | ||||
|                                     "items": { | ||||
|                                        "type": "string" | ||||
|                                     }, | ||||
|                                     "type": "array" | ||||
|                                  }, | ||||
|                                  "description": "Optional HTTP URL parameters", | ||||
|                                  "type": "object" | ||||
|                               }, | ||||
|                               "path": { | ||||
|                                  "description": "HTTP path to scrape for metrics.", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "port": { | ||||
|                                  "description": "Name of the port this endpoint refers to. Mutually exclusive with targetPort.", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "proxyUrl": { | ||||
|                                  "description": "ProxyURL eg http://proxyserver:2195 Directs scrapes to proxy through this endpoint.", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "relabelings": { | ||||
|                                  "description": "RelabelConfigs to apply to samples before ingestion. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config", | ||||
|                                  "items": { | ||||
|                                     "description": "RelabelConfig allows dynamic rewriting of the label set, being applied to samples before ingestion. It defines `<metric_relabel_configs>`-section of Prometheus configuration. More info: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#metric_relabel_configs", | ||||
|                                     "properties": { | ||||
|                                        "action": { | ||||
|                                           "description": "Action to perform based on regex matching. Default is 'replace'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "modulus": { | ||||
|                                           "description": "Modulus to take of the hash of the source label values.", | ||||
|                                           "format": "int64", | ||||
|                                           "type": "integer" | ||||
|                                        }, | ||||
|                                        "regex": { | ||||
|                                           "description": "Regular expression against which the extracted value is matched. Default is '(.*)'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "replacement": { | ||||
|                                           "description": "Replacement value against which a regex replace is performed if the regular expression matches. Regex capture groups are available. Default is '$1'", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "separator": { | ||||
|                                           "description": "Separator placed between concatenated source label values. default is ';'.", | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "sourceLabels": { | ||||
|                                           "description": "The source labels select values from existing labels. Their content is concatenated using the configured separator and matched against the configured regular expression for the replace, keep, and drop actions.", | ||||
|                                           "items": { | ||||
|                                              "type": "string" | ||||
|                                           }, | ||||
|                                           "type": "array" | ||||
|                                        }, | ||||
|                                        "targetLabel": { | ||||
|                                           "description": "Label to which the resulting value is written in a replace action. It is mandatory for replace actions. Regex capture groups are available.", | ||||
|                                           "type": "string" | ||||
|                                        } | ||||
|                                     }, | ||||
|                                     "type": "object" | ||||
|                                  }, | ||||
|                                  "type": "array" | ||||
|                               }, | ||||
|                               "scheme": { | ||||
|                                  "description": "HTTP scheme to use for scraping.", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "scrapeTimeout": { | ||||
|                                  "description": "Timeout after which the scrape is ended", | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "targetPort": { | ||||
|                                  "anyOf": [ | ||||
|                                     { | ||||
|                                        "type": "integer" | ||||
|                                     }, | ||||
|                                     { | ||||
|                                        "type": "string" | ||||
|                                     } | ||||
|                                  ], | ||||
|                                  "description": "Name or number of the target port of the endpoint. Mutually exclusive with port.", | ||||
|                                  "x-kubernetes-int-or-string": true | ||||
|                               } | ||||
|                            }, | ||||
|                            "type": "object" | ||||
|                         }, | ||||
|                         "type": "array" | ||||
|                      }, | ||||
|                      "podTargetLabels": { | ||||
|                         "description": "PodTargetLabels transfers labels on the Kubernetes Pod onto the target.", | ||||
|                         "items": { | ||||
|                            "type": "string" | ||||
|                         }, | ||||
|                         "type": "array" | ||||
|                      }, | ||||
|                      "sampleLimit": { | ||||
|                         "description": "SampleLimit defines per-scrape limit on number of scraped samples that will be accepted.", | ||||
|                         "format": "int64", | ||||
|                         "type": "integer" | ||||
|                      }, | ||||
|                      "selector": { | ||||
|                         "description": "Selector to select Pod objects.", | ||||
|                         "properties": { | ||||
|                            "matchExpressions": { | ||||
|                               "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.", | ||||
|                               "items": { | ||||
|                                  "description": "A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.", | ||||
|                                  "properties": { | ||||
|                                     "key": { | ||||
|                                        "description": "key is the label key that the selector applies to.", | ||||
|                                        "type": "string" | ||||
|                                     }, | ||||
|                                     "operator": { | ||||
|                                        "description": "operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.", | ||||
|                                        "type": "string" | ||||
|                                     }, | ||||
|                                     "values": { | ||||
|                                        "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.", | ||||
|                                        "items": { | ||||
|                                           "type": "string" | ||||
|                                        }, | ||||
|                                        "type": "array" | ||||
|                                     } | ||||
|                                  }, | ||||
|                                  "required": [ | ||||
|                                     "key", | ||||
|                                     "operator" | ||||
|                                  ], | ||||
|                                  "type": "object" | ||||
|                               }, | ||||
|                               "type": "array" | ||||
|                            }, | ||||
|                            "matchLabels": { | ||||
|                               "additionalProperties": { | ||||
|                                  "type": "string" | ||||
|                               }, | ||||
|                               "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \"key\", the operator is \"In\", and the values array contains only \"value\". The requirements are ANDed.", | ||||
|                               "type": "object" | ||||
|                            } | ||||
|                         }, | ||||
|                         "type": "object" | ||||
|                      } | ||||
|                   }, | ||||
|                   "required": [ | ||||
|                      "podMetricsEndpoints", | ||||
|                      "selector" | ||||
|                   ], | ||||
|                   "type": "object" | ||||
|                } | ||||
|             }, | ||||
|             "required": [ | ||||
|                "spec" | ||||
|             ], | ||||
|             "type": "object" | ||||
|          } | ||||
|       }, | ||||
|       "version": "v1", | ||||
|       "versions": [ | ||||
|          { | ||||
|             "name": "v1", | ||||
|             "served": true, | ||||
|             "storage": true | ||||
|          } | ||||
|       ] | ||||
|    }, | ||||
|    "status": { | ||||
|       "acceptedNames": { | ||||
|          "kind": "", | ||||
|          "plural": "" | ||||
|       }, | ||||
|       "conditions": [ ], | ||||
|       "storedVersions": [ ] | ||||
|    } | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -1,5 +1,5 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| 
 | ||||
| { | ||||
|   _config+:: { | ||||
| @ -1,5 +1,5 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| 
 | ||||
| { | ||||
|   _config+:: { | ||||
| @ -1,6 +1,6 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local vars = import '../vars.jsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| local vars = import 'vars.jsonnet'; | ||||
| 
 | ||||
| { | ||||
|   prometheus+:: { | ||||
| @ -1,5 +1,5 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| 
 | ||||
| { | ||||
|   _config+:: { | ||||
| @ -1,5 +1,5 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| 
 | ||||
| { | ||||
|   _config+:: { | ||||
| @ -1,5 +1,5 @@ | ||||
| local utils = import '../utils.libsonnet'; | ||||
| local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet'; | ||||
| local utils = import 'utils.libsonnet'; | ||||
| 
 | ||||
| { | ||||
|   _config+:: { | ||||
| @ -17,7 +17,7 @@ set -o pipefail | ||||
| 
 | ||||
| # Make sure to start with a clean 'manifests' dir | ||||
| rm -rf manifests | ||||
| mkdir manifests | ||||
| mkdir -p manifests/setup | ||||
| 
 | ||||
| # optional, but we would like to generate yaml, not json | ||||
| $JSONNET_BIN -J vendor -m manifests "${1-example.jsonnet}" | xargs -I{} sh -c 'cat {} | $(go env GOPATH)/bin/gojsontoyaml > {}.yaml; rm -f {}' -- {} | ||||
|  | ||||
							
								
								
									
										12
									
								
								vars.jsonnet
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								vars.jsonnet
									
									
									
									
									
								
							| @ -8,32 +8,32 @@ | ||||
|       // After deployment, run the create_gmail_auth.sh script from scripts dir. | ||||
|       name: 'smtpRelay', | ||||
|       enabled: false, | ||||
|       file: import 'smtp_relay.jsonnet', | ||||
|       file: import 'modules/smtp_relay.jsonnet', | ||||
|     }, | ||||
|     { | ||||
|       name: 'armExporter', | ||||
|       enabled: false, | ||||
|       file: import 'arm_exporter.jsonnet', | ||||
|       file: import 'modules/arm_exporter.jsonnet', | ||||
|     }, | ||||
|     { | ||||
|       name: 'upsExporter', | ||||
|       enabled: false, | ||||
|       file: import 'ups_exporter.jsonnet', | ||||
|       file: import 'modules/ups_exporter.jsonnet', | ||||
|     }, | ||||
|     { | ||||
|       name: 'metallbExporter', | ||||
|       enabled: false, | ||||
|       file: import 'metallb.jsonnet', | ||||
|       file: import 'modules/metallb.jsonnet', | ||||
|     }, | ||||
|     { | ||||
|       name: 'traefikExporter', | ||||
|       enabled: false, | ||||
|       file: import 'traefik.jsonnet', | ||||
|       file: import 'modules/traefik.jsonnet', | ||||
|     }, | ||||
|     { | ||||
|       name: 'elasticExporter', | ||||
|       enabled: false, | ||||
|       file: import 'elasticsearch_exporter.jsonnet', | ||||
|       file: import 'modules/elasticsearch_exporter.jsonnet', | ||||
|     }, | ||||
|   ], | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user