Skip to content

Latest commit

 

History

History
98 lines (75 loc) · 3.39 KB

README.md

File metadata and controls

98 lines (75 loc) · 3.39 KB

Kong Kubernetes Telemetry

GitHub tag (latest SemVer) Go Report Card Go Reference

Toolkit for telemetry data for Kong's Kubernetes products, such as the Kong Kubernetes Ingress Controller (KIC).

Usage

import (
  "context"
  "time"

  "github.com/bombsimon/logrusr/v3"
  "github.com/sirupsen/logrus"
  "k8s.io/client-go/kubernetes"
  "k8s.io/client-go/rest"
  "k8s.io/client-go/tools/clientcmd"

  "github.com/kong/kubernetes-telemetry/pkg/forwarders"
  "github.com/kong/kubernetes-telemetry/pkg/serializers"
  "github.com/kong/kubernetes-telemetry/pkg/telemetry"
)

func main() {
  log := logrusr.New(logrus.New())
  m, err := telemetry.NewManager(
    "custom-ping",
    telemetry.OptManagerPeriod(time.Hour),
    telemetry.OptManagerLogger(log),
  )
  // Handle errors ...

  // Configure your Kubernetes client(s)
  loadingRules := clientcmd.NewDefaultClientConfigLoadingRules()
  // If you want to change the loading rules (which files in which order), you can do so here
  kubeConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, nil)
  restConfig, err := kubeConfig.ClientConfig()
  // Handle errors ...
  cl, err := kubernetes.NewForConfig(restConfig)
  // Handle errors ...

  w, err := telemetry.NewIdentifyPlatformWorkflow(cl)
  // Handle errors ...
  m.AddWorkflow(w)

  // Add more workflows/providers if needed ...
  
  // Configure serialization ...
  serializer := serializers.NewSemicolonDelimited()
  // ... and forwarding
  tf, err := forwarders.NewTLSForwarder(splunkEndpoint, log)
  // Handle errors ...
  consumer := telemetry.NewConsumer(serializer, tf)
  m.AddConsumer(consumer)

  // Start the manager
  err := m.Start()
  // Handle errors ...


  // Trigger asynchronous report as needed.
  err := m.TriggerExecute(context.Background(), "custom-event-happened");
  // Handle errors ...

Forwarders

Forwarders can be used to forward serialized telemetry reports to a particular destination.

  • TLSForwarder can be used to forward data to a TLS endpoint
  • LogForwarder can be used to forward data to a configured logger instance
  • DiscardForwarder can be used to discard received reports

Serializers

Users can pick the serializer of their choice for data serialization.

Currently only 1 serializer is supported with more implementations to come as needed.

Semicolon delimited values

This serializer uses the following predefined keys to express telemetry data:

  • k8s_arch - inferred kubernetes cluster architecture
  • k8sv - inferred kubernetes cluster version
  • k8sv_semver - inferred kubernetes cluster version in semver format
  • k8s_provider - inferred kubernetes cluster provider
  • k8s_pods_count - number of pods running in the cluster
  • k8s_services_count - number of services defined in the cluster
  • hn - hostname where this telemetry framework is running on
  • feature-<NAME> - feature gate (with the boolean state indicated whether enabled or disabled)