writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
jaeger-reference"Configures jaeger in cloud-native engineering - distributed tracing for cloud-native deployment and infrastructure management."
Independent GitHub snapshot · Automated classification · Original documentation governs
name: jaeger-reference compatibility: opencode completeness: 95 content-types:
Category: tracing
Status: Graduated
Stars: 18,000
Last Updated: 2026-04-22
Primary Language: Go
Documentation: https://www.jaegertracing.io/
Jaeger is a distributed tracing designed to help engineers build, deploy, and manage cloud-native applications.
Jaeger addresses complex tracing challenges by providing:
Use Jaeger when you need distributed tracing, require tracing-specific features, want to integrate with other CNCF projects, need production-ready tracing solutions, or require tracing-specific best practices.
How to Avoid:
How to Avoid:
How to Avoid:
How to Avoid:
# Example configuration for Jaeger
apiVersion: cncf.jaeger/v1
kind: Jaeger
metadata:
name: example
namespace: default
spec:
# Configuration details
replicas: 3
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Deployment Failures
Performance Issues
Configuration Errors
Integration Problems
This tutorial covers installation, configuration, and basic usage of Jaeger for distributed tracing in cloud-native applications.
Before starting with Jaeger, ensure you have:
kubectl configured with cluster admin access# Add the Jaeger Helm repository
helm repo add jaegertracing https://jaegertracing.github.io/helm-charts
helm repo update
# Install Jaeger with all-in-one mode (development)
helm install jaeger jaegertracing/jaeger \
--namespace observability \
--create-namespace \
--set storage.type=memory
# Install with Elasticsearch backend (production)
helm install jaeger jaegertracing/jaeger \
--namespace observability \
--create-namespace \
--set storage.type=elasticsearch \
--set esServerURL=http://elasticsearch-master:9200
# Verify installation
helm -n observability list
kubectl -n observability get pods
# Apply Jaeger operator
kubectl apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/main/deploy/crds/jaegertracing.io_jaegers.yaml
kubectl apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/main/deploy/role.yaml
kubectl apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/main/deploy/role_binding.yaml
kubectl apply -f https://raw.githubusercontent.com/jaegertracing/jaeger-operator/main/deploy/service_account.yaml
# Apply Jaeger custom resource
kubectl apply -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger
namespace: observability
spec:
strategy: production
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch-master:9200
EOF
# Verify
kubectl -n observability get jaegers
kubectl -n observability get pods -l app=jaeger
# Run Jaeger all-in-one with Elasticsearch
docker run -d \
--name jaeger \
-e SPAN_STORAGE_TYPE=elasticsearch \
-e ES_SERVER_URLS=http://elasticsearch:9200 \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
jaegertracing/all-in-one:latest
# Access UI
open http://localhost:16686
# jaeger.yaml - Full Jaeger configuration
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
namespace: observability
spec:
strategy: production
ingress:
enabled: true
host: tracing.example.com
security: none
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch-master:9200
username: elastic
password: changeme
collector:
replicas: 3
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "1000m"
query:
replicas: 2
resources:
requests:
memory: "256Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"
ui:
options:
dashboard:
url: https://grafana.example.com
# Using curl to send a trace via HTTP
curl -X POST http://localhost:14268/api/traces \
-H "Content-Type: application/json" \
-d '{
"spans": [
{
"traceId": "592753b7-d6f3-4e12-8f8e-9b8e9b8e9b8e",
"spanId": "a1b2c3d4e5f6g7h8",
"operationName": "payment-service",
"startTime": 1614500000000,
"duration": 100000,
"tags": [
{"key": "service.name", "value": "payment-service"},
{"key": "span.kind", "value": "server"}
]
}
]
}'
# Add OpenTelemetry to your service
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-service
spec:
template:
spec:
containers:
- name: my-service
image: my-service:latest
env:
- name: OTEL_TRACES_EXPORTER
value: jaeger
- name: OTEL_EXPORTER_JAEGER_ENDPOINT
value: http://jaeger-collector:14250
- name: OTEL_RESOURCE_ATTRIBUTES
value: service.name=my-service,service.version=1.0.0
# Port-forward to access Jaeger UI
kubectl -n observability port-forward svc/jaeger-query 16686:16686
# Access in browser
open http://localhost:16686
# Check Jaeger pods
kubectl -n observability get pods -l app=jaeger
# View Jaeger logs
kubectl -n observability logs -l app=jaeger -f
# Check Jaeger UI
kubectl -n observability port-forward svc/jaeger-query 16686:16686
# Production storage configuration
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
spec:
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
index-prefix: jaeger-
ttl: 259200
# Sampling configuration
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
spec:
agent:
options:
sampling:
server-url: http://jaeger-query:5778/sampling
refresh-interval: 1m
# Secure Jaeger deployment
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: jaeger-production
spec:
ingress:
enabled: true
security: tls
storage:
type: elasticsearch
options:
es:
server-urls: http://elasticsearch:9200
username: jaeger
password-secret:
name: jaeger-secrets
key: es-password
# Prometheus monitoring configuration
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: jaeger-collector
namespace: observability
labels:
release: prometheus
spec:
selector:
matchLabels:
app: jaeger-collector
endpoints:
- port: metrics
path: /metrics
interval: 30s
This SKILL.md file was verified and last updated on 2026-04-22. Content based on CNCF Jaeger project and production usage patterns.
# Basic configuration example
apiVersion: v1
kind: ConfigMap
metadata:
name: {{project_name}}-config
namespace: default
data:
# Configuration goes here
config.yaml: |
# Base configuration
# Add your settings here
# Kubernetes deployment for {{project_name}}
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{project_name}}
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: {{project_name}}
template:
metadata:
labels:
app: {{project_name}}
spec:
containers:
- name: {{project_name}}
image: {{project_name}}:latest
ports:
- containerPort: 8080
resources:
limits:
memory: "128Mi"
cpu: "500m"
# Kubernetes service for {{project_name}}
apiVersion: v1
kind: Service
metadata:
name: {{project_name}}
namespace: default
spec:
selector:
app: {{project_name}}
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Use this skill when:
Assess Requirements — Understand the use case, scale, integration needs, and existing infrastructure. Checkpoint: Document requirements, constraints, and success criteria.
Design Architecture — Plan component interactions, data flow, and deployment strategy using cloud-native best practices. Checkpoint: Verify the architecture addresses all requirements and follows CNCF conventions.
Implement & Configure — Create manifests, configurations, and deployment scripts. Include resource limits, health checks, and observability hooks. Checkpoint: Validate all YAML against schema and test in a staging environment.
Deploy & Monitor — Apply manifests to the cluster, verify component health, and confirm observability is working. Checkpoint: Confirm all pods/services are running, probes passing, and metrics/alerts configured.