@sylix/coworker 2.0.10 → 2.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/dist/commands/slash/config.d.ts.map +1 -1
  2. package/dist/commands/slash/config.js +23 -5
  3. package/dist/commands/slash/config.js.map +1 -1
  4. package/dist/commands/slash/todo.js +1 -1
  5. package/dist/commands/slash/todo.js.map +1 -1
  6. package/dist/core/CoWorkerAgent.d.ts.map +1 -1
  7. package/dist/core/CoWorkerAgent.js +6 -3
  8. package/dist/core/CoWorkerAgent.js.map +1 -1
  9. package/dist/permissions/PermissionInterceptor.js +1 -1
  10. package/dist/permissions/PermissionInterceptor.js.map +1 -1
  11. package/dist/skills/defaults/accessibility/screen-reader-testing.md +545 -0
  12. package/dist/skills/defaults/accessibility/wcag-audit-patterns.md +555 -0
  13. package/dist/skills/defaults/ai-ml/rag.md +276 -0
  14. package/dist/skills/defaults/backend-development/api-design-principles.md +528 -0
  15. package/dist/skills/defaults/backend-development/api-design.md +285 -0
  16. package/dist/skills/defaults/backend-development/architecture-patterns.md +494 -0
  17. package/dist/skills/defaults/backend-development/async-python.md +237 -0
  18. package/dist/skills/defaults/backend-development/auth-implementation-patterns.md +638 -0
  19. package/dist/skills/defaults/backend-development/bazel-build-optimization.md +387 -0
  20. package/dist/skills/defaults/backend-development/billing-automation/SKILL.md +566 -0
  21. package/dist/skills/defaults/backend-development/code-review-excellence.md +538 -0
  22. package/dist/skills/defaults/backend-development/cqrs-implementation.md +554 -0
  23. package/dist/skills/defaults/backend-development/database-design.md +305 -0
  24. package/dist/skills/defaults/backend-development/debugging-strategies.md +536 -0
  25. package/dist/skills/defaults/backend-development/e2e-testing-patterns.md +544 -0
  26. package/dist/skills/defaults/backend-development/error-handling-patterns.md +641 -0
  27. package/dist/skills/defaults/backend-development/fastapi-templates.md +559 -0
  28. package/dist/skills/defaults/backend-development/fastapi.md +309 -0
  29. package/dist/skills/defaults/backend-development/git-advanced-workflows.md +405 -0
  30. package/dist/skills/defaults/backend-development/microservices-patterns.md +595 -0
  31. package/dist/skills/defaults/backend-development/microservices.md +284 -0
  32. package/dist/skills/defaults/backend-development/monorepo-management.md +623 -0
  33. package/dist/skills/defaults/backend-development/nodejs-backend-patterns.md +1048 -0
  34. package/dist/skills/defaults/backend-development/nx-workspace-patterns.md +457 -0
  35. package/dist/skills/defaults/backend-development/paypal-integration/SKILL.md +478 -0
  36. package/dist/skills/defaults/backend-development/pci-compliance/SKILL.md +480 -0
  37. package/dist/skills/defaults/backend-development/python-anti-patterns.md +349 -0
  38. package/dist/skills/defaults/backend-development/python-background-jobs.md +364 -0
  39. package/dist/skills/defaults/backend-development/python-code-style.md +360 -0
  40. package/dist/skills/defaults/backend-development/python-configuration.md +368 -0
  41. package/dist/skills/defaults/backend-development/python-design-patterns.md +296 -0
  42. package/dist/skills/defaults/backend-development/python-error-handling.md +323 -0
  43. package/dist/skills/defaults/backend-development/python-packaging.md +887 -0
  44. package/dist/skills/defaults/backend-development/python-performance-optimization.md +874 -0
  45. package/dist/skills/defaults/backend-development/python-project-structure.md +252 -0
  46. package/dist/skills/defaults/backend-development/python-resilience.md +376 -0
  47. package/dist/skills/defaults/backend-development/python-resource-management.md +421 -0
  48. package/dist/skills/defaults/backend-development/python-type-safety.md +428 -0
  49. package/dist/skills/defaults/backend-development/sql-optimization-patterns.md +509 -0
  50. package/dist/skills/defaults/backend-development/stripe-integration/SKILL.md +522 -0
  51. package/dist/skills/defaults/backend-development/turborepo-caching.md +376 -0
  52. package/dist/skills/defaults/blockchain/defi-protocol-templates.md +430 -0
  53. package/dist/skills/defaults/blockchain/nft-standards.md +364 -0
  54. package/dist/skills/defaults/blockchain/solidity-security.md +514 -0
  55. package/dist/skills/defaults/blockchain/web3-testing.md +360 -0
  56. package/dist/skills/defaults/business/competitive-landscape/SKILL.md +527 -0
  57. package/dist/skills/defaults/business/market-sizing-analysis/SKILL.md +451 -0
  58. package/dist/skills/defaults/business/startup-financial-modeling/SKILL.md +494 -0
  59. package/dist/skills/defaults/business/startup-metrics-framework/SKILL.md +564 -0
  60. package/dist/skills/defaults/business/team-composition-analysis.md +437 -0
  61. package/dist/skills/defaults/compliance/employment-contract-templates/SKILL.md +527 -0
  62. package/dist/skills/defaults/compliance/gdpr-data-handling/SKILL.md +630 -0
  63. package/dist/skills/defaults/data-engineering/airflow-dag-patterns.md +436 -0
  64. package/dist/skills/defaults/data-engineering/airflow.md +519 -0
  65. package/dist/skills/defaults/data-engineering/data-quality.md +583 -0
  66. package/dist/skills/defaults/data-engineering/dbt-transformation-patterns.md +482 -0
  67. package/dist/skills/defaults/data-engineering/dbt.md +556 -0
  68. package/dist/skills/defaults/data-engineering/ml-pipeline-workflow/SKILL.md +247 -0
  69. package/dist/skills/defaults/data-engineering/spark-optimization.md +348 -0
  70. package/dist/skills/defaults/data-engineering/spark.md +411 -0
  71. package/dist/skills/defaults/database/postgresql.md +202 -0
  72. package/dist/skills/defaults/debugging/systematic-debugging.md +249 -0
  73. package/dist/skills/defaults/devops/architecture-decision-records.md +448 -0
  74. package/dist/skills/defaults/devops/changelog-automation.md +580 -0
  75. package/dist/skills/defaults/devops/cicd.md +314 -0
  76. package/dist/skills/defaults/devops/cloud.md +263 -0
  77. package/dist/skills/defaults/devops/code-review-excellence.md +299 -0
  78. package/dist/skills/defaults/devops/cost-optimization.md +295 -0
  79. package/dist/skills/defaults/devops/deployment-pipeline-design.md +356 -0
  80. package/dist/skills/defaults/devops/docker.md +281 -0
  81. package/dist/skills/defaults/devops/git-workflows.md +205 -0
  82. package/dist/skills/defaults/devops/github-actions.md +311 -0
  83. package/dist/skills/defaults/devops/gitlab-ci-patterns.md +266 -0
  84. package/dist/skills/defaults/devops/hybrid-cloud-networking.md +241 -0
  85. package/dist/skills/defaults/devops/istio-traffic-management.md +327 -0
  86. package/dist/skills/defaults/devops/kubernetes.md +339 -0
  87. package/dist/skills/defaults/devops/linkerd-patterns.md +311 -0
  88. package/dist/skills/defaults/devops/multi-cloud-architecture.md +181 -0
  89. package/dist/skills/defaults/devops/observability.md +243 -0
  90. package/dist/skills/defaults/devops/openapi-spec-generation.md +1024 -0
  91. package/dist/skills/defaults/devops/postmortem-writing.md +396 -0
  92. package/dist/skills/defaults/devops/prometheus-configuration.md +265 -0
  93. package/dist/skills/defaults/devops/secrets-management.md +341 -0
  94. package/dist/skills/defaults/devops/service-mesh-observability.md +385 -0
  95. package/dist/skills/defaults/devops/terraform-module-library.md +244 -0
  96. package/dist/skills/defaults/finance/backtesting-frameworks/SKILL.md +663 -0
  97. package/dist/skills/defaults/finance/risk-metrics-calculation/SKILL.md +557 -0
  98. package/dist/skills/defaults/frontend/accessibility-compliance.md +420 -0
  99. package/dist/skills/defaults/frontend/design-system-patterns.md +337 -0
  100. package/dist/skills/defaults/frontend/interaction-design.md +327 -0
  101. package/dist/skills/defaults/frontend/javascript.md +311 -0
  102. package/dist/skills/defaults/frontend/modern-javascript-patterns.md +927 -0
  103. package/dist/skills/defaults/frontend/react-native-design.md +440 -0
  104. package/dist/skills/defaults/frontend/react.md +345 -0
  105. package/dist/skills/defaults/frontend/responsive-design.md +472 -0
  106. package/dist/skills/defaults/frontend/tailwind-design-system.md +337 -0
  107. package/dist/skills/defaults/frontend/typescript-advanced-types.md +724 -0
  108. package/dist/skills/defaults/frontend/typescript.md +334 -0
  109. package/dist/skills/defaults/frontend/visual-design-foundations.md +326 -0
  110. package/dist/skills/defaults/frontend/web-component-design.md +279 -0
  111. package/dist/skills/defaults/game-development/godot-gdscript-patterns.md +188 -0
  112. package/dist/skills/defaults/game-development/unity-ecs-patterns.md +594 -0
  113. package/dist/skills/defaults/kubernetes/gitops-workflow.md +285 -0
  114. package/dist/skills/defaults/kubernetes/gitops.md +280 -0
  115. package/dist/skills/defaults/kubernetes/helm-chart-scaffolding.md +553 -0
  116. package/dist/skills/defaults/kubernetes/helm.md +343 -0
  117. package/dist/skills/defaults/kubernetes/k8s-manifest-generator.md +501 -0
  118. package/dist/skills/defaults/kubernetes/k8s-security-policies.md +342 -0
  119. package/dist/skills/defaults/kubernetes/manifests.md +330 -0
  120. package/dist/skills/defaults/kubernetes/security.md +337 -0
  121. package/dist/skills/defaults/llm-application/embedding-strategies.md +608 -0
  122. package/dist/skills/defaults/llm-application/hybrid-search-implementation.md +570 -0
  123. package/dist/skills/defaults/llm-application/hybrid-search.md +570 -0
  124. package/dist/skills/defaults/llm-application/langchain-architecture.md +666 -0
  125. package/dist/skills/defaults/llm-application/langchain.md +259 -0
  126. package/dist/skills/defaults/llm-application/llm-evaluation.md +695 -0
  127. package/dist/skills/defaults/llm-application/prompt-engineering-patterns.md +449 -0
  128. package/dist/skills/defaults/llm-application/prompt-engineering.md +219 -0
  129. package/dist/skills/defaults/llm-application/rag-implementation.md +434 -0
  130. package/dist/skills/defaults/llm-application/similarity-search-patterns.md +560 -0
  131. package/dist/skills/defaults/llm-application/similarity-search.md +560 -0
  132. package/dist/skills/defaults/llm-application/vector-index-tuning.md +523 -0
  133. package/dist/skills/defaults/mobile/mobile-android-design.md +440 -0
  134. package/dist/skills/defaults/mobile/mobile-ios-design.md +266 -0
  135. package/dist/skills/defaults/monitoring/distributed-tracing.md +436 -0
  136. package/dist/skills/defaults/monitoring/grafana-dashboards.md +370 -0
  137. package/dist/skills/defaults/monitoring/prometheus-configuration.md +379 -0
  138. package/dist/skills/defaults/monitoring/slo-implementation.md +323 -0
  139. package/dist/skills/defaults/refactoring/code-refactoring.md +349 -0
  140. package/dist/skills/defaults/security/anti-reversing-techniques/SKILL.md +559 -0
  141. package/dist/skills/defaults/security/auditor.md +168 -0
  142. package/dist/skills/defaults/security/binary-analysis-patterns/SKILL.md +438 -0
  143. package/dist/skills/defaults/security/memory-forensics/SKILL.md +483 -0
  144. package/dist/skills/defaults/security/mtls-configuration.md +349 -0
  145. package/dist/skills/defaults/security/protocol-reverse-engineering/SKILL.md +520 -0
  146. package/dist/skills/defaults/security/sast-configuration.md +182 -0
  147. package/dist/skills/defaults/security/security.md +313 -0
  148. package/dist/skills/defaults/security/stride-analysis.md +273 -0
  149. package/dist/skills/defaults/security/threat-mitigation-mapping.md +290 -0
  150. package/dist/skills/defaults/systems/bash-defensive-patterns/SKILL.md +539 -0
  151. package/dist/skills/defaults/systems/bats-testing-patterns/SKILL.md +631 -0
  152. package/dist/skills/defaults/systems/go-concurrency-patterns.md +657 -0
  153. package/dist/skills/defaults/systems/memory-safety-patterns.md +605 -0
  154. package/dist/skills/defaults/systems/rust-async-patterns.md +519 -0
  155. package/dist/skills/defaults/systems/shellcheck-configuration/SKILL.md +456 -0
  156. package/dist/skills/defaults/team-collaboration/multi-reviewer-patterns.md +126 -0
  157. package/dist/skills/defaults/team-collaboration/parallel-feature-development.md +151 -0
  158. package/dist/skills/defaults/testing/javascript-testing-patterns.md +1021 -0
  159. package/dist/skills/defaults/testing/python-testing-patterns.md +351 -0
  160. package/dist/skills/defaults/testing/testing.md +332 -0
  161. package/dist/skills/defaults/workflows/context-driven-development.md +384 -0
  162. package/dist/skills/defaults/workflows/track-management.md +592 -0
  163. package/dist/skills/defaults/workflows/workflow-patterns.md +622 -0
  164. package/dist/skills/index.d.ts +11 -0
  165. package/dist/skills/index.d.ts.map +1 -0
  166. package/dist/skills/index.js +129 -0
  167. package/dist/skills/index.js.map +1 -0
  168. package/dist/utils/character.js +6 -9
  169. package/dist/utils/character.js.map +1 -1
  170. package/dist/utils/contextManager.js +3 -7
  171. package/dist/utils/contextManager.js.map +1 -1
  172. package/dist/utils/inputbar.d.ts.map +1 -1
  173. package/dist/utils/inputbar.js +8 -1
  174. package/dist/utils/inputbar.js.map +1 -1
  175. package/dist/utils/output.d.ts.map +1 -1
  176. package/dist/utils/output.js +3 -35
  177. package/dist/utils/output.js.map +1 -1
  178. package/package.json +1 -1
