network.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. // Network Metrics
  10. const (
  11. KubecostPodNetworkEgressBytesTotal = "kubecost_pod_network_egress_bytes_total"
  12. KubecostPodNetworkIngressBytesTotal = "kubecost_pod_network_ingress_bytes_total"
  13. )
  14. func newNetworkScraper(
  15. releaseName string,
  16. port int,
  17. clusterCache clustercache.ClusterCache,
  18. updater metric.MetricUpdater,
  19. ) Scraper {
  20. tp := NewNetworkTargetProvider(releaseName, port, clusterCache)
  21. return newNetworkTargetScraper(tp, updater)
  22. }
  23. func newNetworkTargetScraper(provider target.TargetProvider, updater metric.MetricUpdater) *TargetScraper {
  24. return newTargetScrapper(
  25. provider,
  26. updater,
  27. []string{
  28. KubecostPodNetworkEgressBytesTotal,
  29. KubecostPodNetworkIngressBytesTotal,
  30. },
  31. true)
  32. }
  33. type NetworkTargetProvider struct {
  34. releaseName string
  35. port int
  36. clusterCache clustercache.ClusterCache
  37. }
  38. func NewNetworkTargetProvider(releaseName string, port int, clusterCache clustercache.ClusterCache) *NetworkTargetProvider {
  39. return &NetworkTargetProvider{
  40. releaseName: releaseName,
  41. port: port,
  42. clusterCache: clusterCache,
  43. }
  44. }
  45. func (n *NetworkTargetProvider) GetTargets() []target.ScrapeTarget {
  46. pods := n.clusterCache.GetAllPods()
  47. //pods, err := k8s.CoreV1().Pods("").List(context.Background(), metav1.ListOptions{
  48. // LabelSelector: fmt.Sprintf("app=%s-network-costs", n.releaseName),
  49. //})
  50. //if err != nil {
  51. // log.Errorf("NetworkTargetProvider: failed to retieve pods from kubernetes client: %s", err.Error())
  52. // return nil
  53. //}
  54. var targets []target.ScrapeTarget
  55. for _, pod := range pods {
  56. instance := pod.Labels["app.kubernetes.io/instance"]
  57. name := pod.Labels["app.kubernetes.io/name"]
  58. if name == "network-costs" && instance == "kubecost" {
  59. log.Debugf("Network: found target for %s", name)
  60. t := target.NewUrlTarget(fmt.Sprintf("http://%s:%d/metrics", pod.Status.PodIP, n.port))
  61. targets = append(targets, t)
  62. }
  63. }
  64. return targets
  65. }