Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
aos
GitHub Repository: aos/grafana-agent
Path: blob/main/example/k3d/environment/main.jsonnet
4095 views
local collector = import 'collector/main.libsonnet';
local default = import 'default/main.libsonnet';
local etcd = import 'grafana-agent/smoke/etcd/main.libsonnet';
local agent_cluster = import 'grafana-agent/scraping-svc/main.libsonnet';
local k = import 'ksonnet-util/kausal.libsonnet';
local load_generator = import 'load-generator/main.libsonnet';

local loki_config = import 'default/loki_config.libsonnet';
local grafana_agent = import 'grafana-agent/v1/main.libsonnet';

local containerPort = k.core.v1.containerPort;
local ingress = k.networking.v1beta1.ingress;
local path = k.networking.v1beta1.httpIngressPath;
local rule = k.networking.v1beta1.ingressRule;
local service = k.core.v1.service;

local images = {
  agent: 'grafana/agent:latest',
  agentctl: 'grafana/agentctl:latest',
};

{
  default: default.new(namespace='default') {
    grafana+: {
      ingress+:
        ingress.new('grafana-ingress') +
        ingress.mixin.spec.withRules([
          rule.withHost('grafana.k3d.localhost') +
          rule.http.withPaths([
            path.withPath('/')
            + path.backend.withServiceName('grafana')
            + path.backend.withServicePort(80),
          ]),
        ]),
    },
  },

  agent:
    local cluster_label = 'k3d-agent/daemonset';

    grafana_agent.new('grafana-agent', 'default') +
    grafana_agent.withImages(images) +
    grafana_agent.withMetricsConfig({
      wal_directory: '/var/lib/agent/data',
      global: {
        scrape_interval: '1m',
        external_labels: {
          cluster: cluster_label,
        },
      },
    }) +
    grafana_agent.withMetricsInstances(grafana_agent.scrapeInstanceKubernetes {
      // We want our cluster and label to remain static for this deployment, so
      // if they are overwritten by a metric we will change them to the values
      // set by external_labels.
      scrape_configs: std.map(function(config) config {
        relabel_configs+: [{
          target_label: 'cluster',
          replacement: cluster_label,
        }],
      }, super.scrape_configs),
    }) +
    grafana_agent.withRemoteWrite([{
      url: 'http://cortex.default.svc.cluster.local/api/prom/push',
    }]) +
    grafana_agent.withLogsConfig(loki_config) +
    grafana_agent.withLogsClients(grafana_agent.newLogsClient({
      scheme: 'http',
      hostname: 'loki.default.svc.cluster.local',
      external_labels: { cluster: cluster_label },
    })) +
    grafana_agent.withTracesConfig({
      receivers: {
        jaeger: {
          protocols: {
            thrift_http: null,
          },
        },
      },
      batch: {
        timeout: '5s',
        send_batch_size: 1000,
      },
    }) +
    grafana_agent.withPortsMixin([
      containerPort.new('thrift-http', 14268) + containerPort.withProtocol('TCP'),
      containerPort.new('otlp-lb', 4318) + containerPort.withProtocol('TCP'),
    ]) +
    grafana_agent.withTracesRemoteWrite([
      {
        endpoint: 'collector.default.svc.cluster.local:4317',
        insecure: true,
      },
    ]) +
    grafana_agent.withTracesTailSamplingConfig({
      policies: [{
        type: 'always_sample',
      }],
    }) +
    grafana_agent.withTracesLoadBalancingConfig({
      exporter: {
        insecure: true,
      },
      resolver: {
        dns: {
          hostname: 'grafana-agent.default.svc.cluster.local',
          port: 4318,
        },
      },
    }),

  // Need to run ETCD for agent_cluster
  etcd: etcd.new('default'),

  collector: collector.new('default'),

  load_generator: load_generator.new('default'),

  agent_cluster:
    agent_cluster.new('default', 'kube-system') +
    agent_cluster.withImagesMixin(images) +
    agent_cluster.withConfigMixin({
      local kvstore = {
        store: 'etcd',
        etcd: {
          endpoints: ['etcd.default.svc.cluster.local:2379'],
        },
      },

      agent_remote_write: [{
        url: 'http://cortex.default.svc.cluster.local/api/prom/push',
      }],

      agent_ring_kvstore: kvstore { prefix: 'agent/ring/' },
      agent_config_kvstore: kvstore { prefix: 'agent/configs/' },

      local cluster_label = 'k3d-agent/cluster',
      agent_config+: {
        metrics+: {
          global+: {
            external_labels+: {
              cluster: cluster_label,
            },
          },

          scraping_service+: {
            dangerous_allow_reading_files: true,
          },
        },
      },

      kubernetes_scrape_configs:
        (grafana_agent.scrapeInstanceKubernetes {
           // We want our cluster and label to remain static for this deployment, so
           // if they are overwritten by a metric we will change them to the values
           // set by external_labels.
           scrape_configs: std.map(function(config) config {
             relabel_configs+: [{
               target_label: 'cluster',
               replacement: cluster_label,
             }],
           }, super.scrape_configs),
         }).scrape_configs,
    }),
}