network.go 1.6 KB

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