@@ -0,0 +1,436 @@
1
+ ---
2
+ name: distributed-tracing
3
+ description: Implement distributed tracing with Jaeger and Tempo to track requests across microservices and identify performance bottlenecks. Use when debugging microservices, analyzing request flows, or implementing observability for distributed systems.
4
+ ---
5
+
6
+ # Distributed Tracing
7
+
8
+ Implement distributed tracing with Jaeger and Tempo for request flow visibility across microservices.
9
+
10
+ ## Purpose
11
+
12
+ Track requests across distributed systems to understand latency, dependencies, and failure points.
13
+
14
+ ## When to Use
15
+
16
+ - Debug latency issues
17
+ - Understand service dependencies
18
+ - Identify bottlenecks
19
+ - Trace error propagation
20
+ - Analyze request paths
21
+
22
+ ## Distributed Tracing Concepts
23
+
24
+ ### Trace Structure
25
+
26
+ ```
27
+ Trace (Request ID: abc123)
28
+
29
+ Span (frontend) [100ms]
30
+
31
+ Span (api-gateway) [80ms]
32
+ ├→ Span (auth-service) [10ms]
33
+ └→ Span (user-service) [60ms]
34
+ └→ Span (database) [40ms]
35
+ ```
36
+
37
+ ### Key Components
38
+
39
+ - **Trace** - End-to-end request journey
40
+ - **Span** - Single operation within a trace
41
+ - **Context** - Metadata propagated between services
42
+ - **Tags** - Key-value pairs for filtering
43
+ - **Logs** - Timestamped events within a span
44
+
45
+ ## Jaeger Setup
46
+
47
+ ### Kubernetes Deployment
48
+
49
+ ```bash
50
+ # Deploy Jaeger Operator
51
+ kubectl create namespace observability
52
+ kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.51.0/jaeger-operator.yaml -n observability
53
+
54
+ # Deploy Jaeger instance
55
+ kubectl apply -f - <<EOF
56
+ apiVersion: jaegertracing.io/v1
57
+ kind: Jaeger
58
+ metadata:
59
+ name: jaeger
60
+ namespace: observability
61
+ spec:
62
+ strategy: production
63
+ storage:
64
+ type: elasticsearch
65
+ options:
66
+ es:
67
+ server-urls: http://elasticsearch:9200
68
+ ingress:
69
+ enabled: true
70
+ EOF
71
+ ```
72
+
73
+ ### Docker Compose
74
+
75
+ ```yaml
76
+ version: "3.8"
77
+ services:
78
+ jaeger:
79
+ image: jaegertracing/all-in-one:latest
80
+ ports:
81
+ - "5775:5775/udp"
82
+ - "6831:6831/udp"
83
+ - "6832:6832/udp"
84
+ - "5778:5778"
85
+ - "16686:16686" # UI
86
+ - "14268:14268" # Collector
87
+ - "14250:14250" # gRPC
88
+ - "9411:9411" # Zipkin
89
+ environment:
90
+ - COLLECTOR_ZIPKIN_HOST_PORT=:9411
91
+ ```
92
+
93
+ ## Application Instrumentation
94
+
95
+ ### OpenTelemetry (Recommended)
96
+
97
+ #### Python (Flask)
98
+
99
+ ```python
100
+ from opentelemetry import trace
101
+ from opentelemetry.exporter.jaeger.thrift import JaegerExporter
102
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
103
+ from opentelemetry.sdk.trace import TracerProvider
104
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
105
+ from opentelemetry.instrumentation.flask import FlaskInstrumentor
106
+ from flask import Flask
107
+
108
+ # Initialize tracer
109
+ resource = Resource(attributes={SERVICE_NAME: "my-service"})
110
+ provider = TracerProvider(resource=resource)
111
+ processor = BatchSpanProcessor(JaegerExporter(
112
+ agent_host_name="jaeger",
113
+ agent_port=6831,
114
+ ))
115
+ provider.add_span_processor(processor)
116
+ trace.set_tracer_provider(provider)
117
+
118
+ # Instrument Flask
119
+ app = Flask(__name__)
120
+ FlaskInstrumentor().instrument_app(app)
121
+
122
+ @app.route('/api/users')
123
+ def get_users():
124
+ tracer = trace.get_tracer(__name__)
125
+
126
+ with tracer.start_as_current_span("get_users") as span:
127
+ span.set_attribute("user.count", 100)
128
+ # Business logic
129
+ users = fetch_users_from_db()
130
+ return {"users": users}
131
+
132
+ def fetch_users_from_db():
133
+ tracer = trace.get_tracer(__name__)
134
+
135
+ with tracer.start_as_current_span("database_query") as span:
136
+ span.set_attribute("db.system", "postgresql")
137
+ span.set_attribute("db.statement", "SELECT * FROM users")
138
+ # Database query
139
+ return query_database()
140
+ ```
141
+
142
+ #### Node.js (Express)
143
+
144
+ ```javascript
145
+ const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node");
146
+ const { JaegerExporter } = require("@opentelemetry/exporter-jaeger");
147
+ const { BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base");
148
+ const { registerInstrumentations } = require("@opentelemetry/instrumentation");
149
+ const { HttpInstrumentation } = require("@opentelemetry/instrumentation-http");
150
+ const {
151
+ ExpressInstrumentation,
152
+ } = require("@opentelemetry/instrumentation-express");
153
+
154
+ // Initialize tracer
155
+ const provider = new NodeTracerProvider({
156
+ resource: { attributes: { "service.name": "my-service" } },
157
+ });
158
+
159
+ const exporter = new JaegerExporter({
160
+ endpoint: "http://jaeger:14268/api/traces",
161
+ });
162
+
163
+ provider.addSpanProcessor(new BatchSpanProcessor(exporter));
164
+ provider.register();
165
+
166
+ // Instrument libraries
167
+ registerInstrumentations({
168
+ instrumentations: [new HttpInstrumentation(), new ExpressInstrumentation()],
169
+ });
170
+
171
+ const express = require("express");
172
+ const app = express();
173
+
174
+ app.get("/api/users", async (req, res) => {
175
+ const tracer = trace.getTracer("my-service");
176
+ const span = tracer.startSpan("get_users");
177
+
178
+ try {
179
+ const users = await fetchUsers();
180
+ span.setAttributes({ "user.count": users.length });
181
+ res.json({ users });
182
+ } finally {
183
+ span.end();
184
+ }
185
+ });
186
+ ```
187
+
188
+ #### Go
189
+
190
+ ```go
191
+ package main
192
+
193
+ import (
194
+ "context"
195
+ "go.opentelemetry.io/otel"
196
+ "go.opentelemetry.io/otel/exporters/jaeger"
197
+ "go.opentelemetry.io/otel/sdk/resource"
198
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
199
+ semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
200
+ )
201
+
202
+ func initTracer() (*sdktrace.TracerProvider, error) {
203
+ exporter, err := jaeger.New(jaeger.WithCollectorEndpoint(
204
+ jaeger.WithEndpoint("http://jaeger:14268/api/traces"),
205
+ ))
206
+ if err != nil {
207
+ return nil, err
208
+ }
209
+
210
+ tp := sdktrace.NewTracerProvider(
211
+ sdktrace.WithBatcher(exporter),
212
+ sdktrace.WithResource(resource.NewWithAttributes(
213
+ semconv.SchemaURL,
214
+ semconv.ServiceNameKey.String("my-service"),
215
+ )),
216
+ )
217
+
218
+ otel.SetTracerProvider(tp)
219
+ return tp, nil
220
+ }
221
+
222
+ func getUsers(ctx context.Context) ([]User, error) {
223
+ tracer := otel.Tracer("my-service")
224
+ ctx, span := tracer.Start(ctx, "get_users")
225
+ defer span.End()
226
+
227
+ span.SetAttributes(attribute.String("user.filter", "active"))
228
+
229
+ users, err := fetchUsersFromDB(ctx)
230
+ if err != nil {
231
+ span.RecordError(err)
232
+ return nil, err
233
+ }
234
+
235
+ span.SetAttributes(attribute.Int("user.count", len(users)))
236
+ return users, nil
237
+ }
238
+ ```
239
+
240
+ ## Context Propagation
241
+
242
+ ### HTTP Headers
243
+
244
+ ```
245
+ traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
246
+ tracestate: congo=t61rcWkgMzE
247
+ ```
248
+
249
+ ### Propagation in HTTP Requests
250
+
251
+ #### Python
252
+
253
+ ```python
254
+ from opentelemetry.propagate import inject
255
+
256
+ headers = {}
257
+ inject(headers) # Injects trace context
258
+
259
+ response = requests.get('http://downstream-service/api', headers=headers)
260
+ ```
261
+
262
+ #### Node.js
263
+
264
+ ```javascript
265
+ const { propagation } = require("@opentelemetry/api");
266
+
267
+ const headers = {};
268
+ propagation.inject(context.active(), headers);
269
+
270
+ axios.get("http://downstream-service/api", { headers });
271
+ ```
272
+
273
+ ## Tempo Setup (Grafana)
274
+
275
+ ### Kubernetes Deployment
276
+
277
+ ```yaml
278
+ apiVersion: v1
279
+ kind: ConfigMap
280
+ metadata:
281
+ name: tempo-config
282
+ data:
283
+ tempo.yaml: |
284
+ server:
285
+ http_listen_port: 3200
286
+
287
+ distributor:
288
+ receivers:
289
+ jaeger:
290
+ protocols:
291
+ thrift_http:
292
+ grpc:
293
+ otlp:
294
+ protocols:
295
+ http:
296
+ grpc:
297
+
298
+ storage:
299
+ trace:
300
+ backend: s3
301
+ s3:
302
+ bucket: tempo-traces
303
+ endpoint: s3.amazonaws.com
304
+
305
+ querier:
306
+ frontend_worker:
307
+ frontend_address: tempo-query-frontend:9095
308
+ ---
309
+ apiVersion: apps/v1
310
+ kind: Deployment
311
+ metadata:
312
+ name: tempo
313
+ spec:
314
+ replicas: 1
315
+ template:
316
+ spec:
317
+ containers:
318
+ - name: tempo
319
+ image: grafana/tempo:latest
320
+ args:
321
+ - -config.file=/etc/tempo/tempo.yaml
322
+ volumeMounts:
323
+ - name: config
324
+ mountPath: /etc/tempo
325
+ volumes:
326
+ - name: config
327
+ configMap:
328
+ name: tempo-config
329
+ ```
330
+
331
+ ## Sampling Strategies
332
+
333
+ ### Probabilistic Sampling
334
+
335
+ ```yaml
336
+ # Sample 1% of traces
337
+ sampler:
338
+ type: probabilistic
339
+ param: 0.01
340
+ ```
341
+
342
+ ### Rate Limiting Sampling
343
+
344
+ ```yaml
345
+ # Sample max 100 traces per second
346
+ sampler:
347
+ type: ratelimiting
348
+ param: 100
349
+ ```
350
+
351
+ ### Adaptive Sampling
352
+
353
+ ```python
354
+ from opentelemetry.sdk.trace.sampling import ParentBased, TraceIdRatioBased
355
+
356
+ # Sample based on trace ID (deterministic)
357
+ sampler = ParentBased(root=TraceIdRatioBased(0.01))
358
+ ```
359
+
360
+ ## Trace Analysis
361
+
362
+ ### Finding Slow Requests
363
+
364
+ **Jaeger Query:**
365
+
366
+ ```
367
+ service=my-service
368
+ duration > 1s
369
+ ```
370
+
371
+ ### Finding Errors
372
+
373
+ **Jaeger Query:**
374
+
375
+ ```
376
+ service=my-service
377
+ error=true
378
+ tags.http.status_code >= 500
379
+ ```
380
+
381
+ ### Service Dependency Graph
382
+
383
+ Jaeger automatically generates service dependency graphs showing:
384
+
385
+ - Service relationships
386
+ - Request rates
387
+ - Error rates
388
+ - Average latencies
389
+
390
+ ## Best Practices
391
+
392
+ 1. **Sample appropriately** (1-10% in production)
393
+ 2. **Add meaningful tags** (user_id, request_id)
394
+ 3. **Propagate context** across all service boundaries
395
+ 4. **Log exceptions** in spans
396
+ 5. **Use consistent naming** for operations
397
+ 6. **Monitor tracing overhead** (<1% CPU impact)
398
+ 7. **Set up alerts** for trace errors
399
+ 8. **Implement distributed context** (baggage)
400
+ 9. **Use span events** for important milestones
401
+ 10. **Document instrumentation** standards
402
+
403
+ ## Integration with Logging
404
+
405
+ ### Correlated Logs
406
+
407
+ ```python
408
+ import logging
409
+ from opentelemetry import trace
410
+
411
+ logger = logging.getLogger(__name__)
412
+
413
+ def process_request():
414
+ span = trace.get_current_span()
415
+ trace_id = span.get_span_context().trace_id
416
+
417
+ logger.info(
418
+ "Processing request",
419
+ extra={"trace_id": format(trace_id, '032x')}
420
+ )
421
+ ```
422
+
423
+ ## Troubleshooting
424
+
425
+ **No traces appearing:**
426
+
427
+ - Check collector endpoint
428
+ - Verify network connectivity
429
+ - Check sampling configuration
430
+ - Review application logs
431
+
432
+ **High latency overhead:**
433
+
434
+ - Reduce sampling rate
435
+ - Use batch span processor
436
+ - Check exporter configuration