alloy: clustering: enabled: true configMap: content: |- logging { level = "info" format = "logfmt" } discovery.kubernetes "pods" { role = "pod" } discovery.kubernetes "nodes" { role = "node" } discovery.relabel "pods" { targets = discovery.kubernetes.pods.targets rule { source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_label_app_kubernetes_io_name", "__meta_kubernetes_pod_container_name"] separator = "/" target_label = "deployment_name" action = "replace" } } loki.source.kubernetes "pods" { targets = discovery.relabel.pods.output forward_to = [loki.process.process.receiver] } loki.process "process" { forward_to = [loki.write.loki.receiver] stage.drop { older_than = "1h" drop_counter_reason = "too old" } stage.match { selector = "{instance=~\".*\"}" stage.json { expressions = { level = "\"level\"", } } stage.labels { values = { level = "level", } } } stage.label_drop { values = [ "job", "service_name" ] } } loki.write "loki" { endpoint { url = "http://grafana-loki-distributor:3100/loki/api/v1/push" } } discovery.relabel "metrics" { targets = discovery.kubernetes.pods.targets rule { source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_port"] target_label = "__meta_kubernetes_pod_container_port_number" action = "keepequal" } rule { source_labels = ["__meta_kubernetes_pod_container_port_number"] regex = "" action = "drop" } rule { source_labels = ["__meta_kubernetes_pod_annotation_prometheus_io_path",] target_label = "__metrics_path__" separator = "" action = "replace" } } prometheus.scrape "metrics" { clustering { enabled = true } targets = discovery.relabel.metrics.output forward_to = [prometheus.remote_write.metrics.receiver] scrape_interval = "30s" } discovery.relabel "pods_metrics" { targets = discovery.kubernetes.nodes.targets rule { replacement = "kubernetes.default.svc:443" target_label = "__address__" } rule { regex = "(.+)" replacement = "/api/v1/nodes/$1/proxy/metrics/cadvisor" source_labels = ["__meta_kubernetes_node_name"] target_label = "__metrics_path__" } } prometheus.scrape "pods_metrics" { clustering { enabled = true } targets = discovery.relabel.pods_metrics.output job_name = "integrations/kubernetes/kubelet" scheme = "https" honor_labels = true forward_to = [prometheus.remote_write.metrics.receiver] bearer_token_file = "/run/secrets/kubernetes.io/serviceaccount/token" tls_config { insecure_skip_verify = true server_name = "kubernetes" } scrape_interval = "30s" } prometheus.exporter.unix "os_metrics" { } prometheus.scrape "os_metrics" { clustering { enabled = true } targets = prometheus.exporter.unix.os_metrics.targets forward_to = [prometheus.remote_write.metrics.receiver] scrape_interval = "30s" } discovery.kubernetes "kube_state_metrics" { role = "endpoints" selectors { role = "endpoints" label = "app.kubernetes.io/name=kube-state-metrics" } namespaces { names = ["grafana"] } } discovery.relabel "kube_state_metrics" { targets = discovery.kubernetes.kube_state_metrics.targets // only keep targets with a matching port name rule { source_labels = ["__meta_kubernetes_endpoint_port_name"] regex = "http" action = "keep" } rule { action = "replace" replacement = "kubernetes" target_label = "source" } } prometheus.scrape "kube_state_metrics" { targets = discovery.relabel.kube_state_metrics.output job_name = "integrations/kubernetes/kube-state-metrics" scrape_interval = "30s" scheme = "http" bearer_token_file = "" tls_config { insecure_skip_verify = true } clustering { enabled = true } forward_to = [prometheus.relabel.kube_state_metrics.receiver] } prometheus.relabel "kube_state_metrics" { max_cache_size = 100000 rule { source_labels = ["__name__"] regex = "up|scrape_samples_scraped|kube_configmap_info|kube_configmap_metadata_resource_version|kube_daemonset.*|kube_deployment_metadata_generation|kube_deployment_spec_replicas|kube_deployment_status_condition|kube_deployment_status_observed_generation|kube_deployment_status_replicas_available|kube_deployment_status_replicas_updated|kube_horizontalpodautoscaler_spec_max_replicas|kube_horizontalpodautoscaler_spec_min_replicas|kube_horizontalpodautoscaler_status_current_replicas|kube_horizontalpodautoscaler_status_desired_replicas|kube_job.*|kube_namespace_status_phase|kube_node.*|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_access_mode|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_labels|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_persistentvolumeclaim_status_phase|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_requests|kube_pod_container_status_last_terminated_reason|kube_pod_container_status_restarts_total|kube_pod_container_status_waiting_reason|kube_pod_info|kube_pod_owner|kube_pod_spec_volumes_persistentvolumeclaims_info|kube_pod_start_time|kube_pod_status_phase|kube_pod_status_reason|kube_replicaset.*|kube_resourcequota|kube_secret_metadata_resource_version|kube_statefulset.*" action = "keep" } forward_to = [prometheus.remote_write.metrics.receiver] } prometheus.remote_write "metrics" { endpoint { url = "http://grafana-mimir-nginx/api/v1/push" } } resources: requests: cpu: 1m memory: 5Mi limits: cpu: 1 memory: 400Mi