From 8d2b5c521ae999e42ef8990946ee5a97b4cc57e3 Mon Sep 17 00:00:00 2001 From: "@x10an14-nav" Date: Mon, 16 Feb 2026 13:18:29 +0100 Subject: [PATCH 1/2] feat(helm): permit configuration of `exporter.performance` settings Maybe missed as part of https://github.com/softwaremill/klag-exporter/pull/41 ? --- .envrc | 18 +++ .gitignore | 4 + flake.lock | 115 ++++++++++++++++++++ flake.nix | 93 ++++++++++++++++ helm/klag-exporter/templates/configmap.yaml | 8 ++ helm/klag-exporter/values.yaml | 5 + 6 files changed, 243 insertions(+) create mode 100644 .envrc create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..0a80856 --- /dev/null +++ b/.envrc @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# Export all: +# - (should be) .gitignored +# - (potentially) secret environment variables +# - from dotenv-formatted files w/names starting w/`.env` +DOTENV_FILES="$(find . -maxdepth 1 -type f -name '.env*'\ + -and -not -name '.envrc'\ + -and -not -name '.env.example'\ +)" +for file in ${DOTENV_FILES}; do + dotenv "${file}" +done +export DOTENV_FILES + +if has nix; then + use flake +fi diff --git a/.gitignore b/.gitignore index d46be94..ea8b8be 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ .claude .idea/ CLAUDE.md + +# nix +.direnv/ +result* diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..1073d28 --- /dev/null +++ b/flake.lock @@ -0,0 +1,115 @@ +{ + "nodes": { + "advisory-db": { + "flake": false, + "locked": { + "lastModified": 1770957822, + "narHash": "sha256-98Z6lih1AN6hgDsyAVj+O9sDn4M2zBcIkumHVyixusY=", + "owner": "rustsec", + "repo": "advisory-db", + "rev": "5d51fad925286b8d080218de4efbf2ecfa086137", + "type": "github" + }, + "original": { + "owner": "rustsec", + "repo": "advisory-db", + "type": "github" + } + }, + "crane": { + "locked": { + "lastModified": 1770419512, + "narHash": "sha256-o8Vcdz6B6bkiGUYkZqFwH3Pv1JwZyXht3dMtS7RchIo=", + "owner": "ipetkov", + "repo": "crane", + "rev": "2510f2cbc3ccd237f700bb213756a8f35c32d8d7", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1770843696, + "narHash": "sha256-LovWTGDwXhkfCOmbgLVA10bvsi/P8eDDpRudgk68HA8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "2343bbb58f99267223bc2aac4fc9ea301a155a16", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "advisory-db": "advisory-db", + "crane": "crane", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770228511, + "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..2543317 --- /dev/null +++ b/flake.nix @@ -0,0 +1,93 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + crane.url = "github:ipetkov/crane"; + + flake-utils.url = "github:numtide/flake-utils"; + + advisory-db = { + url = "github:rustsec/advisory-db"; + flake = false; + }; + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + }; + + outputs = + { self, ... }@inputs: + inputs.flake-utils.lib.eachDefaultSystem ( + system: + let + pkgs = import inputs.nixpkgs { localSystem = { inherit system; }; }; + inherit (pkgs) lib; + + craneLib = inputs.crane.mkLib pkgs; + src = craneLib.cleanCargoSource ./.; + + commonArgs = { + inherit src; + strictDeps = true; + buildInputs = [ + pkgs.openssl + pkgs.cyrus_sasl + pkgs.curlFull + ]; + nativeBuildInputs = [ + pkgs.cmake + pkgs.pkg-config + ] + ++ lib.optionals pkgs.stdenv.isDarwin [ pkgs.libiconv ]; + }; + + cargoDetails = pkgs.lib.importTOML ./Cargo.toml; + inherit (cargoDetails.package) name version; + cargoArtifacts = craneLib.buildDepsOnly commonArgs; + + rust-prog = craneLib.buildPackage ( + commonArgs + // { + inherit cargoArtifacts; + meta.mainProgram = name; # This is default in cargo + } + ); + dockerTag = + if lib.hasAttr "rev" self then "${lib.toString self.revCount}-${self.shortRev}" else "gitDirty"; + tag = "${version}-${dockerTag}"; + in + { + devShells.default = pkgs.mkShell { + packages = with pkgs; [ + rust-analyzer + cargo-watch + clippy + rustfmt + + kubernetes-helm + ]; + inputsFrom = [ rust-prog ]; + }; + formatter = inputs.treefmt-nix.lib.mkWrapper pkgs { + programs.nixfmt.enable = true; + programs.rustfmt.enable = true; + }; + packages.default = rust-prog; + packages.docker = pkgs.dockerTools.buildImage { + inherit name tag; + config = { + Expose = "8000"; + Workdir = "/app"; + + Entrypoint = [ (lib.getExe rust-prog) ]; + Cmd = [ + "--config" + "/app/config.toml" + ]; + }; + }; + } + ); +} diff --git a/helm/klag-exporter/templates/configmap.yaml b/helm/klag-exporter/templates/configmap.yaml index b26a53a..e2664e0 100644 --- a/helm/klag-exporter/templates/configmap.yaml +++ b/helm/klag-exporter/templates/configmap.yaml @@ -14,6 +14,14 @@ data: granularity = {{ .granularity | quote }} {{- end }} + [exporter.performance] + {{- with index .Values.config "exporter.performance" }} + kafka_timeout = {{ .kafka_timeout | quote }} + offset_fetch_timeout = {{ .offset_fetch_timeout | quote }} + max_concurrent_groups = {{ .max_concurrent_groups }} + max_concurrent_watermarks = {{ .max_concurrent_watermarks }} + {{- end }} + [exporter.timestamp_sampling] {{- with index .Values.config "exporter.timestamp_sampling" }} enabled = {{ .enabled }} diff --git a/helm/klag-exporter/values.yaml b/helm/klag-exporter/values.yaml index d95742a..d743a83 100644 --- a/helm/klag-exporter/values.yaml +++ b/helm/klag-exporter/values.yaml @@ -133,6 +133,11 @@ config: enabled: false endpoint: "http://localhost:4317" export_interval: "60s" + exporter.performance: + kafka_timeout: "30s" + offset_fetch_timeout: "10s" + max_concurrent_groups: 10 + max_concurrent_watermarks: 50 clusters: - name: "cluster-1" bootstrap_servers: "kafka:9092" From 63b49b4b9db56d0b0d61971080d729a687d14b61 Mon Sep 17 00:00:00 2001 From: "@x10an14-nav" Date: Mon, 16 Feb 2026 13:41:36 +0100 Subject: [PATCH 2/2] feat(helm): permit configuration of log level eg. `helm template . --set-json '{"log_level": "trace,rdkafka=info,axum=info"}'` --- helm/klag-exporter/templates/deployment.yaml | 5 +++++ helm/klag-exporter/values.yaml | 1 + 2 files changed, 6 insertions(+) diff --git a/helm/klag-exporter/templates/deployment.yaml b/helm/klag-exporter/templates/deployment.yaml index 07722e0..2d4265c 100644 --- a/helm/klag-exporter/templates/deployment.yaml +++ b/helm/klag-exporter/templates/deployment.yaml @@ -39,6 +39,11 @@ spec: {{- end }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} + {{- if .Values.log_level }} + env: + - name: RUST_LOG + value: {{ .Values.log_level }} + {{- end }} {{- if or .Values.envFromConfigMaps .Values.envFromSecrets }} envFrom: {{- range .Values.envFromConfigMaps }} diff --git a/helm/klag-exporter/values.yaml b/helm/klag-exporter/values.yaml index d743a83..eb899c0 100644 --- a/helm/klag-exporter/values.yaml +++ b/helm/klag-exporter/values.yaml @@ -119,6 +119,7 @@ readinessProbe: path: /ready port: http +log_level: "info" config: exporter: poll_interval: "30s"