@@ -45,6 +45,8 @@ import (
4545 "github.com/livekit/protocol/tracer"
4646 "github.com/livekit/protocol/utils"
4747 "github.com/livekit/psrpc"
48+ "github.com/prometheus/client_golang/prometheus"
49+ "github.com/prometheus/client_golang/prometheus/collectors"
4850)
4951
5052const shutdownTimer = time .Second * 5
@@ -113,6 +115,27 @@ func NewService(conf *config.Config, psrpcClient rpc.IOInfoClient, bus psrpc.Mes
113115 Addr : fmt .Sprintf (":%d" , conf .PrometheusPort ),
114116 Handler : promhttp .Handler (),
115117 }
118+
119+ // Register default Prometheus collectors only when Prometheus is enabled
120+ if err := prometheus .Register (collectors .NewProcessCollector (collectors.ProcessCollectorOpts {})); err != nil {
121+ if _ , ok := err .(prometheus.AlreadyRegisteredError ); ! ok {
122+ logger .Errorw ("failed to register process collector" , err )
123+ }
124+ }
125+
126+ // Unregister the default Go collector before registering detailed runtime metrics
127+ prometheus .Unregister (prometheus .NewGoCollector ())
128+ if err := prometheus .Register (collectors .NewGoCollector (collectors .WithGoCollectorRuntimeMetrics (collectors .MetricsAll ))); err != nil {
129+ if _ , ok := err .(prometheus.AlreadyRegisteredError ); ! ok {
130+ logger .Errorw ("failed to register go collector" , err )
131+ }
132+ }
133+
134+ if err := prometheus .Register (collectors .NewBuildInfoCollector ()); err != nil {
135+ if _ , ok := err .(prometheus.AlreadyRegisteredError ); ! ok {
136+ logger .Errorw ("failed to register build info collector" , err )
137+ }
138+ }
116139 }
117140
118141 return s , nil
0 commit comments