...
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
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
29
30
31
32
33
34
35
36
37
38
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