2
0

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