network.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/event"
  7. "github.com/opencost/opencost/modules/collector-source/pkg/metric"
  8. "github.com/opencost/opencost/modules/collector-source/pkg/scrape/target"
  9. )
  10. func newNetworkScraper(
  11. port int,
  12. clusterCache clustercache.ClusterCache,
  13. ) Scraper {
  14. tp := NewNetworkTargetProvider(port, clusterCache)
  15. return newNetworkTargetScraper(tp)
  16. }
  17. func newNetworkTargetScraper(provider target.TargetProvider) *TargetScraper {
  18. return newTargetScrapper(
  19. event.NetworkCostsScraperName,
  20. provider,
  21. []string{
  22. metric.KubecostPodNetworkEgressBytesTotal,
  23. metric.KubecostPodNetworkIngressBytesTotal,
  24. },
  25. true)
  26. }
  27. type NetworkTargetProvider struct {
  28. port int
  29. clusterCache clustercache.ClusterCache
  30. }
  31. func NewNetworkTargetProvider(port int, clusterCache clustercache.ClusterCache) *NetworkTargetProvider {
  32. return &NetworkTargetProvider{
  33. port: port,
  34. clusterCache: clusterCache,
  35. }
  36. }
  37. func (n *NetworkTargetProvider) GetTargets() []target.ScrapeTarget {
  38. pods := n.clusterCache.GetAllPods()
  39. var targets []target.ScrapeTarget
  40. for _, pod := range pods {
  41. instance := pod.Labels["app.kubernetes.io/instance"]
  42. name := pod.Labels["app.kubernetes.io/name"]
  43. if name == "network-costs" && instance == "kubecost" && pod.Status.Phase == "Running" {
  44. log.Debugf("Network: found target for http://%s:%d/metrics", pod.Status.PodIP, n.port)
  45. t := target.NewUrlTarget(fmt.Sprintf("http://%s:%d/metrics", pod.Status.PodIP, n.port))
  46. targets = append(targets, t)
  47. }
  48. }
  49. return targets
  50. }