Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
4ba2510
docs: Add global OTEL extension and backend service to Argo template
yesterdaysrebel Jun 15, 2026
0589ad9
fix: update OTEL extension version and backend image tag to v0.1.1
yesterdaysrebel Jun 15, 2026
7e3ec12
feat: add global OTEL extension configuration and variables for ArgoCD
yesterdaysrebel Jun 15, 2026
375ebf0
feat: update global OTEL extension configuration to be tenant-overrid…
yesterdaysrebel Jun 15, 2026
cf3c6cf
feat: update placeholder comments for OTEL extension configurations i…
yesterdaysrebel Jun 15, 2026
0a309d1
feat: refine OTEL extension configuration and improve formatting in A…
yesterdaysrebel Jun 15, 2026
58de9b5
feat: refactor OTEL extension configuration for improved readability …
yesterdaysrebel Jun 18, 2026
d5406c8
feat: update required Terraform version in main.tf for compatibility
yesterdaysrebel Jun 18, 2026
aca9d8e
feat: trim whitespace from OTEL extension version and backend tag var…
yesterdaysrebel Jun 18, 2026
ba63f8f
feat: add instructions for installing OTEL directly from argocd.yaml.tpl
yesterdaysrebel Jun 18, 2026
ed14832
feat: add preconditions for OTEL extension variables to prevent white…
yesterdaysrebel Jun 18, 2026
9b85769
docs: fix README OTEL usage examples
Copilot Jun 19, 2026
fabab4d
feat: add otel-extension-api backend service and release workflow
Copilot Jun 19, 2026
1e9fea9
fix: remove internal error details from proxy error responses; use np…
Copilot Jun 19, 2026
a512b7e
feat: update OTEL backend references to use new image and service names
yesterdaysrebel Jun 23, 2026
6875002
feat: update OTEL extension and backend version to v0.1.2
yesterdaysrebel Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Release

on:
release:
types: [published]

permissions:
contents: read
packages: write

jobs:
build-and-push-backend:
name: Build and push backend image
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Log in to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/glueops/argocd-otel-extension-api
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=sha
- name: Build and push
uses: docker/build-push-action@v6
with:
context: ./backend
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
backend/node_modules/
25 changes: 19 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ wget -O argocd.yaml https://raw.githubusercontent.com/GlueOps/docs-argocd/main/a
- Replace `placeholder_tenant_key` with your tenant/company key. Example: `antoniostacos`
- Replace `placeholder_cluster_environment` with your cluster_environment name. Example: `nonprod`
- The `placeholder_argocd_oidc_client_secret_from_dex` that you specify needs to be the same one you use in the `platform.yaml` for ArgoCD. If they do not match you will not be able to login.
- OTEL is tenant-overridable through the Terraform module inputs:
- `otel_enabled` enables or disables the global ArgoCD OTEL extension for the tenant. The default is `false`, so tenants must opt in explicitly.
- `otel_extension_version` sets the GitHub release tag used for the extension tarball.
- `otel_backend_tag` sets the OTEL backend API image tag.
- `tempo_base_url` sets the in-cluster Tempo endpoint. Leave it empty to disable traces while keeping metrics enabled.
- If you are installing from the downloaded `argocd.yaml` directly instead of using Terraform, replace `placeholder_otel_enabled` with `true` or `false` before running Helm. Leave the OTEL placeholder comments in place to keep OTEL disabled, or replace those placeholder comments with concrete OTEL config, RBAC, server extension, and backend object blocks if you want OTEL enabled without Terraform.
- The OTEL extension is defined in `argocd.yaml` and loaded by ArgoCD itself, so it is global for all Argo applications without changing app templates.

- Install ArgoCD

Expand All @@ -38,14 +45,20 @@ kubectl get pods -n glueops-core

