...

Source file src/github.com/linkerd/linkerd2/controller/cmd/heartbeat/main.go

Documentation: github.com/linkerd/linkerd2/controller/cmd/heartbeat

     1  package heartbeat
     2  
     3  import (
     4  	"context"
     5  	"flag"
     6  	"net/url"
     7  	"runtime"
     8  
     9  	"github.com/linkerd/linkerd2/controller/heartbeat"
    10  	"github.com/linkerd/linkerd2/pkg/flags"
    11  	"github.com/linkerd/linkerd2/pkg/k8s"
    12  	"github.com/linkerd/linkerd2/pkg/version"
    13  	promApi "github.com/prometheus/client_golang/api"
    14  	promv1 "github.com/prometheus/client_golang/api/prometheus/v1"
    15  	log "github.com/sirupsen/logrus"
    16  )
    17  
    18  // Main executes the heartbeat subcommand
    19  func Main(args []string) {
    20  	cmd := flag.NewFlagSet("heartbeat", flag.ExitOnError)
    21  
    22  	kubeConfigPath := cmd.String("kubeconfig", "", "path to kube config")
    23  	prometheusURL := cmd.String("prometheus-url", "http://127.0.0.1:9090", "prometheus url")
    24  	controllerNamespace := cmd.String("controller-namespace", "linkerd", "namespace in which Linkerd is installed")
    25  
    26  	flags.ConfigureAndParse(cmd, args)
    27  
    28  	// Gather the following fields:
    29  	// - version
    30  	// - source
    31  	// - uuid
    32  	// - k8s-version
    33  	// - install-time
    34  	// - rps
    35  	// - meshed-pods
    36  	// - proxy-injector-injections
    37  	// TODO:
    38  	// - k8s-env
    39  	v := url.Values{}
    40  	v.Set("arch", runtime.GOARCH)
    41  	v.Set("version", version.Version)
    42  	v.Set("source", "heartbeat")
    43  
    44  	kubeAPI, err := k8s.NewAPI(*kubeConfigPath, "", "", []string{}, 0)
    45  	if err != nil {
    46  		log.Errorf("Failed to initialize k8s API: %s", err)
    47  	} else {
    48  		k8sV := heartbeat.K8sValues(context.Background(), kubeAPI, *controllerNamespace)
    49  		v = heartbeat.MergeValues(v, k8sV)
    50  	}
    51  
    52  	prometheusClient, err := promApi.NewClient(promApi.Config{Address: *prometheusURL})
    53  	if err != nil {
    54  		log.Warnf("Failed to initialize Prometheus client: %s", err)
    55  	} else {
    56  		promAPI := promv1.NewAPI(prometheusClient)
    57  		promV := heartbeat.PromValues(promAPI, *controllerNamespace)
    58  		v = heartbeat.MergeValues(v, promV)
    59  	}
    60  
    61  	err = heartbeat.Send(v)
    62  	if err != nil {
    63  		log.Fatalf("Failed to send heartbeat: %s", err)
    64  	}
    65  }
    66  

View as plain text