dcgm.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package scrape
  2. import (
  3. "fmt"
  4. "github.com/opencost/opencost/core/pkg/clustercache"
  5. "github.com/opencost/opencost/core/pkg/log"
  6. "github.com/opencost/opencost/modules/collector-source/pkg/metric"
  7. "github.com/opencost/opencost/modules/collector-source/pkg/scrape/target"
  8. )
  9. // DCGM metrics
  10. const (
  11. DCGMFIPROFGRENGINEACTIVE = "DCGM_FI_PROF_GR_ENGINE_ACTIVE"
  12. DCGMFIDEVDECUTIL = "DCGM_FI_DEV_DEC_UTIL"
  13. )
  14. func newDCGMScrapper(clusterCache clustercache.ClusterCache, updater metric.MetricUpdater) Scraper {
  15. tp := newDCGMTargetProvider(clusterCache)
  16. return newDCGMTargetScraper(tp, updater)
  17. }
  18. func newDCGMTargetScraper(provider target.TargetProvider, updater metric.MetricUpdater) *TargetScraper {
  19. return newTargetScrapper(
  20. provider,
  21. updater,
  22. []string{
  23. DCGMFIPROFGRENGINEACTIVE,
  24. DCGMFIDEVDECUTIL,
  25. },
  26. true)
  27. }
  28. type DCGMTargetProvider struct {
  29. clusterCache clustercache.ClusterCache
  30. }
  31. func newDCGMTargetProvider(clusterCache clustercache.ClusterCache) *DCGMTargetProvider {
  32. return &DCGMTargetProvider{
  33. clusterCache: clusterCache,
  34. }
  35. }
  36. func (p *DCGMTargetProvider) GetTargets() []target.ScrapeTarget {
  37. svcs := p.clusterCache.GetAllServices()
  38. var targets []target.ScrapeTarget
  39. for _, svc := range svcs {
  40. if svc.ClusterIP == "" || svc.SpecSelector == nil {
  41. continue
  42. }
  43. // TODO do something in relation to Thomas' comment https://github.com/opencost/opencost/pull/3110
  44. if name := svc.SpecSelector["app.kubernetes.io/name"]; name != "dcgm-collector" {
  45. continue
  46. }
  47. port := 9400
  48. log.Debugf("DCGM: found target: http://%s:%d/metrics", svc.ClusterIP, port)
  49. t := target.NewUrlTarget(fmt.Sprintf("http://%s:%d/metrics", svc.ClusterIP, port))
  50. targets = append(targets, t)
  51. }
  52. return targets
  53. }