mirror of
https://github.com/carlosedp/cluster-monitoring.git
synced 2024-12-18 19:05:44 +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
|
@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
|
deploy: manifests ## Rebuilds manifests and deploy to configured cluster
|
||||||
kubectl apply -f ./manifests/
|
echo "Deploying stack setup manifests..."
|
||||||
echo "Will wait 40 seconds to reapply manifests"
|
kubectl apply -f ./manifests/setup/
|
||||||
sleep 40
|
echo "Will wait 10 seconds to deploy the additional manifests.."
|
||||||
|
sleep 10
|
||||||
kubectl apply -f ./manifests/
|
kubectl apply -f ./manifests/
|
||||||
|
|
||||||
teardown: ## Delete all monitoring stack resources from configured cluster
|
teardown: ## Delete all monitoring stack resources from configured cluster
|
||||||
kubectl delete -f ./manifests/
|
kubectl delete -f ./manifests/
|
||||||
|
kubectl delete -f ./manifests/setup/
|
||||||
|
|
||||||
tar: manifests ## Generates a .tar.gz from manifests dir
|
tar: manifests ## Generates a .tar.gz from manifests dir
|
||||||
rm -rf manifests.tar.gz
|
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
|
// Additional modules are loaded dynamically from vars.jsonnet
|
||||||
+ utils.join_objects([module.file for module in vars.modules if module.enabled])
|
+ utils.join_objects([module.file for module in vars.modules if module.enabled])
|
||||||
// Load K3s customized modules
|
// 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
|
// Base stack is loaded at the end to override previous definitions
|
||||||
+ (import 'base_operator_stack.jsonnet')
|
+ (import 'base_operator_stack.jsonnet')
|
||||||
// Load image versions last to override default from modules
|
// Load image versions last to override default from modules
|
||||||
+ (import 'image_sources_versions.jsonnet');
|
+ (import 'image_sources_versions.jsonnet');
|
||||||
|
|
||||||
|
|
||||||
// Generate core modules
|
// 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
|
// 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))
|
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
|
// 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 k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_config+:: {
|
_config+:: {
|
@ -1,5 +1,5 @@
|
|||||||
|
local utils = import '../utils.libsonnet';
|
||||||
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_config+:: {
|
_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 k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
local vars = import 'vars.jsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
prometheus+:: {
|
prometheus+:: {
|
@ -1,5 +1,5 @@
|
|||||||
|
local utils = import '../utils.libsonnet';
|
||||||
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_config+:: {
|
_config+:: {
|
@ -1,5 +1,5 @@
|
|||||||
|
local utils = import '../utils.libsonnet';
|
||||||
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_config+:: {
|
_config+:: {
|
@ -1,5 +1,5 @@
|
|||||||
|
local utils = import '../utils.libsonnet';
|
||||||
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
|
||||||
local utils = import 'utils.libsonnet';
|
|
||||||
|
|
||||||
{
|
{
|
||||||
_config+:: {
|
_config+:: {
|
@ -17,7 +17,7 @@ set -o pipefail
|
|||||||
|
|
||||||
# Make sure to start with a clean 'manifests' dir
|
# Make sure to start with a clean 'manifests' dir
|
||||||
rm -rf manifests
|
rm -rf manifests
|
||||||
mkdir manifests
|
mkdir -p manifests/setup
|
||||||
|
|
||||||
# optional, but we would like to generate yaml, not json
|
# 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 {}' -- {}
|
$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.
|
// After deployment, run the create_gmail_auth.sh script from scripts dir.
|
||||||
name: 'smtpRelay',
|
name: 'smtpRelay',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'smtp_relay.jsonnet',
|
file: import 'modules/smtp_relay.jsonnet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'armExporter',
|
name: 'armExporter',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'arm_exporter.jsonnet',
|
file: import 'modules/arm_exporter.jsonnet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'upsExporter',
|
name: 'upsExporter',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'ups_exporter.jsonnet',
|
file: import 'modules/ups_exporter.jsonnet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'metallbExporter',
|
name: 'metallbExporter',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'metallb.jsonnet',
|
file: import 'modules/metallb.jsonnet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'traefikExporter',
|
name: 'traefikExporter',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'traefik.jsonnet',
|
file: import 'modules/traefik.jsonnet',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'elasticExporter',
|
name: 'elasticExporter',
|
||||||
enabled: false,
|
enabled: false,
|
||||||
file: import 'elasticsearch_exporter.jsonnet',
|
file: import 'modules/elasticsearch_exporter.jsonnet',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user