From efafa74c95dcbb4318c7540ad608bc9fb9f077c4 Mon Sep 17 00:00:00 2001 From: Pete Wall Date: Thu, 6 Feb 2025 09:46:57 -0600 Subject: [PATCH 1/6] Make a test to show how to use the clusterMetrics feature support the CoreDNS service integration Signed-off-by: Pete Wall --- .../cert-manager}/.rendered/output.yaml | 0 .../deployments/cert-manager.yaml | 0 .../cert-manager}/deployments/grafana.yaml | 0 .../cert-manager}/deployments/prometheus.yaml | 0 .../cert-manager}/deployments/query-test.yaml | 0 .../cert-manager}/values.yaml | 0 .../coredns/.rendered/output.yaml | 2794 +++++++++++++++++ .../coredns/deployments/grafana.yaml | 43 + .../coredns}/deployments/prometheus.yaml | 0 .../coredns/deployments/query-test.yaml | 47 + .../service-integrations/coredns/values.yaml | 17 + .../grafana}/.rendered/output.yaml | 0 .../grafana}/deployments/grafana.yaml | 0 .../grafana}/deployments/loki.yaml | 0 .../grafana}/deployments/prometheus.yaml | 0 .../grafana}/deployments/query-test.yaml | 0 .../grafana}/values.yaml | 0 .../loki}/.rendered/output.yaml | 0 .../loki}/deployments/grafana.yaml | 0 .../loki}/deployments/loki.yaml | 0 .../loki}/deployments/prometheus.yaml | 0 .../loki}/deployments/query-test.yaml | 0 .../loki}/values.yaml | 0 .../mysql}/.rendered/output.yaml | 0 .../mysql}/deployments/grafana.yaml | 0 .../mysql}/deployments/loki.yaml | 0 .../mysql}/deployments/mysql.yaml | 0 .../mysql/deployments/prometheus.yaml | 61 + .../mysql}/deployments/query-test.yaml | 0 .../mysql}/values.yaml | 0 30 files changed, 2962 insertions(+) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/.rendered/output.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/deployments/cert-manager.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/deployments/grafana.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/deployments/prometheus.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/deployments/query-test.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-cert-manager => service-integrations/cert-manager}/values.yaml (100%) create mode 100644 charts/k8s-monitoring/tests/integration/service-integrations/coredns/.rendered/output.yaml create mode 100644 charts/k8s-monitoring/tests/integration/service-integrations/coredns/deployments/grafana.yaml rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/coredns}/deployments/prometheus.yaml (100%) create mode 100644 charts/k8s-monitoring/tests/integration/service-integrations/coredns/deployments/query-test.yaml create mode 100644 charts/k8s-monitoring/tests/integration/service-integrations/coredns/values.yaml rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/.rendered/output.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/deployments/grafana.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/deployments/loki.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/deployments/prometheus.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/deployments/query-test.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-grafana => service-integrations/grafana}/values.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/.rendered/output.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/deployments/grafana.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/deployments/loki.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/deployments/prometheus.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/deployments/query-test.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-loki => service-integrations/loki}/values.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/.rendered/output.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/deployments/grafana.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/deployments/loki.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/deployments/mysql.yaml (100%) create mode 100644 charts/k8s-monitoring/tests/integration/service-integrations/mysql/deployments/prometheus.yaml rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/deployments/query-test.yaml (100%) rename charts/k8s-monitoring/tests/integration/{integration-mysql => service-integrations/mysql}/values.yaml (100%) diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/.rendered/output.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/.rendered/output.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/.rendered/output.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/.rendered/output.yaml diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/cert-manager.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/cert-manager.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/cert-manager.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/cert-manager.yaml diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/grafana.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/grafana.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/grafana.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/grafana.yaml diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/prometheus.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/prometheus.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/prometheus.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/prometheus.yaml diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/query-test.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/query-test.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/deployments/query-test.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/deployments/query-test.yaml diff --git a/charts/k8s-monitoring/tests/integration/integration-cert-manager/values.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/values.yaml similarity index 100% rename from charts/k8s-monitoring/tests/integration/integration-cert-manager/values.yaml rename to charts/k8s-monitoring/tests/integration/service-integrations/cert-manager/values.yaml diff --git a/charts/k8s-monitoring/tests/integration/service-integrations/coredns/.rendered/output.yaml b/charts/k8s-monitoring/tests/integration/service-integrations/coredns/.rendered/output.yaml new file mode 100644 index 000000000..c5ffaed2c --- /dev/null +++ b/charts/k8s-monitoring/tests/integration/service-integrations/coredns/.rendered/output.yaml @@ -0,0 +1,2794 @@ +--- +# Source: k8s-monitoring/charts/alloy-metrics/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: k8smon-alloy-metrics + namespace: default + labels: + helm.sh/chart: alloy-metrics-0.11.0 + app.kubernetes.io/name: alloy-metrics + app.kubernetes.io/instance: k8smon + + app.kubernetes.io/version: "v1.6.1" + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/part-of: alloy + app.kubernetes.io/component: rbac +--- +# Source: k8s-monitoring/charts/clusterMetrics/charts/kube-state-metrics/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +automountServiceAccountToken: true +metadata: + labels: + helm.sh/chart: kube-state-metrics-5.29.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: kube-state-metrics + app.kubernetes.io/name: kube-state-metrics + app.kubernetes.io/instance: k8smon + app.kubernetes.io/version: "2.14.0" + release: k8smon + name: k8smon-kube-state-metrics + namespace: default +--- +# Source: k8s-monitoring/charts/clusterMetrics/charts/node-exporter/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: k8smon-node-exporter + namespace: default + labels: + helm.sh/chart: node-exporter-4.43.1 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: node-exporter + app.kubernetes.io/name: node-exporter + app.kubernetes.io/instance: k8smon + app.kubernetes.io/version: "1.8.2" + release: k8smon +automountServiceAccountToken: false +--- +# Source: k8s-monitoring/charts/clusterMetrics/charts/windows-exporter/templates/serviceaccount.yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: k8smon-windows-exporter + namespace: default + labels: + helm.sh/chart: windows-exporter-0.8.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: windows-exporter + app.kubernetes.io/name: windows-exporter + app.kubernetes.io/instance: k8smon + app.kubernetes.io/version: "0.29.2" + release: k8smon +--- +# Source: k8s-monitoring/charts/clusterMetrics/charts/windows-exporter/templates/config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: k8smon-windows-exporter + namespace: default + labels: + helm.sh/chart: windows-exporter-0.8.0 + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/component: metrics + app.kubernetes.io/part-of: windows-exporter + app.kubernetes.io/name: windows-exporter + app.kubernetes.io/instance: k8smon + app.kubernetes.io/version: "0.29.2" + release: k8smon +data: + config.yml: | + collectors: + enabled: cpu,cs,container,logical_disk,memory,net,os + collector: + service: + services-where: "Name='containerd' or Name='kubelet'" +--- +# Source: k8s-monitoring/templates/alloy-config.yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: k8smon-alloy-metrics + namespace: default +data: + config.alloy: |- + // Destination: localPrometheus (prometheus) + otelcol.exporter.prometheus "localprometheus" { + add_metric_suffixes = true + forward_to = [prometheus.remote_write.localprometheus.receiver] + } + + prometheus.remote_write "localprometheus" { + endpoint { + url = "http://prometheus-server.prometheus.svc:9090/api/v1/write" + headers = { + } + tls_config { + insecure_skip_verify = false + } + send_native_histograms = false + + queue_config { + capacity = 10000 + min_shards = 1 + max_shards = 50 + max_samples_per_send = 2000 + batch_send_deadline = "5s" + min_backoff = "30ms" + max_backoff = "5s" + retry_on_http_429 = true + sample_age_limit = "0s" + } + + write_relabel_config { + source_labels = ["cluster"] + regex = "" + replacement = "coredns-integration-test" + target_label = "cluster" + } + write_relabel_config { + source_labels = ["k8s.cluster.name"] + regex = "" + replacement = "coredns-integration-test" + target_label = "cluster" + } + } + + wal { + truncate_frequency = "2h" + min_keepalive_time = "5m" + max_keepalive_time = "8h" + } + } + // Feature: Cluster Metrics + declare "cluster_metrics" { + argument "metrics_destinations" { + comment = "Must be a list of metric destinations where collected metrics should be forwarded to" + } + + remote.kubernetes.configmap "kubernetes" { + name = "k8smon-alloy-module-kubernetes" + namespace = "default" + } + + import.string "kubernetes" { + content = remote.kubernetes.configmap.kubernetes.data["core_metrics.alloy"] + } + + kubernetes.kubelet "scrape" { + clustering = true + job_label = "integrations/kubernetes/kubelet" + keep_metrics = "up|scrape_samples_scraped|go_goroutines|kubelet_certificate_manager_client_expiration_renew_errors|kubelet_certificate_manager_client_ttl_seconds|kubelet_certificate_manager_server_ttl_seconds|kubelet_cgroup_manager_duration_seconds_bucket|kubelet_cgroup_manager_duration_seconds_count|kubelet_node_config_error|kubelet_node_name|kubelet_pleg_relist_duration_seconds_bucket|kubelet_pleg_relist_duration_seconds_count|kubelet_pleg_relist_interval_seconds_bucket|kubelet_pod_start_duration_seconds_bucket|kubelet_pod_start_duration_seconds_count|kubelet_pod_worker_duration_seconds_bucket|kubelet_pod_worker_duration_seconds_count|kubelet_running_container_count|kubelet_running_containers|kubelet_running_pod_count|kubelet_running_pods|kubelet_runtime_operations_errors_total|kubelet_runtime_operations_total|kubelet_server_expiration_renew_errors|kubelet_volume_stats_available_bytes|kubelet_volume_stats_capacity_bytes|kubelet_volume_stats_inodes|kubelet_volume_stats_inodes_free|kubelet_volume_stats_inodes_used|kubelet_volume_stats_used_bytes|kubernetes_build_info|namespace_workload_pod|process_cpu_seconds_total|process_resident_memory_bytes|rest_client_requests_total|storage_operation_duration_seconds_count|storage_operation_errors_total|volume_manager_total_volumes" + scrape_interval = "60s" + max_cache_size = 100000 + forward_to = argument.metrics_destinations.value + } + + kubernetes.resources "scrape" { + clustering = true + job_label = "integrations/kubernetes/resources" + keep_metrics = "up|scrape_samples_scraped|node_cpu_usage_seconds_total|node_memory_working_set_bytes" + scrape_interval = "60s" + max_cache_size = 100000 + forward_to = argument.metrics_destinations.value + } + + kubernetes.cadvisor "scrape" { + clustering = true + job_label = "integrations/kubernetes/cadvisor" + keep_metrics = "up|scrape_samples_scraped|container_cpu_cfs_periods_total|container_cpu_cfs_throttled_periods_total|container_cpu_usage_seconds_total|container_fs_reads_bytes_total|container_fs_reads_total|container_fs_writes_bytes_total|container_fs_writes_total|container_memory_cache|container_memory_rss|container_memory_swap|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_receive_packets_dropped_total|container_network_receive_packets_total|container_network_transmit_bytes_total|container_network_transmit_packets_dropped_total|container_network_transmit_packets_total|machine_memory_bytes" + scrape_interval = "60s" + max_cache_size = 100000 + forward_to = [prometheus.relabel.cadvisor.receiver] + } + + prometheus.relabel "cadvisor" { + max_cache_size = 100000 + // Drop empty container labels, addressing https://github.com/google/cadvisor/issues/2688 + rule { + source_labels = ["__name__","container"] + separator = "@" + regex = "(container_cpu_.*|container_fs_.*|container_memory_.*)@" + action = "drop" + } + // Drop empty image labels, addressing https://github.com/google/cadvisor/issues/2688 + rule { + source_labels = ["__name__","image"] + separator = "@" + regex = "(container_cpu_.*|container_fs_.*|container_memory_.*|container_network_.*)@" + action = "drop" + } + // Normalizing unimportant labels (not deleting to continue satisfying