```hcl
module "argocd_helm_values" {
source = "git::https://github.com/GlueOps/docs-argocd.git"
tenant_key = "antoniostacos"
cluster_environment = "nonprod"
client_secret = "Zsbui/29YEqoGOzuI8snlqGcdaRYPSLocwLXDB5GhZY="
glueops_root_domain = "onglueops.com"
source = "git::https://github.com/GlueOps/docs-argocd.git"
tenant_key = "antoniostacos"
cluster_environment = "nonprod"
client_secret = "Zsbui/29YEqoGOzuI8snlqGcdaRYPSLocwLXDB5GhZY="
glueops_root_domain = "onglueops.com"
argocd_app_version = "v2.8.6"
gatekeeper_tag = "v1.0.0"
otel_enabled = true
otel_extension_version = "v0.1.2"
otel_backend_tag = "v0.1.2"
tempo_base_url = "http://tempo.glueops-core-tempo.svc.cluster.local:3200"
}

output "argocd_helm_values" {
value = module.argocd_yaml.argocd
value = module.argocd_helm_values.helm_values
}
```
5 changes: 5 additions & 0 deletions argocd.yaml.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ applicationSet:
configs:
params:
server.insecure: true
server.enable.proxy.extension: placeholder_otel_enabled
cm:
# @ignored
timeout.reconciliation: 10s
Expand Down Expand Up @@ -217,15 +218,18 @@ configs:
clientID: argocd
clientSecret: placeholder_argocd_oidc_client_secret_from_dex
redirectURI: https://argocd.placeholder_cluster_environment.placeholder_tenant_key.placeholder_glueops_root_domain/api/dex/callback
# placeholder_otel_extension_config
rbac:
# -- A good reference for this is: https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/
# This default policy is for GlueOps orgs/teams only. Please change it to reflect your own orgs/teams.
# `development` is the project that all developers are expected to deploy under
# @default -- `''` (See [values.yaml])
policy.csv: |
placeholder_argocd_rbac_policies
# placeholder_otel_rbac_policies
# @ignored
server:
# placeholder_otel_server_extensions
# @ignored
affinity:
nodeAffinity:
Expand Down Expand Up @@ -296,6 +300,7 @@ extraObjects:
name: argocd-server
port:
number: 80
# placeholder_otel_backend_objects

- apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
Expand Down
3 changes: 3 additions & 0 deletions backend/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules
npm-debug.log
.npm
8 changes: 8 additions & 0 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY src/ ./src/
EXPOSE 8000
USER node
CMD ["node", "src/server.js"]
46 changes: 46 additions & 0 deletions backend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# argocd-otel-extension-api

Backend service for the ArgoCD OTEL UI extension. It proxies Prometheus and Tempo endpoints so the extension frontend can query metrics and traces without direct cluster network access.

## Endpoints

| Path | Proxied to |
|------|------------|
| `GET /healthz` | Local health check — returns `{"status":"ok"}` |
| `ANY /prometheus/*` | `PROMETHEUS_BASE_URL/*` (path prefix stripped) |
| `ANY /tempo/*` | `TEMPO_BASE_URL/*` (path prefix stripped) |

### Prometheus example
```
GET /prometheus/api/v1/query?query=up
```
Proxied to `$PROMETHEUS_BASE_URL/api/v1/query?query=up`.

### Tempo example
```
GET /tempo/api/search?tags=service.name%3Dmyapp
```
Proxied to `$TEMPO_BASE_URL/api/search?tags=service.name%3Dmyapp`.

## Environment variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `PORT` | No | `8000` | Port the server listens on |
| `PROMETHEUS_BASE_URL` | Yes (for metrics) | `""` | In-cluster Prometheus base URL, e.g. `http://kps-prometheus.glueops-core-kube-prometheus-stack.svc.cluster.local:9090` |
| `TEMPO_BASE_URL` | No | `""` | In-cluster Tempo base URL, e.g. `http://tempo.glueops-core-tempo.svc.cluster.local:3200`. Leave empty to disable trace proxying. |
| `LOG_LEVEL` | No | `INFO` | Log verbosity: `DEBUG`, `INFO`, `WARN`, or `ERROR` |

## Running locally

```bash
npm install
PROMETHEUS_BASE_URL=http://localhost:9090 node src/server.js
```

## Container image

The image is published to GHCR on every release:
```
ghcr.io/glueops/argocd-otel-extension-api:<tag>
```
Loading
Loading