@@ -4,6 +4,7 @@ package agent
44import (
55 "context"
66 "fmt"
7+ "os"
78 "sync"
89 "time"
910
@@ -123,6 +124,16 @@ func New(cfg *config.Config, logger *zap.Logger) (*Agent, error) {
123124 }
124125 }
125126
127+ // Auto-detect Kubernetes: enable collector + sync when running inside a K8s cluster.
128+ // KUBERNETES_SERVICE_HOST is injected by the kubelet into every pod.
129+ if ! cfg .Collector .Kubernetes .Enabled && os .Getenv ("KUBERNETES_SERVICE_HOST" ) != "" {
130+ cfg .Collector .Kubernetes .Enabled = true
131+ if ! cfg .Collector .Kubernetes .SyncToBackend {
132+ cfg .Collector .Kubernetes .SyncToBackend = true
133+ }
134+ logger .Info ("Kubernetes environment auto-detected, enabling K8s collector" )
135+ }
136+
126137 // Add Kubernetes collector if enabled
127138 var k8sSync * exporter.KubernetesSync
128139 if cfg .Collector .Kubernetes .Enabled {
@@ -134,11 +145,35 @@ func New(cfg *config.Config, logger *zap.Logger) (*Agent, error) {
134145 } else {
135146 collectors = append (collectors , k8sCollector )
136147 logger .Info ("Kubernetes collector enabled" ,
137- zap .String ("cluster" , cfg .Collector .Kubernetes .ClusterName ),
148+ zap .String ("cluster" , k8sCollector .ClusterName ()),
149+ zap .String ("provider" , k8sCollector .ClusterProvider ()),
138150 )
139151
152+ // Auto-register cluster with backend if ClusterID is not pre-configured.
153+ if cfg .Collector .Kubernetes .SyncToBackend && cfg .Collector .Kubernetes .ClusterID == "" {
154+ regCtx , regCancel := context .WithTimeout (context .Background (), 30 * time .Second )
155+ regResp , regErr := client .AgentRegisterCluster (regCtx , & api.AgentRegisterClusterRequest {
156+ Name : k8sCollector .ClusterName (),
157+ Provider : k8sCollector .ClusterProvider (),
158+ })
159+ regCancel ()
160+ if regErr != nil {
161+ logger .Warn ("Failed to auto-register Kubernetes cluster, sync disabled" ,
162+ zap .Error (regErr ),
163+ zap .String ("cluster" , k8sCollector .ClusterName ()),
164+ )
165+ } else {
166+ cfg .Collector .Kubernetes .ClusterID = regResp .ID
167+ logger .Info ("Kubernetes cluster auto-registered" ,
168+ zap .String ("clusterID" , regResp .ID ),
169+ zap .String ("name" , regResp .Name ),
170+ zap .Bool ("isNew" , regResp .IsNew ),
171+ )
172+ }
173+ }
174+
140175 // Create K8s state sync exporter when sync_to_backend is enabled
141- if cfg .Collector .Kubernetes .SyncToBackend {
176+ if cfg .Collector .Kubernetes .SyncToBackend && cfg . Collector . Kubernetes . ClusterID != "" {
142177 syncInterval := cfg .Collector .Kubernetes .SyncInterval
143178 if syncInterval == 0 {
144179 syncInterval = 60 * time .Second
0 commit comments