tapps-agents 3.5.40__py3-none-any.whl → 3.6.0__py3-none-any.whl
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.
- tapps_agents/__init__.py +2 -2
- tapps_agents/agents/__init__.py +22 -22
- tapps_agents/agents/analyst/__init__.py +5 -5
- tapps_agents/agents/architect/__init__.py +5 -5
- tapps_agents/agents/architect/agent.py +1033 -1033
- tapps_agents/agents/architect/pattern_detector.py +75 -75
- tapps_agents/agents/cleanup/__init__.py +7 -7
- tapps_agents/agents/cleanup/agent.py +445 -445
- tapps_agents/agents/debugger/__init__.py +7 -7
- tapps_agents/agents/debugger/agent.py +310 -310
- tapps_agents/agents/debugger/error_analyzer.py +437 -437
- tapps_agents/agents/designer/__init__.py +5 -5
- tapps_agents/agents/designer/agent.py +786 -786
- tapps_agents/agents/designer/visual_designer.py +638 -638
- tapps_agents/agents/documenter/__init__.py +7 -7
- tapps_agents/agents/documenter/agent.py +531 -531
- tapps_agents/agents/documenter/doc_generator.py +472 -472
- tapps_agents/agents/documenter/doc_validator.py +393 -393
- tapps_agents/agents/documenter/framework_doc_updater.py +493 -493
- tapps_agents/agents/enhancer/__init__.py +7 -7
- tapps_agents/agents/evaluator/__init__.py +7 -7
- tapps_agents/agents/evaluator/agent.py +443 -443
- tapps_agents/agents/evaluator/priority_evaluator.py +641 -641
- tapps_agents/agents/evaluator/quality_analyzer.py +147 -147
- tapps_agents/agents/evaluator/report_generator.py +344 -344
- tapps_agents/agents/evaluator/usage_analyzer.py +192 -192
- tapps_agents/agents/evaluator/workflow_analyzer.py +189 -189
- tapps_agents/agents/implementer/__init__.py +7 -7
- tapps_agents/agents/implementer/agent.py +798 -798
- tapps_agents/agents/implementer/auto_fix.py +1119 -1119
- tapps_agents/agents/implementer/code_generator.py +73 -73
- tapps_agents/agents/improver/__init__.py +1 -1
- tapps_agents/agents/improver/agent.py +753 -753
- tapps_agents/agents/ops/__init__.py +1 -1
- tapps_agents/agents/ops/agent.py +619 -619
- tapps_agents/agents/ops/dependency_analyzer.py +600 -600
- tapps_agents/agents/orchestrator/__init__.py +5 -5
- tapps_agents/agents/orchestrator/agent.py +522 -522
- tapps_agents/agents/planner/__init__.py +7 -7
- tapps_agents/agents/planner/agent.py +1127 -1127
- tapps_agents/agents/reviewer/__init__.py +24 -24
- tapps_agents/agents/reviewer/agent.py +3513 -3513
- tapps_agents/agents/reviewer/aggregator.py +213 -213
- tapps_agents/agents/reviewer/batch_review.py +448 -448
- tapps_agents/agents/reviewer/cache.py +443 -443
- tapps_agents/agents/reviewer/context7_enhancer.py +630 -630
- tapps_agents/agents/reviewer/context_detector.py +203 -203
- tapps_agents/agents/reviewer/docker_compose_validator.py +158 -158
- tapps_agents/agents/reviewer/dockerfile_validator.py +176 -176
- tapps_agents/agents/reviewer/error_handling.py +126 -126
- tapps_agents/agents/reviewer/feedback_generator.py +490 -490
- tapps_agents/agents/reviewer/influxdb_validator.py +316 -316
- tapps_agents/agents/reviewer/issue_tracking.py +169 -169
- tapps_agents/agents/reviewer/library_detector.py +295 -295
- tapps_agents/agents/reviewer/library_patterns.py +268 -268
- tapps_agents/agents/reviewer/maintainability_scorer.py +593 -593
- tapps_agents/agents/reviewer/metric_strategies.py +276 -276
- tapps_agents/agents/reviewer/mqtt_validator.py +160 -160
- tapps_agents/agents/reviewer/output_enhancer.py +105 -105
- tapps_agents/agents/reviewer/pattern_detector.py +241 -241
- tapps_agents/agents/reviewer/performance_scorer.py +357 -357
- tapps_agents/agents/reviewer/phased_review.py +516 -516
- tapps_agents/agents/reviewer/progressive_review.py +435 -435
- tapps_agents/agents/reviewer/react_scorer.py +331 -331
- tapps_agents/agents/reviewer/score_constants.py +228 -228
- tapps_agents/agents/reviewer/score_validator.py +507 -507
- tapps_agents/agents/reviewer/scorer_registry.py +373 -373
- tapps_agents/agents/reviewer/scoring.py +1566 -1566
- tapps_agents/agents/reviewer/service_discovery.py +534 -534
- tapps_agents/agents/reviewer/tools/__init__.py +41 -41
- tapps_agents/agents/reviewer/tools/parallel_executor.py +581 -581
- tapps_agents/agents/reviewer/tools/ruff_grouping.py +250 -250
- tapps_agents/agents/reviewer/tools/scoped_mypy.py +284 -284
- tapps_agents/agents/reviewer/typescript_scorer.py +1142 -1142
- tapps_agents/agents/reviewer/validation.py +208 -208
- tapps_agents/agents/reviewer/websocket_validator.py +132 -132
- tapps_agents/agents/tester/__init__.py +7 -7
- tapps_agents/agents/tester/accessibility_auditor.py +309 -309
- tapps_agents/agents/tester/agent.py +1080 -1080
- tapps_agents/agents/tester/batch_generator.py +54 -54
- tapps_agents/agents/tester/context_learner.py +51 -51
- tapps_agents/agents/tester/coverage_analyzer.py +386 -386
- tapps_agents/agents/tester/coverage_test_generator.py +290 -290
- tapps_agents/agents/tester/debug_enhancer.py +238 -238
- tapps_agents/agents/tester/device_emulator.py +241 -241
- tapps_agents/agents/tester/integration_generator.py +62 -62
- tapps_agents/agents/tester/network_recorder.py +300 -300
- tapps_agents/agents/tester/performance_monitor.py +320 -320
- tapps_agents/agents/tester/test_fixer.py +316 -316
- tapps_agents/agents/tester/test_generator.py +632 -632
- tapps_agents/agents/tester/trace_manager.py +234 -234
- tapps_agents/agents/tester/visual_regression.py +291 -291
- tapps_agents/analysis/pattern_detector.py +36 -36
- tapps_agents/beads/hydration.py +213 -213
- tapps_agents/beads/parse.py +32 -32
- tapps_agents/beads/specs.py +206 -206
- tapps_agents/cli/__init__.py +9 -9
- tapps_agents/cli/__main__.py +8 -8
- tapps_agents/cli/base.py +478 -478
- tapps_agents/cli/command_classifier.py +72 -72
- tapps_agents/cli/commands/__init__.py +2 -2
- tapps_agents/cli/commands/analyst.py +173 -173
- tapps_agents/cli/commands/architect.py +109 -109
- tapps_agents/cli/commands/cleanup_agent.py +92 -92
- tapps_agents/cli/commands/common.py +126 -126
- tapps_agents/cli/commands/debugger.py +90 -90
- tapps_agents/cli/commands/designer.py +112 -112
- tapps_agents/cli/commands/documenter.py +136 -136
- tapps_agents/cli/commands/enhancer.py +110 -110
- tapps_agents/cli/commands/evaluator.py +255 -255
- tapps_agents/cli/commands/health.py +665 -665
- tapps_agents/cli/commands/implementer.py +301 -301
- tapps_agents/cli/commands/improver.py +91 -91
- tapps_agents/cli/commands/knowledge.py +111 -111
- tapps_agents/cli/commands/learning.py +172 -172
- tapps_agents/cli/commands/observability.py +283 -283
- tapps_agents/cli/commands/ops.py +135 -135
- tapps_agents/cli/commands/orchestrator.py +116 -116
- tapps_agents/cli/commands/planner.py +237 -237
- tapps_agents/cli/commands/reviewer.py +1872 -1872
- tapps_agents/cli/commands/status.py +285 -285
- tapps_agents/cli/commands/task.py +227 -219
- tapps_agents/cli/commands/tester.py +191 -191
- tapps_agents/cli/commands/top_level.py +3586 -3586
- tapps_agents/cli/feedback.py +936 -936
- tapps_agents/cli/formatters.py +608 -608
- tapps_agents/cli/help/__init__.py +7 -7
- tapps_agents/cli/help/static_help.py +425 -425
- tapps_agents/cli/network_detection.py +110 -110
- tapps_agents/cli/output_compactor.py +274 -274
- tapps_agents/cli/parsers/__init__.py +2 -2
- tapps_agents/cli/parsers/analyst.py +186 -186
- tapps_agents/cli/parsers/architect.py +167 -167
- tapps_agents/cli/parsers/cleanup_agent.py +228 -228
- tapps_agents/cli/parsers/debugger.py +116 -116
- tapps_agents/cli/parsers/designer.py +182 -182
- tapps_agents/cli/parsers/documenter.py +134 -134
- tapps_agents/cli/parsers/enhancer.py +113 -113
- tapps_agents/cli/parsers/evaluator.py +213 -213
- tapps_agents/cli/parsers/implementer.py +168 -168
- tapps_agents/cli/parsers/improver.py +132 -132
- tapps_agents/cli/parsers/ops.py +159 -159
- tapps_agents/cli/parsers/orchestrator.py +98 -98
- tapps_agents/cli/parsers/planner.py +145 -145
- tapps_agents/cli/parsers/reviewer.py +462 -462
- tapps_agents/cli/parsers/tester.py +124 -124
- tapps_agents/cli/progress_heartbeat.py +254 -254
- tapps_agents/cli/streaming_progress.py +336 -336
- tapps_agents/cli/utils/__init__.py +6 -6
- tapps_agents/cli/utils/agent_lifecycle.py +48 -48
- tapps_agents/cli/utils/error_formatter.py +82 -82
- tapps_agents/cli/utils/error_recovery.py +188 -188
- tapps_agents/cli/utils/output_handler.py +59 -59
- tapps_agents/cli/utils/prompt_enhancer.py +319 -319
- tapps_agents/cli/validators/__init__.py +9 -9
- tapps_agents/cli/validators/command_validator.py +81 -81
- tapps_agents/context7/__init__.py +112 -112
- tapps_agents/context7/agent_integration.py +869 -869
- tapps_agents/context7/analytics.py +382 -382
- tapps_agents/context7/analytics_dashboard.py +299 -299
- tapps_agents/context7/async_cache.py +681 -681
- tapps_agents/context7/backup_client.py +958 -958
- tapps_agents/context7/cache_locking.py +194 -194
- tapps_agents/context7/cache_metadata.py +214 -214
- tapps_agents/context7/cache_prewarm.py +488 -488
- tapps_agents/context7/cache_structure.py +168 -168
- tapps_agents/context7/cache_warming.py +604 -604
- tapps_agents/context7/circuit_breaker.py +376 -376
- tapps_agents/context7/cleanup.py +461 -461
- tapps_agents/context7/commands.py +858 -858
- tapps_agents/context7/credential_validation.py +276 -276
- tapps_agents/context7/cross_reference_resolver.py +168 -168
- tapps_agents/context7/cross_references.py +424 -424
- tapps_agents/context7/doc_manager.py +225 -225
- tapps_agents/context7/fuzzy_matcher.py +369 -369
- tapps_agents/context7/kb_cache.py +404 -404
- tapps_agents/context7/language_detector.py +219 -219
- tapps_agents/context7/library_detector.py +725 -725
- tapps_agents/context7/lookup.py +738 -738
- tapps_agents/context7/metadata.py +258 -258
- tapps_agents/context7/refresh_queue.py +300 -300
- tapps_agents/context7/security.py +373 -373
- tapps_agents/context7/staleness_policies.py +278 -278
- tapps_agents/context7/tiles_integration.py +47 -47
- tapps_agents/continuous_bug_fix/__init__.py +20 -20
- tapps_agents/continuous_bug_fix/bug_finder.py +306 -306
- tapps_agents/continuous_bug_fix/bug_fix_coordinator.py +177 -177
- tapps_agents/continuous_bug_fix/commit_manager.py +178 -178
- tapps_agents/continuous_bug_fix/continuous_bug_fixer.py +322 -322
- tapps_agents/continuous_bug_fix/proactive_bug_finder.py +285 -285
- tapps_agents/core/__init__.py +298 -298
- tapps_agents/core/adaptive_cache_config.py +432 -432
- tapps_agents/core/agent_base.py +647 -647
- tapps_agents/core/agent_cache.py +466 -466
- tapps_agents/core/agent_learning.py +1865 -1865
- tapps_agents/core/analytics_dashboard.py +563 -563
- tapps_agents/core/analytics_enhancements.py +597 -597
- tapps_agents/core/anonymization.py +274 -274
- tapps_agents/core/artifact_context_builder.py +293 -0
- tapps_agents/core/ast_parser.py +228 -228
- tapps_agents/core/async_file_ops.py +402 -402
- tapps_agents/core/best_practice_consultant.py +299 -299
- tapps_agents/core/brownfield_analyzer.py +299 -299
- tapps_agents/core/brownfield_review.py +541 -541
- tapps_agents/core/browser_controller.py +513 -513
- tapps_agents/core/capability_registry.py +418 -418
- tapps_agents/core/change_impact_analyzer.py +190 -190
- tapps_agents/core/checkpoint_manager.py +377 -377
- tapps_agents/core/code_generator.py +329 -329
- tapps_agents/core/code_validator.py +276 -276
- tapps_agents/core/command_registry.py +327 -327
- tapps_agents/core/config.py +33 -0
- tapps_agents/core/context_gathering/__init__.py +2 -2
- tapps_agents/core/context_gathering/repository_explorer.py +28 -28
- tapps_agents/core/context_intelligence/__init__.py +2 -2
- tapps_agents/core/context_intelligence/relevance_scorer.py +24 -24
- tapps_agents/core/context_intelligence/token_budget_manager.py +27 -27
- tapps_agents/core/context_manager.py +240 -240
- tapps_agents/core/cursor_feedback_monitor.py +146 -146
- tapps_agents/core/cursor_verification.py +290 -290
- tapps_agents/core/customization_loader.py +280 -280
- tapps_agents/core/customization_schema.py +260 -260
- tapps_agents/core/customization_template.py +238 -238
- tapps_agents/core/debug_logger.py +124 -124
- tapps_agents/core/design_validator.py +298 -298
- tapps_agents/core/diagram_generator.py +226 -226
- tapps_agents/core/docker_utils.py +232 -232
- tapps_agents/core/document_generator.py +617 -617
- tapps_agents/core/domain_detector.py +30 -30
- tapps_agents/core/error_envelope.py +454 -454
- tapps_agents/core/error_handler.py +270 -270
- tapps_agents/core/estimation_tracker.py +189 -189
- tapps_agents/core/eval_prompt_engine.py +116 -116
- tapps_agents/core/evaluation_base.py +119 -119
- tapps_agents/core/evaluation_models.py +320 -320
- tapps_agents/core/evaluation_orchestrator.py +225 -225
- tapps_agents/core/evaluators/__init__.py +7 -7
- tapps_agents/core/evaluators/architectural_evaluator.py +205 -205
- tapps_agents/core/evaluators/behavioral_evaluator.py +160 -160
- tapps_agents/core/evaluators/performance_profile_evaluator.py +160 -160
- tapps_agents/core/evaluators/security_posture_evaluator.py +148 -148
- tapps_agents/core/evaluators/spec_compliance_evaluator.py +181 -181
- tapps_agents/core/exceptions.py +107 -107
- tapps_agents/core/expert_config_generator.py +293 -293
- tapps_agents/core/export_schema.py +202 -202
- tapps_agents/core/external_feedback_models.py +102 -102
- tapps_agents/core/external_feedback_storage.py +213 -213
- tapps_agents/core/fallback_strategy.py +314 -314
- tapps_agents/core/feedback_analyzer.py +162 -162
- tapps_agents/core/feedback_collector.py +178 -178
- tapps_agents/core/git_operations.py +445 -445
- tapps_agents/core/hardware_profiler.py +151 -151
- tapps_agents/core/instructions.py +324 -324
- tapps_agents/core/io_guardrails.py +69 -69
- tapps_agents/core/issue_manifest.py +249 -249
- tapps_agents/core/issue_schema.py +139 -139
- tapps_agents/core/json_utils.py +128 -128
- tapps_agents/core/knowledge_graph.py +446 -446
- tapps_agents/core/language_detector.py +296 -296
- tapps_agents/core/learning_confidence.py +242 -242
- tapps_agents/core/learning_dashboard.py +246 -246
- tapps_agents/core/learning_decision.py +384 -384
- tapps_agents/core/learning_explainability.py +578 -578
- tapps_agents/core/learning_export.py +287 -287
- tapps_agents/core/learning_integration.py +228 -228
- tapps_agents/core/llm_behavior.py +232 -232
- tapps_agents/core/long_duration_support.py +786 -786
- tapps_agents/core/mcp_setup.py +106 -106
- tapps_agents/core/memory_integration.py +396 -396
- tapps_agents/core/meta_learning.py +666 -666
- tapps_agents/core/module_path_sanitizer.py +199 -199
- tapps_agents/core/multi_agent_orchestrator.py +382 -382
- tapps_agents/core/network_errors.py +125 -125
- tapps_agents/core/nfr_validator.py +336 -336
- tapps_agents/core/offline_mode.py +158 -158
- tapps_agents/core/output_contracts.py +300 -300
- tapps_agents/core/output_formatter.py +300 -300
- tapps_agents/core/path_normalizer.py +174 -174
- tapps_agents/core/path_validator.py +322 -322
- tapps_agents/core/pattern_library.py +250 -250
- tapps_agents/core/performance_benchmark.py +301 -301
- tapps_agents/core/performance_monitor.py +184 -184
- tapps_agents/core/playwright_mcp_controller.py +771 -771
- tapps_agents/core/policy_loader.py +135 -135
- tapps_agents/core/progress.py +166 -166
- tapps_agents/core/project_profile.py +354 -354
- tapps_agents/core/project_type_detector.py +454 -454
- tapps_agents/core/prompt_base.py +223 -223
- tapps_agents/core/prompt_learning/__init__.py +2 -2
- tapps_agents/core/prompt_learning/learning_loop.py +24 -24
- tapps_agents/core/prompt_learning/project_prompt_store.py +25 -25
- tapps_agents/core/prompt_learning/skills_prompt_analyzer.py +35 -35
- tapps_agents/core/prompt_optimization/__init__.py +6 -6
- tapps_agents/core/prompt_optimization/ab_tester.py +114 -114
- tapps_agents/core/prompt_optimization/correlation_analyzer.py +160 -160
- tapps_agents/core/prompt_optimization/progressive_refiner.py +129 -129
- tapps_agents/core/prompt_optimization/prompt_library.py +37 -37
- tapps_agents/core/requirements_evaluator.py +431 -431
- tapps_agents/core/resource_aware_executor.py +449 -449
- tapps_agents/core/resource_monitor.py +343 -343
- tapps_agents/core/resume_handler.py +298 -298
- tapps_agents/core/retry_handler.py +197 -197
- tapps_agents/core/review_checklists.py +479 -479
- tapps_agents/core/role_loader.py +201 -201
- tapps_agents/core/role_template_loader.py +201 -201
- tapps_agents/core/runtime_mode.py +60 -60
- tapps_agents/core/security_scanner.py +342 -342
- tapps_agents/core/skill_agent_registry.py +194 -194
- tapps_agents/core/skill_integration.py +208 -208
- tapps_agents/core/skill_loader.py +492 -492
- tapps_agents/core/skill_template.py +341 -341
- tapps_agents/core/skill_validator.py +478 -478
- tapps_agents/core/stack_analyzer.py +35 -35
- tapps_agents/core/startup.py +174 -174
- tapps_agents/core/storage_manager.py +397 -397
- tapps_agents/core/storage_models.py +166 -166
- tapps_agents/core/story_evaluator.py +410 -410
- tapps_agents/core/subprocess_utils.py +170 -170
- tapps_agents/core/task_duration.py +296 -296
- tapps_agents/core/task_memory.py +582 -582
- tapps_agents/core/task_state.py +226 -226
- tapps_agents/core/tech_stack_priorities.py +208 -208
- tapps_agents/core/temp_directory.py +194 -194
- tapps_agents/core/template_merger.py +600 -600
- tapps_agents/core/template_selector.py +280 -280
- tapps_agents/core/test_generator.py +286 -286
- tapps_agents/core/tiered_context.py +253 -253
- tapps_agents/core/token_monitor.py +345 -345
- tapps_agents/core/traceability.py +254 -254
- tapps_agents/core/trajectory_tracker.py +50 -50
- tapps_agents/core/unicode_safe.py +143 -143
- tapps_agents/core/unified_cache_config.py +170 -170
- tapps_agents/core/unified_state.py +324 -324
- tapps_agents/core/validate_cursor_setup.py +237 -237
- tapps_agents/core/validation_registry.py +136 -136
- tapps_agents/core/validators/__init__.py +4 -4
- tapps_agents/core/validators/python_validator.py +87 -87
- tapps_agents/core/verification_agent.py +90 -90
- tapps_agents/core/visual_feedback.py +644 -644
- tapps_agents/core/workflow_validator.py +197 -197
- tapps_agents/core/worktree.py +367 -367
- tapps_agents/docker/__init__.py +10 -10
- tapps_agents/docker/analyzer.py +186 -186
- tapps_agents/docker/debugger.py +229 -229
- tapps_agents/docker/error_patterns.py +216 -216
- tapps_agents/epic/__init__.py +22 -22
- tapps_agents/epic/beads_sync.py +115 -115
- tapps_agents/epic/markdown_sync.py +105 -105
- tapps_agents/epic/models.py +96 -96
- tapps_agents/experts/__init__.py +163 -163
- tapps_agents/experts/agent_integration.py +243 -243
- tapps_agents/experts/auto_generator.py +331 -331
- tapps_agents/experts/base_expert.py +536 -536
- tapps_agents/experts/builtin_registry.py +261 -261
- tapps_agents/experts/business_metrics.py +565 -565
- tapps_agents/experts/cache.py +266 -266
- tapps_agents/experts/confidence_breakdown.py +306 -306
- tapps_agents/experts/confidence_calculator.py +336 -336
- tapps_agents/experts/confidence_metrics.py +236 -236
- tapps_agents/experts/domain_config.py +311 -311
- tapps_agents/experts/domain_detector.py +550 -550
- tapps_agents/experts/domain_utils.py +84 -84
- tapps_agents/experts/expert_config.py +113 -113
- tapps_agents/experts/expert_engine.py +465 -465
- tapps_agents/experts/expert_registry.py +744 -744
- tapps_agents/experts/expert_synthesizer.py +70 -70
- tapps_agents/experts/governance.py +197 -197
- tapps_agents/experts/history_logger.py +312 -312
- tapps_agents/experts/knowledge/README.md +180 -180
- tapps_agents/experts/knowledge/accessibility/accessible-forms.md +331 -331
- tapps_agents/experts/knowledge/accessibility/aria-patterns.md +344 -344
- tapps_agents/experts/knowledge/accessibility/color-contrast.md +285 -285
- tapps_agents/experts/knowledge/accessibility/keyboard-navigation.md +332 -332
- tapps_agents/experts/knowledge/accessibility/screen-readers.md +282 -282
- tapps_agents/experts/knowledge/accessibility/semantic-html.md +355 -355
- tapps_agents/experts/knowledge/accessibility/testing-accessibility.md +369 -369
- tapps_agents/experts/knowledge/accessibility/wcag-2.1.md +296 -296
- tapps_agents/experts/knowledge/accessibility/wcag-2.2.md +211 -211
- tapps_agents/experts/knowledge/agent-learning/best-practices.md +715 -715
- tapps_agents/experts/knowledge/agent-learning/pattern-extraction.md +282 -282
- tapps_agents/experts/knowledge/agent-learning/prompt-optimization.md +320 -320
- tapps_agents/experts/knowledge/ai-frameworks/model-optimization.md +90 -90
- tapps_agents/experts/knowledge/ai-frameworks/openvino-patterns.md +260 -260
- tapps_agents/experts/knowledge/api-design-integration/api-gateway-patterns.md +309 -309
- tapps_agents/experts/knowledge/api-design-integration/api-security-patterns.md +521 -521
- tapps_agents/experts/knowledge/api-design-integration/api-versioning.md +421 -421
- tapps_agents/experts/knowledge/api-design-integration/async-protocol-patterns.md +61 -61
- tapps_agents/experts/knowledge/api-design-integration/contract-testing.md +221 -221
- tapps_agents/experts/knowledge/api-design-integration/external-api-integration.md +489 -489
- tapps_agents/experts/knowledge/api-design-integration/fastapi-patterns.md +360 -360
- tapps_agents/experts/knowledge/api-design-integration/fastapi-testing.md +262 -262
- tapps_agents/experts/knowledge/api-design-integration/graphql-patterns.md +582 -582
- tapps_agents/experts/knowledge/api-design-integration/grpc-best-practices.md +499 -499
- tapps_agents/experts/knowledge/api-design-integration/mqtt-patterns.md +455 -455
- tapps_agents/experts/knowledge/api-design-integration/rate-limiting.md +507 -507
- tapps_agents/experts/knowledge/api-design-integration/restful-api-design.md +618 -618
- tapps_agents/experts/knowledge/api-design-integration/websocket-patterns.md +480 -480
- tapps_agents/experts/knowledge/cloud-infrastructure/cloud-native-patterns.md +175 -175
- tapps_agents/experts/knowledge/cloud-infrastructure/container-health-checks.md +261 -261
- tapps_agents/experts/knowledge/cloud-infrastructure/containerization.md +222 -222
- tapps_agents/experts/knowledge/cloud-infrastructure/cost-optimization.md +122 -122
- tapps_agents/experts/knowledge/cloud-infrastructure/disaster-recovery.md +153 -153
- tapps_agents/experts/knowledge/cloud-infrastructure/dockerfile-patterns.md +285 -285
- tapps_agents/experts/knowledge/cloud-infrastructure/infrastructure-as-code.md +187 -187
- tapps_agents/experts/knowledge/cloud-infrastructure/kubernetes-patterns.md +253 -253
- tapps_agents/experts/knowledge/cloud-infrastructure/multi-cloud-strategies.md +155 -155
- tapps_agents/experts/knowledge/cloud-infrastructure/serverless-architecture.md +200 -200
- tapps_agents/experts/knowledge/code-quality-analysis/README.md +16 -16
- tapps_agents/experts/knowledge/code-quality-analysis/code-metrics.md +137 -137
- tapps_agents/experts/knowledge/code-quality-analysis/complexity-analysis.md +181 -181
- tapps_agents/experts/knowledge/code-quality-analysis/technical-debt-patterns.md +191 -191
- tapps_agents/experts/knowledge/data-privacy-compliance/anonymization.md +313 -313
- tapps_agents/experts/knowledge/data-privacy-compliance/ccpa.md +255 -255
- tapps_agents/experts/knowledge/data-privacy-compliance/consent-management.md +282 -282
- tapps_agents/experts/knowledge/data-privacy-compliance/data-minimization.md +275 -275
- tapps_agents/experts/knowledge/data-privacy-compliance/data-retention.md +297 -297
- tapps_agents/experts/knowledge/data-privacy-compliance/data-subject-rights.md +383 -383
- tapps_agents/experts/knowledge/data-privacy-compliance/encryption-privacy.md +285 -285
- tapps_agents/experts/knowledge/data-privacy-compliance/gdpr.md +344 -344
- tapps_agents/experts/knowledge/data-privacy-compliance/hipaa.md +385 -385
- tapps_agents/experts/knowledge/data-privacy-compliance/privacy-by-design.md +280 -280
- tapps_agents/experts/knowledge/database-data-management/acid-vs-cap.md +164 -164
- tapps_agents/experts/knowledge/database-data-management/backup-and-recovery.md +182 -182
- tapps_agents/experts/knowledge/database-data-management/data-modeling.md +172 -172
- tapps_agents/experts/knowledge/database-data-management/database-design.md +187 -187
- tapps_agents/experts/knowledge/database-data-management/flux-query-optimization.md +342 -342
- tapps_agents/experts/knowledge/database-data-management/influxdb-connection-patterns.md +432 -432
- tapps_agents/experts/knowledge/database-data-management/influxdb-patterns.md +442 -442
- tapps_agents/experts/knowledge/database-data-management/migration-strategies.md +216 -216
- tapps_agents/experts/knowledge/database-data-management/nosql-patterns.md +259 -259
- tapps_agents/experts/knowledge/database-data-management/scalability-patterns.md +184 -184
- tapps_agents/experts/knowledge/database-data-management/sql-optimization.md +175 -175
- tapps_agents/experts/knowledge/database-data-management/time-series-modeling.md +444 -444
- tapps_agents/experts/knowledge/development-workflow/README.md +16 -16
- tapps_agents/experts/knowledge/development-workflow/automation-best-practices.md +216 -216
- tapps_agents/experts/knowledge/development-workflow/build-strategies.md +198 -198
- tapps_agents/experts/knowledge/development-workflow/deployment-patterns.md +205 -205
- tapps_agents/experts/knowledge/development-workflow/git-workflows.md +205 -205
- tapps_agents/experts/knowledge/documentation-knowledge-management/README.md +16 -16
- tapps_agents/experts/knowledge/documentation-knowledge-management/api-documentation-patterns.md +231 -231
- tapps_agents/experts/knowledge/documentation-knowledge-management/documentation-standards.md +191 -191
- tapps_agents/experts/knowledge/documentation-knowledge-management/knowledge-management.md +171 -171
- tapps_agents/experts/knowledge/documentation-knowledge-management/technical-writing-guide.md +192 -192
- tapps_agents/experts/knowledge/observability-monitoring/alerting-patterns.md +461 -461
- tapps_agents/experts/knowledge/observability-monitoring/apm-tools.md +459 -459
- tapps_agents/experts/knowledge/observability-monitoring/distributed-tracing.md +367 -367
- tapps_agents/experts/knowledge/observability-monitoring/logging-strategies.md +478 -478
- tapps_agents/experts/knowledge/observability-monitoring/metrics-and-monitoring.md +510 -510
- tapps_agents/experts/knowledge/observability-monitoring/observability-best-practices.md +492 -492
- tapps_agents/experts/knowledge/observability-monitoring/open-telemetry.md +573 -573
- tapps_agents/experts/knowledge/observability-monitoring/slo-sli-sla.md +419 -419
- tapps_agents/experts/knowledge/performance/anti-patterns.md +284 -284
- tapps_agents/experts/knowledge/performance/api-performance.md +256 -256
- tapps_agents/experts/knowledge/performance/caching.md +327 -327
- tapps_agents/experts/knowledge/performance/database-performance.md +252 -252
- tapps_agents/experts/knowledge/performance/optimization-patterns.md +327 -327
- tapps_agents/experts/knowledge/performance/profiling.md +297 -297
- tapps_agents/experts/knowledge/performance/resource-management.md +293 -293
- tapps_agents/experts/knowledge/performance/scalability.md +306 -306
- tapps_agents/experts/knowledge/security/owasp-top10.md +209 -209
- tapps_agents/experts/knowledge/security/secure-coding-practices.md +207 -207
- tapps_agents/experts/knowledge/security/threat-modeling.md +220 -220
- tapps_agents/experts/knowledge/security/vulnerability-patterns.md +342 -342
- tapps_agents/experts/knowledge/software-architecture/docker-compose-patterns.md +314 -314
- tapps_agents/experts/knowledge/software-architecture/microservices-patterns.md +379 -379
- tapps_agents/experts/knowledge/software-architecture/service-communication.md +316 -316
- tapps_agents/experts/knowledge/testing/best-practices.md +310 -310
- tapps_agents/experts/knowledge/testing/coverage-analysis.md +293 -293
- tapps_agents/experts/knowledge/testing/mocking.md +256 -256
- tapps_agents/experts/knowledge/testing/test-automation.md +276 -276
- tapps_agents/experts/knowledge/testing/test-data.md +271 -271
- tapps_agents/experts/knowledge/testing/test-design-patterns.md +280 -280
- tapps_agents/experts/knowledge/testing/test-maintenance.md +236 -236
- tapps_agents/experts/knowledge/testing/test-strategies.md +311 -311
- tapps_agents/experts/knowledge/user-experience/information-architecture.md +325 -325
- tapps_agents/experts/knowledge/user-experience/interaction-design.md +363 -363
- tapps_agents/experts/knowledge/user-experience/prototyping.md +293 -293
- tapps_agents/experts/knowledge/user-experience/usability-heuristics.md +337 -337
- tapps_agents/experts/knowledge/user-experience/usability-testing.md +311 -311
- tapps_agents/experts/knowledge/user-experience/user-journeys.md +296 -296
- tapps_agents/experts/knowledge/user-experience/user-research.md +373 -373
- tapps_agents/experts/knowledge/user-experience/ux-principles.md +340 -340
- tapps_agents/experts/knowledge_freshness.py +321 -321
- tapps_agents/experts/knowledge_ingestion.py +438 -438
- tapps_agents/experts/knowledge_need_detector.py +93 -93
- tapps_agents/experts/knowledge_validator.py +382 -382
- tapps_agents/experts/observability.py +440 -440
- tapps_agents/experts/passive_notifier.py +238 -238
- tapps_agents/experts/proactive_orchestrator.py +32 -32
- tapps_agents/experts/rag_chunker.py +205 -205
- tapps_agents/experts/rag_embedder.py +152 -152
- tapps_agents/experts/rag_evaluation.py +299 -299
- tapps_agents/experts/rag_index.py +303 -303
- tapps_agents/experts/rag_metrics.py +293 -293
- tapps_agents/experts/rag_safety.py +263 -263
- tapps_agents/experts/report_generator.py +296 -296
- tapps_agents/experts/setup_wizard.py +441 -441
- tapps_agents/experts/simple_rag.py +431 -431
- tapps_agents/experts/vector_rag.py +354 -354
- tapps_agents/experts/weight_distributor.py +304 -304
- tapps_agents/health/__init__.py +24 -24
- tapps_agents/health/base.py +75 -75
- tapps_agents/health/checks/__init__.py +22 -22
- tapps_agents/health/checks/automation.py +127 -127
- tapps_agents/health/checks/context7_cache.py +210 -210
- tapps_agents/health/checks/environment.py +116 -116
- tapps_agents/health/checks/execution.py +170 -170
- tapps_agents/health/checks/knowledge_base.py +187 -187
- tapps_agents/health/checks/outcomes.py +324 -324
- tapps_agents/health/collector.py +280 -280
- tapps_agents/health/dashboard.py +137 -137
- tapps_agents/health/metrics.py +151 -151
- tapps_agents/health/orchestrator.py +271 -271
- tapps_agents/health/registry.py +166 -166
- tapps_agents/hooks/__init__.py +33 -33
- tapps_agents/hooks/config.py +140 -140
- tapps_agents/hooks/events.py +135 -135
- tapps_agents/hooks/executor.py +128 -128
- tapps_agents/hooks/manager.py +143 -143
- tapps_agents/integration/__init__.py +8 -8
- tapps_agents/integration/service_integrator.py +121 -121
- tapps_agents/integrations/__init__.py +10 -10
- tapps_agents/integrations/clawdbot.py +525 -525
- tapps_agents/integrations/memory_bridge.py +356 -356
- tapps_agents/mcp/__init__.py +18 -18
- tapps_agents/mcp/gateway.py +112 -112
- tapps_agents/mcp/servers/__init__.py +13 -13
- tapps_agents/mcp/servers/analysis.py +204 -204
- tapps_agents/mcp/servers/context7.py +198 -198
- tapps_agents/mcp/servers/filesystem.py +218 -218
- tapps_agents/mcp/servers/git.py +201 -201
- tapps_agents/mcp/tool_registry.py +115 -115
- tapps_agents/quality/__init__.py +54 -54
- tapps_agents/quality/coverage_analyzer.py +379 -379
- tapps_agents/quality/enforcement.py +82 -82
- tapps_agents/quality/gates/__init__.py +37 -37
- tapps_agents/quality/gates/approval_gate.py +255 -255
- tapps_agents/quality/gates/base.py +84 -84
- tapps_agents/quality/gates/exceptions.py +43 -43
- tapps_agents/quality/gates/policy_gate.py +195 -195
- tapps_agents/quality/gates/registry.py +239 -239
- tapps_agents/quality/gates/security_gate.py +156 -156
- tapps_agents/quality/quality_gates.py +369 -369
- tapps_agents/quality/secret_scanner.py +335 -335
- tapps_agents/session/__init__.py +19 -19
- tapps_agents/session/manager.py +256 -256
- tapps_agents/simple_mode/__init__.py +66 -66
- tapps_agents/simple_mode/agent_contracts.py +357 -357
- tapps_agents/simple_mode/beads_hooks.py +151 -151
- tapps_agents/simple_mode/code_snippet_handler.py +382 -382
- tapps_agents/simple_mode/documentation_manager.py +395 -395
- tapps_agents/simple_mode/documentation_reader.py +187 -187
- tapps_agents/simple_mode/file_inference.py +292 -292
- tapps_agents/simple_mode/framework_change_detector.py +268 -268
- tapps_agents/simple_mode/intent_parser.py +510 -510
- tapps_agents/simple_mode/learning_progression.py +358 -358
- tapps_agents/simple_mode/nl_handler.py +700 -700
- tapps_agents/simple_mode/onboarding.py +253 -253
- tapps_agents/simple_mode/orchestrators/__init__.py +38 -38
- tapps_agents/simple_mode/orchestrators/base.py +185 -185
- tapps_agents/simple_mode/orchestrators/breakdown_orchestrator.py +49 -49
- tapps_agents/simple_mode/orchestrators/brownfield_orchestrator.py +135 -135
- tapps_agents/simple_mode/orchestrators/build_orchestrator.py +2700 -2667
- tapps_agents/simple_mode/orchestrators/deliverable_checklist.py +349 -349
- tapps_agents/simple_mode/orchestrators/enhance_orchestrator.py +53 -53
- tapps_agents/simple_mode/orchestrators/epic_orchestrator.py +122 -122
- tapps_agents/simple_mode/orchestrators/explore_orchestrator.py +184 -184
- tapps_agents/simple_mode/orchestrators/fix_orchestrator.py +723 -723
- tapps_agents/simple_mode/orchestrators/plan_analysis_orchestrator.py +206 -206
- tapps_agents/simple_mode/orchestrators/pr_orchestrator.py +237 -237
- tapps_agents/simple_mode/orchestrators/refactor_orchestrator.py +222 -222
- tapps_agents/simple_mode/orchestrators/requirements_tracer.py +262 -262
- tapps_agents/simple_mode/orchestrators/resume_orchestrator.py +210 -210
- tapps_agents/simple_mode/orchestrators/review_orchestrator.py +161 -161
- tapps_agents/simple_mode/orchestrators/test_orchestrator.py +82 -82
- tapps_agents/simple_mode/output_aggregator.py +340 -340
- tapps_agents/simple_mode/result_formatters.py +598 -598
- tapps_agents/simple_mode/step_dependencies.py +382 -382
- tapps_agents/simple_mode/step_results.py +276 -276
- tapps_agents/simple_mode/streaming.py +388 -388
- tapps_agents/simple_mode/variations.py +129 -129
- tapps_agents/simple_mode/visual_feedback.py +238 -238
- tapps_agents/simple_mode/zero_config.py +274 -274
- tapps_agents/suggestions/__init__.py +8 -8
- tapps_agents/suggestions/inline_suggester.py +52 -52
- tapps_agents/templates/__init__.py +8 -8
- tapps_agents/templates/microservice_generator.py +274 -274
- tapps_agents/utils/env_validator.py +291 -291
- tapps_agents/workflow/__init__.py +171 -171
- tapps_agents/workflow/acceptance_verifier.py +132 -132
- tapps_agents/workflow/agent_handlers/__init__.py +41 -41
- tapps_agents/workflow/agent_handlers/analyst_handler.py +75 -75
- tapps_agents/workflow/agent_handlers/architect_handler.py +107 -107
- tapps_agents/workflow/agent_handlers/base.py +84 -84
- tapps_agents/workflow/agent_handlers/debugger_handler.py +100 -100
- tapps_agents/workflow/agent_handlers/designer_handler.py +110 -110
- tapps_agents/workflow/agent_handlers/documenter_handler.py +94 -94
- tapps_agents/workflow/agent_handlers/implementer_handler.py +235 -235
- tapps_agents/workflow/agent_handlers/ops_handler.py +62 -62
- tapps_agents/workflow/agent_handlers/orchestrator_handler.py +43 -43
- tapps_agents/workflow/agent_handlers/planner_handler.py +98 -98
- tapps_agents/workflow/agent_handlers/registry.py +119 -119
- tapps_agents/workflow/agent_handlers/reviewer_handler.py +119 -119
- tapps_agents/workflow/agent_handlers/tester_handler.py +69 -69
- tapps_agents/workflow/analytics_accessor.py +337 -337
- tapps_agents/workflow/analytics_alerts.py +416 -416
- tapps_agents/workflow/analytics_dashboard_cursor.py +281 -281
- tapps_agents/workflow/analytics_dual_write.py +103 -103
- tapps_agents/workflow/analytics_integration.py +119 -119
- tapps_agents/workflow/analytics_query_parser.py +278 -278
- tapps_agents/workflow/analytics_visualizer.py +259 -259
- tapps_agents/workflow/artifact_helper.py +204 -204
- tapps_agents/workflow/audit_logger.py +263 -263
- tapps_agents/workflow/auto_execution_config.py +340 -340
- tapps_agents/workflow/auto_progression.py +586 -586
- tapps_agents/workflow/branch_cleanup.py +349 -349
- tapps_agents/workflow/checkpoint.py +256 -256
- tapps_agents/workflow/checkpoint_manager.py +178 -178
- tapps_agents/workflow/code_artifact.py +179 -179
- tapps_agents/workflow/common_enums.py +96 -96
- tapps_agents/workflow/confirmation_handler.py +130 -130
- tapps_agents/workflow/context_analyzer.py +222 -222
- tapps_agents/workflow/context_artifact.py +230 -230
- tapps_agents/workflow/cursor_chat.py +94 -94
- tapps_agents/workflow/cursor_executor.py +2337 -2196
- tapps_agents/workflow/cursor_skill_helper.py +516 -516
- tapps_agents/workflow/dependency_resolver.py +244 -244
- tapps_agents/workflow/design_artifact.py +156 -156
- tapps_agents/workflow/detector.py +751 -751
- tapps_agents/workflow/direct_execution_fallback.py +301 -301
- tapps_agents/workflow/docs_artifact.py +168 -168
- tapps_agents/workflow/enforcer.py +389 -389
- tapps_agents/workflow/enhancement_artifact.py +142 -142
- tapps_agents/workflow/error_recovery.py +806 -806
- tapps_agents/workflow/event_bus.py +183 -183
- tapps_agents/workflow/event_log.py +612 -612
- tapps_agents/workflow/events.py +63 -63
- tapps_agents/workflow/exceptions.py +43 -43
- tapps_agents/workflow/execution_graph.py +498 -498
- tapps_agents/workflow/execution_plan.py +126 -126
- tapps_agents/workflow/file_utils.py +186 -186
- tapps_agents/workflow/gate_evaluator.py +182 -182
- tapps_agents/workflow/gate_integration.py +200 -200
- tapps_agents/workflow/graph_visualizer.py +130 -130
- tapps_agents/workflow/health_checker.py +206 -206
- tapps_agents/workflow/logging_helper.py +243 -243
- tapps_agents/workflow/manifest.py +582 -582
- tapps_agents/workflow/marker_writer.py +250 -250
- tapps_agents/workflow/message_formatter.py +188 -188
- tapps_agents/workflow/messaging.py +325 -325
- tapps_agents/workflow/metadata_models.py +91 -91
- tapps_agents/workflow/metrics_integration.py +226 -226
- tapps_agents/workflow/migration_utils.py +116 -116
- tapps_agents/workflow/models.py +148 -111
- tapps_agents/workflow/nlp_config.py +198 -198
- tapps_agents/workflow/nlp_error_handler.py +207 -207
- tapps_agents/workflow/nlp_executor.py +163 -163
- tapps_agents/workflow/nlp_parser.py +528 -528
- tapps_agents/workflow/observability_dashboard.py +451 -451
- tapps_agents/workflow/observer.py +170 -170
- tapps_agents/workflow/ops_artifact.py +257 -257
- tapps_agents/workflow/output_passing.py +214 -214
- tapps_agents/workflow/parallel_executor.py +463 -463
- tapps_agents/workflow/planning_artifact.py +179 -179
- tapps_agents/workflow/preset_loader.py +285 -285
- tapps_agents/workflow/preset_recommender.py +270 -270
- tapps_agents/workflow/progress_logger.py +145 -145
- tapps_agents/workflow/progress_manager.py +303 -303
- tapps_agents/workflow/progress_monitor.py +186 -186
- tapps_agents/workflow/progress_updates.py +423 -423
- tapps_agents/workflow/quality_artifact.py +158 -158
- tapps_agents/workflow/quality_loopback.py +101 -101
- tapps_agents/workflow/recommender.py +387 -387
- tapps_agents/workflow/remediation_loop.py +166 -166
- tapps_agents/workflow/result_aggregator.py +300 -300
- tapps_agents/workflow/review_artifact.py +185 -185
- tapps_agents/workflow/schema_validator.py +522 -522
- tapps_agents/workflow/session_handoff.py +178 -178
- tapps_agents/workflow/skill_invoker.py +648 -648
- tapps_agents/workflow/state_manager.py +756 -756
- tapps_agents/workflow/state_persistence_config.py +331 -331
- tapps_agents/workflow/status_monitor.py +449 -449
- tapps_agents/workflow/step_checkpoint.py +314 -314
- tapps_agents/workflow/step_details.py +201 -201
- tapps_agents/workflow/story_models.py +147 -147
- tapps_agents/workflow/streaming.py +416 -416
- tapps_agents/workflow/suggestion_engine.py +552 -552
- tapps_agents/workflow/testing_artifact.py +186 -186
- tapps_agents/workflow/timeline.py +158 -158
- tapps_agents/workflow/token_integration.py +209 -209
- tapps_agents/workflow/validation.py +217 -217
- tapps_agents/workflow/visual_feedback.py +391 -391
- tapps_agents/workflow/workflow_chain.py +95 -95
- tapps_agents/workflow/workflow_summary.py +219 -219
- tapps_agents/workflow/worktree_manager.py +724 -724
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/METADATA +672 -672
- tapps_agents-3.6.0.dist-info/RECORD +758 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/licenses/LICENSE +22 -22
- tapps_agents/health/checks/outcomes.backup_20260204_064058.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064256.py +0 -324
- tapps_agents/health/checks/outcomes.backup_20260204_064600.py +0 -324
- tapps_agents-3.5.40.dist-info/RECORD +0 -760
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/WHEEL +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/entry_points.txt +0 -0
- {tapps_agents-3.5.40.dist-info → tapps_agents-3.6.0.dist-info}/top_level.txt +0 -0
|
@@ -1,573 +1,573 @@
|
|
|
1
|
-
# OpenTelemetry Standards and Instrumentation
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
OpenTelemetry is a collection of APIs, SDKs, and tools used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis to understand software performance and behavior.
|
|
6
|
-
|
|
7
|
-
## Key Concepts
|
|
8
|
-
|
|
9
|
-
### OpenTelemetry Components
|
|
10
|
-
|
|
11
|
-
**APIs:**
|
|
12
|
-
- Language-specific APIs for instrumentation
|
|
13
|
-
- Vendor-neutral interface
|
|
14
|
-
- Standard abstractions
|
|
15
|
-
|
|
16
|
-
**SDKs:**
|
|
17
|
-
- Implementation of APIs
|
|
18
|
-
- Configuration and setup
|
|
19
|
-
- Resource detection
|
|
20
|
-
- Exporters
|
|
21
|
-
|
|
22
|
-
**Collectors:**
|
|
23
|
-
- Receives, processes, and exports telemetry data
|
|
24
|
-
- Vendor-neutral
|
|
25
|
-
- Flexible routing and processing
|
|
26
|
-
|
|
27
|
-
**Instrumentation Libraries:**
|
|
28
|
-
- Auto-instrumentation for common frameworks
|
|
29
|
-
- Manual instrumentation helpers
|
|
30
|
-
- Language-specific implementations
|
|
31
|
-
|
|
32
|
-
## Architecture
|
|
33
|
-
|
|
34
|
-
### Data Flow
|
|
35
|
-
|
|
36
|
-
```
|
|
37
|
-
Application → OpenTelemetry SDK → OTLP Exporter → Collector → Backend
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
**Components:**
|
|
41
|
-
1. **Instrumentation:** Code in application
|
|
42
|
-
2. **SDK:** Collects and processes data
|
|
43
|
-
3. **Exporter:** Sends to collector or backend
|
|
44
|
-
4. **Collector:** Receives, processes, routes data
|
|
45
|
-
5. **Backend:** Storage and analysis (Jaeger, Prometheus, etc.)
|
|
46
|
-
|
|
47
|
-
### Signals
|
|
48
|
-
|
|
49
|
-
**Traces:**
|
|
50
|
-
- Distributed tracing
|
|
51
|
-
- Request flow through services
|
|
52
|
-
- Span-based model
|
|
53
|
-
|
|
54
|
-
**Metrics:**
|
|
55
|
-
- Time-series measurements
|
|
56
|
-
- Aggregated data points
|
|
57
|
-
- Counter, gauge, histogram
|
|
58
|
-
|
|
59
|
-
**Logs:**
|
|
60
|
-
- Event records
|
|
61
|
-
- Structured logging
|
|
62
|
-
- Correlation with traces
|
|
63
|
-
|
|
64
|
-
## Language Support
|
|
65
|
-
|
|
66
|
-
### Python
|
|
67
|
-
|
|
68
|
-
**Installation:**
|
|
69
|
-
```bash
|
|
70
|
-
pip install opentelemetry-api opentelemetry-sdk
|
|
71
|
-
pip install opentelemetry-instrumentation
|
|
72
|
-
pip install opentelemetry-exporter-otlp
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
**Basic Setup:**
|
|
76
|
-
```python
|
|
77
|
-
from opentelemetry import trace
|
|
78
|
-
from opentelemetry.sdk.trace import TracerProvider
|
|
79
|
-
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
80
|
-
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
81
|
-
|
|
82
|
-
# Set up tracer provider
|
|
83
|
-
trace.set_tracer_provider(TracerProvider())
|
|
84
|
-
|
|
85
|
-
# Add exporter
|
|
86
|
-
otlp_exporter = OTLPSpanExporter(endpoint="http://collector:4317")
|
|
87
|
-
span_processor = BatchSpanProcessor(otlp_exporter)
|
|
88
|
-
trace.get_tracer_provider().add_span_processor(span_processor)
|
|
89
|
-
|
|
90
|
-
# Get tracer
|
|
91
|
-
tracer = trace.get_tracer(__name__)
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Instrumentation:**
|
|
95
|
-
```python
|
|
96
|
-
from opentelemetry import trace
|
|
97
|
-
|
|
98
|
-
tracer = trace.get_tracer(__name__)
|
|
99
|
-
|
|
100
|
-
@tracer.start_as_current_span("operation")
|
|
101
|
-
def my_function():
|
|
102
|
-
span = trace.get_current_span()
|
|
103
|
-
span.set_attribute("custom.attribute", "value")
|
|
104
|
-
# Your code
|
|
105
|
-
pass
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### JavaScript/Node.js
|
|
109
|
-
|
|
110
|
-
**Installation:**
|
|
111
|
-
```bash
|
|
112
|
-
npm install @opentelemetry/api
|
|
113
|
-
npm install @opentelemetry/sdk-node
|
|
114
|
-
npm install @opentelemetry/exporter-otlp-http
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Setup:**
|
|
118
|
-
```javascript
|
|
119
|
-
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
120
|
-
const { OTLPTraceExporter } = require('@opentelemetry/exporter-otlp-http');
|
|
121
|
-
const { Resource } = require('@opentelemetry/resources');
|
|
122
|
-
|
|
123
|
-
const sdk = new NodeSDK({
|
|
124
|
-
resource: new Resource({
|
|
125
|
-
'service.name': 'my-service',
|
|
126
|
-
'service.version': '1.0.0',
|
|
127
|
-
}),
|
|
128
|
-
traceExporter: new OTLPTraceExporter({
|
|
129
|
-
url: 'http://collector:4318/v1/traces',
|
|
130
|
-
}),
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
sdk.start();
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
### Java
|
|
137
|
-
|
|
138
|
-
**Dependencies:**
|
|
139
|
-
```xml
|
|
140
|
-
<dependency>
|
|
141
|
-
<groupId>io.opentelemetry</groupId>
|
|
142
|
-
<artifactId>opentelemetry-api</artifactId>
|
|
143
|
-
</dependency>
|
|
144
|
-
<dependency>
|
|
145
|
-
<groupId>io.opentelemetry</groupId>
|
|
146
|
-
<artifactId>opentelemetry-sdk</artifactId>
|
|
147
|
-
</dependency>
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**Setup:**
|
|
151
|
-
```java
|
|
152
|
-
import io.opentelemetry.api.OpenTelemetry;
|
|
153
|
-
import io.opentelemetry.api.trace.Tracer;
|
|
154
|
-
|
|
155
|
-
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
|
|
156
|
-
.setTracerProvider(
|
|
157
|
-
SdkTracerProvider.builder()
|
|
158
|
-
.addSpanProcessor(BatchSpanProcessor.builder(
|
|
159
|
-
OtlpGrpcSpanExporter.builder()
|
|
160
|
-
.setEndpoint("http://collector:4317")
|
|
161
|
-
.build())
|
|
162
|
-
.build())
|
|
163
|
-
.build())
|
|
164
|
-
.build();
|
|
165
|
-
|
|
166
|
-
Tracer tracer = openTelemetry.getTracer("my-service");
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
### Go
|
|
170
|
-
|
|
171
|
-
**Installation:**
|
|
172
|
-
```bash
|
|
173
|
-
go get go.opentelemetry.io/otel
|
|
174
|
-
go get go.opentelemetry.io/otel/sdk
|
|
175
|
-
go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Setup:**
|
|
179
|
-
```go
|
|
180
|
-
import (
|
|
181
|
-
"go.opentelemetry.io/otel"
|
|
182
|
-
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
183
|
-
"go.opentelemetry.io/otel/sdk/trace"
|
|
184
|
-
)
|
|
185
|
-
|
|
186
|
-
exporter, err := otlptracegrpc.New(context.Background(),
|
|
187
|
-
otlptracegrpc.WithEndpoint("collector:4317"),
|
|
188
|
-
)
|
|
189
|
-
if err != nil {
|
|
190
|
-
log.Fatal(err)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
tp := trace.NewTracerProvider(
|
|
194
|
-
trace.WithBatcher(exporter),
|
|
195
|
-
)
|
|
196
|
-
otel.SetTracerProvider(tp)
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
## Automatic Instrumentation
|
|
200
|
-
|
|
201
|
-
### Python Auto-Instrumentation
|
|
202
|
-
|
|
203
|
-
**Install Packages:**
|
|
204
|
-
```bash
|
|
205
|
-
pip install opentelemetry-instrumentation-requests
|
|
206
|
-
pip install opentelemetry-instrumentation-flask
|
|
207
|
-
pip install opentelemetry-instrumentation-sqlalchemy
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Use Auto-Instrumentation:**
|
|
211
|
-
```python
|
|
212
|
-
from opentelemetry.instrumentation.requests import RequestsInstrumentor
|
|
213
|
-
from opentelemetry.instrumentation.flask import FlaskInstrumentor
|
|
214
|
-
from flask import Flask
|
|
215
|
-
|
|
216
|
-
# Auto-instrument requests library
|
|
217
|
-
RequestsInstrumentor().instrument()
|
|
218
|
-
|
|
219
|
-
# Auto-instrument Flask
|
|
220
|
-
app = Flask(__name__)
|
|
221
|
-
FlaskInstrumentor().instrument_app(app)
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
**Command-Line Instrumentation:**
|
|
225
|
-
```bash
|
|
226
|
-
opentelemetry-instrument --traces_exporter otlp \
|
|
227
|
-
--service_name my-service \
|
|
228
|
-
python my_app.py
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
### Node.js Auto-Instrumentation
|
|
232
|
-
|
|
233
|
-
**Install:**
|
|
234
|
-
```bash
|
|
235
|
-
npm install @opentelemetry/auto-instrumentations-node
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
**Setup:**
|
|
239
|
-
```javascript
|
|
240
|
-
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
241
|
-
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
|
242
|
-
|
|
243
|
-
const sdk = new NodeSDK({
|
|
244
|
-
instrumentations: [getNodeAutoInstrumentations()],
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
sdk.start();
|
|
248
|
-
```
|
|
249
|
-
|
|
250
|
-
## Manual Instrumentation
|
|
251
|
-
|
|
252
|
-
### Creating Spans
|
|
253
|
-
|
|
254
|
-
**Python:**
|
|
255
|
-
```python
|
|
256
|
-
from opentelemetry import trace
|
|
257
|
-
|
|
258
|
-
tracer = trace.get_tracer(__name__)
|
|
259
|
-
|
|
260
|
-
def process_order(order_id: str):
|
|
261
|
-
with tracer.start_as_current_span("process_order") as span:
|
|
262
|
-
span.set_attribute("order.id", order_id)
|
|
263
|
-
|
|
264
|
-
try:
|
|
265
|
-
result = validate_order(order_id)
|
|
266
|
-
span.set_status(trace.Status(trace.StatusCode.OK))
|
|
267
|
-
return result
|
|
268
|
-
except Exception as e:
|
|
269
|
-
span.record_exception(e)
|
|
270
|
-
span.set_status(trace.Status(trace.StatusCode.ERROR, str(e)))
|
|
271
|
-
raise
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
### Span Attributes
|
|
275
|
-
|
|
276
|
-
**Semantic Conventions:**
|
|
277
|
-
```python
|
|
278
|
-
span.set_attribute("http.method", "GET")
|
|
279
|
-
span.set_attribute("http.url", "/api/users")
|
|
280
|
-
span.set_attribute("http.status_code", 200)
|
|
281
|
-
span.set_attribute("db.system", "postgresql")
|
|
282
|
-
span.set_attribute("db.name", "users")
|
|
283
|
-
span.set_attribute("db.operation", "SELECT")
|
|
284
|
-
span.set_attribute("net.peer.ip", "192.168.1.1")
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
**Custom Attributes:**
|
|
288
|
-
```python
|
|
289
|
-
span.set_attribute("business.order_id", order_id)
|
|
290
|
-
span.set_attribute("business.user_tier", "premium")
|
|
291
|
-
span.set_attribute("business.payment_method", "credit_card")
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
### Events
|
|
295
|
-
|
|
296
|
-
**Add Events to Spans:**
|
|
297
|
-
```python
|
|
298
|
-
span.add_event("order.validated", {
|
|
299
|
-
"validation_result": "success",
|
|
300
|
-
"items_count": 5
|
|
301
|
-
})
|
|
302
|
-
|
|
303
|
-
span.add_event("payment.processed", {
|
|
304
|
-
"payment_method": "credit_card",
|
|
305
|
-
"amount": 99.99
|
|
306
|
-
})
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
## Context Propagation
|
|
310
|
-
|
|
311
|
-
### W3C Trace Context
|
|
312
|
-
|
|
313
|
-
**Propagate Across Services:**
|
|
314
|
-
```python
|
|
315
|
-
from opentelemetry.propagate import inject, extract
|
|
316
|
-
|
|
317
|
-
# Client: Inject context
|
|
318
|
-
headers = {}
|
|
319
|
-
inject(headers)
|
|
320
|
-
response = requests.get(url, headers=headers)
|
|
321
|
-
|
|
322
|
-
# Server: Extract context
|
|
323
|
-
context = extract(request.headers)
|
|
324
|
-
tracer = trace.get_tracer(__name__)
|
|
325
|
-
with tracer.start_as_current_span("handle_request", context=context):
|
|
326
|
-
# Process request
|
|
327
|
-
pass
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
### Baggage
|
|
331
|
-
|
|
332
|
-
**Propagate Custom Data:**
|
|
333
|
-
```python
|
|
334
|
-
from opentelemetry import baggage
|
|
335
|
-
|
|
336
|
-
# Set baggage
|
|
337
|
-
ctx = baggage.set_baggage("user.id", "user123")
|
|
338
|
-
ctx = baggage.set_baggage("experiment.flag", "true", context=ctx)
|
|
339
|
-
|
|
340
|
-
# Use baggage
|
|
341
|
-
user_id = baggage.get_baggage("user.id", context=ctx)
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
## Metrics
|
|
345
|
-
|
|
346
|
-
### Counter
|
|
347
|
-
|
|
348
|
-
```python
|
|
349
|
-
from opentelemetry import metrics
|
|
350
|
-
|
|
351
|
-
meter = metrics.get_meter(__name__)
|
|
352
|
-
counter = meter.create_counter(
|
|
353
|
-
"requests_total",
|
|
354
|
-
description="Total number of requests"
|
|
355
|
-
)
|
|
356
|
-
|
|
357
|
-
counter.add(1, {"method": "GET", "status": "200"})
|
|
358
|
-
```
|
|
359
|
-
|
|
360
|
-
### Gauge
|
|
361
|
-
|
|
362
|
-
```python
|
|
363
|
-
gauge = meter.create_up_down_counter(
|
|
364
|
-
"active_connections",
|
|
365
|
-
description="Number of active connections"
|
|
366
|
-
)
|
|
367
|
-
|
|
368
|
-
gauge.add(1) # Increment
|
|
369
|
-
gauge.add(-1) # Decrement
|
|
370
|
-
```
|
|
371
|
-
|
|
372
|
-
### Histogram
|
|
373
|
-
|
|
374
|
-
```python
|
|
375
|
-
histogram = meter.create_histogram(
|
|
376
|
-
"request_duration",
|
|
377
|
-
description="Request duration",
|
|
378
|
-
unit="ms"
|
|
379
|
-
)
|
|
380
|
-
|
|
381
|
-
histogram.record(245, {"method": "GET", "endpoint": "/api/users"})
|
|
382
|
-
```
|
|
383
|
-
|
|
384
|
-
## Resource Detection
|
|
385
|
-
|
|
386
|
-
### Resource Attributes
|
|
387
|
-
|
|
388
|
-
**Define Service Identity:**
|
|
389
|
-
```python
|
|
390
|
-
from opentelemetry.sdk.resources import Resource
|
|
391
|
-
|
|
392
|
-
resource = Resource.create({
|
|
393
|
-
"service.name": "order-service",
|
|
394
|
-
"service.version": "1.2.3",
|
|
395
|
-
"service.namespace": "production",
|
|
396
|
-
"deployment.environment": "prod",
|
|
397
|
-
})
|
|
398
|
-
```
|
|
399
|
-
|
|
400
|
-
**Automatic Detection:**
|
|
401
|
-
```python
|
|
402
|
-
from opentelemetry.sdk.resources import Resource
|
|
403
|
-
from opentelemetry.semconv.resource import ResourceAttributes
|
|
404
|
-
|
|
405
|
-
resource = Resource.create({
|
|
406
|
-
ResourceAttributes.SERVICE_NAME: "my-service",
|
|
407
|
-
ResourceAttributes.SERVICE_VERSION: "1.0.0",
|
|
408
|
-
})
|
|
409
|
-
```
|
|
410
|
-
|
|
411
|
-
## OpenTelemetry Collector
|
|
412
|
-
|
|
413
|
-
### Configuration
|
|
414
|
-
|
|
415
|
-
**Receivers:**
|
|
416
|
-
```yaml
|
|
417
|
-
receivers:
|
|
418
|
-
otlp:
|
|
419
|
-
protocols:
|
|
420
|
-
grpc:
|
|
421
|
-
endpoint: 0.0.0.0:4317
|
|
422
|
-
http:
|
|
423
|
-
endpoint: 0.0.0.0:4318
|
|
424
|
-
```
|
|
425
|
-
|
|
426
|
-
**Processors:**
|
|
427
|
-
```yaml
|
|
428
|
-
processors:
|
|
429
|
-
batch:
|
|
430
|
-
timeout: 10s
|
|
431
|
-
send_batch_size: 1024
|
|
432
|
-
resource:
|
|
433
|
-
attributes:
|
|
434
|
-
- key: environment
|
|
435
|
-
value: production
|
|
436
|
-
action: upsert
|
|
437
|
-
```
|
|
438
|
-
|
|
439
|
-
**Exporters:**
|
|
440
|
-
```yaml
|
|
441
|
-
exporters:
|
|
442
|
-
jaeger:
|
|
443
|
-
endpoint: jaeger:14250
|
|
444
|
-
tls:
|
|
445
|
-
insecure: true
|
|
446
|
-
prometheus:
|
|
447
|
-
endpoint: "0.0.0.0:8889"
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
**Service:**
|
|
451
|
-
```yaml
|
|
452
|
-
service:
|
|
453
|
-
pipelines:
|
|
454
|
-
traces:
|
|
455
|
-
receivers: [otlp]
|
|
456
|
-
processors: [batch]
|
|
457
|
-
exporters: [jaeger]
|
|
458
|
-
metrics:
|
|
459
|
-
receivers: [otlp]
|
|
460
|
-
processors: [batch, resource]
|
|
461
|
-
exporters: [prometheus]
|
|
462
|
-
```
|
|
463
|
-
|
|
464
|
-
## Best Practices
|
|
465
|
-
|
|
466
|
-
### 1. Use Semantic Conventions
|
|
467
|
-
|
|
468
|
-
**Follow Standards:**
|
|
469
|
-
- HTTP attributes
|
|
470
|
-
- Database attributes
|
|
471
|
-
- Messaging attributes
|
|
472
|
-
- Resource attributes
|
|
473
|
-
|
|
474
|
-
### 2. Sample Appropriately
|
|
475
|
-
|
|
476
|
-
**Head-Based Sampling:**
|
|
477
|
-
```python
|
|
478
|
-
from opentelemetry.sdk.trace.sampling import TraceIdRatioBased
|
|
479
|
-
|
|
480
|
-
sampler = TraceIdRatioBased(0.1) # 10% sampling
|
|
481
|
-
tracer_provider = TracerProvider(sampler=sampler)
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
**Tail-Based Sampling:**
|
|
485
|
-
- Implement in collector
|
|
486
|
-
- Sample based on errors/slow traces
|
|
487
|
-
|
|
488
|
-
### 3. Minimize Overhead
|
|
489
|
-
|
|
490
|
-
**Async Export:**
|
|
491
|
-
```python
|
|
492
|
-
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
493
|
-
|
|
494
|
-
processor = BatchSpanProcessor(exporter)
|
|
495
|
-
```
|
|
496
|
-
|
|
497
|
-
**Batch Exports:**
|
|
498
|
-
- Configure batch size
|
|
499
|
-
- Set timeout
|
|
500
|
-
- Balance latency and efficiency
|
|
501
|
-
|
|
502
|
-
### 4. Propagate Context
|
|
503
|
-
|
|
504
|
-
**Always Propagate:**
|
|
505
|
-
- HTTP requests
|
|
506
|
-
- Message queues
|
|
507
|
-
- RPC calls
|
|
508
|
-
- Database operations
|
|
509
|
-
|
|
510
|
-
### 5. Include Business Context
|
|
511
|
-
|
|
512
|
-
**Add Business Attributes:**
|
|
513
|
-
```python
|
|
514
|
-
span.set_attribute("business.user_id", user_id)
|
|
515
|
-
span.set_attribute("business.order_id", order_id)
|
|
516
|
-
span.set_attribute("business.payment_amount", amount)
|
|
517
|
-
```
|
|
518
|
-
|
|
519
|
-
## Integration with Backends
|
|
520
|
-
|
|
521
|
-
### Jaeger
|
|
522
|
-
|
|
523
|
-
**Exporter:**
|
|
524
|
-
```python
|
|
525
|
-
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
|
|
526
|
-
|
|
527
|
-
jaeger_exporter = JaegerExporter(
|
|
528
|
-
agent_host_name="jaeger",
|
|
529
|
-
agent_port=6831,
|
|
530
|
-
)
|
|
531
|
-
```
|
|
532
|
-
|
|
533
|
-
### Prometheus
|
|
534
|
-
|
|
535
|
-
**Metrics Exporter:**
|
|
536
|
-
```python
|
|
537
|
-
from opentelemetry.exporter.prometheus import PrometheusMetricReader
|
|
538
|
-
from opentelemetry.sdk.metrics import MeterProvider
|
|
539
|
-
|
|
540
|
-
reader = PrometheusMetricReader()
|
|
541
|
-
provider = MeterProvider(metric_readers=[reader])
|
|
542
|
-
```
|
|
543
|
-
|
|
544
|
-
### Zipkin
|
|
545
|
-
|
|
546
|
-
**Exporter:**
|
|
547
|
-
```python
|
|
548
|
-
from opentelemetry.exporter.zipkin.json import ZipkinExporter
|
|
549
|
-
|
|
550
|
-
zipkin_exporter = ZipkinExporter(
|
|
551
|
-
endpoint="http://zipkin:9411/api/v2/spans"
|
|
552
|
-
)
|
|
553
|
-
```
|
|
554
|
-
|
|
555
|
-
## Summary
|
|
556
|
-
|
|
557
|
-
OpenTelemetry provides:
|
|
558
|
-
|
|
559
|
-
1. **Vendor-neutral** instrumentation
|
|
560
|
-
2. **Standard APIs** across languages
|
|
561
|
-
3. **Automatic instrumentation** for common frameworks
|
|
562
|
-
4. **Flexible exporters** to multiple backends
|
|
563
|
-
5. **Context propagation** standards
|
|
564
|
-
6. **Semantic conventions** for consistency
|
|
565
|
-
7. **Collector** for processing and routing
|
|
566
|
-
8. **Open standard** for observability
|
|
567
|
-
|
|
568
|
-
Adopting OpenTelemetry ensures:
|
|
569
|
-
- Future-proof instrumentation
|
|
570
|
-
- Easy backend switching
|
|
571
|
-
- Consistent telemetry
|
|
572
|
-
- Standard tooling ecosystem
|
|
573
|
-
|
|
1
|
+
# OpenTelemetry Standards and Instrumentation
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
OpenTelemetry is a collection of APIs, SDKs, and tools used to instrument, generate, collect, and export telemetry data (metrics, logs, and traces) for analysis to understand software performance and behavior.
|
|
6
|
+
|
|
7
|
+
## Key Concepts
|
|
8
|
+
|
|
9
|
+
### OpenTelemetry Components
|
|
10
|
+
|
|
11
|
+
**APIs:**
|
|
12
|
+
- Language-specific APIs for instrumentation
|
|
13
|
+
- Vendor-neutral interface
|
|
14
|
+
- Standard abstractions
|
|
15
|
+
|
|
16
|
+
**SDKs:**
|
|
17
|
+
- Implementation of APIs
|
|
18
|
+
- Configuration and setup
|
|
19
|
+
- Resource detection
|
|
20
|
+
- Exporters
|
|
21
|
+
|
|
22
|
+
**Collectors:**
|
|
23
|
+
- Receives, processes, and exports telemetry data
|
|
24
|
+
- Vendor-neutral
|
|
25
|
+
- Flexible routing and processing
|
|
26
|
+
|
|
27
|
+
**Instrumentation Libraries:**
|
|
28
|
+
- Auto-instrumentation for common frameworks
|
|
29
|
+
- Manual instrumentation helpers
|
|
30
|
+
- Language-specific implementations
|
|
31
|
+
|
|
32
|
+
## Architecture
|
|
33
|
+
|
|
34
|
+
### Data Flow
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
Application → OpenTelemetry SDK → OTLP Exporter → Collector → Backend
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Components:**
|
|
41
|
+
1. **Instrumentation:** Code in application
|
|
42
|
+
2. **SDK:** Collects and processes data
|
|
43
|
+
3. **Exporter:** Sends to collector or backend
|
|
44
|
+
4. **Collector:** Receives, processes, routes data
|
|
45
|
+
5. **Backend:** Storage and analysis (Jaeger, Prometheus, etc.)
|
|
46
|
+
|
|
47
|
+
### Signals
|
|
48
|
+
|
|
49
|
+
**Traces:**
|
|
50
|
+
- Distributed tracing
|
|
51
|
+
- Request flow through services
|
|
52
|
+
- Span-based model
|
|
53
|
+
|
|
54
|
+
**Metrics:**
|
|
55
|
+
- Time-series measurements
|
|
56
|
+
- Aggregated data points
|
|
57
|
+
- Counter, gauge, histogram
|
|
58
|
+
|
|
59
|
+
**Logs:**
|
|
60
|
+
- Event records
|
|
61
|
+
- Structured logging
|
|
62
|
+
- Correlation with traces
|
|
63
|
+
|
|
64
|
+
## Language Support
|
|
65
|
+
|
|
66
|
+
### Python
|
|
67
|
+
|
|
68
|
+
**Installation:**
|
|
69
|
+
```bash
|
|
70
|
+
pip install opentelemetry-api opentelemetry-sdk
|
|
71
|
+
pip install opentelemetry-instrumentation
|
|
72
|
+
pip install opentelemetry-exporter-otlp
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Basic Setup:**
|
|
76
|
+
```python
|
|
77
|
+
from opentelemetry import trace
|
|
78
|
+
from opentelemetry.sdk.trace import TracerProvider
|
|
79
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
80
|
+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
|
81
|
+
|
|
82
|
+
# Set up tracer provider
|
|
83
|
+
trace.set_tracer_provider(TracerProvider())
|
|
84
|
+
|
|
85
|
+
# Add exporter
|
|
86
|
+
otlp_exporter = OTLPSpanExporter(endpoint="http://collector:4317")
|
|
87
|
+
span_processor = BatchSpanProcessor(otlp_exporter)
|
|
88
|
+
trace.get_tracer_provider().add_span_processor(span_processor)
|
|
89
|
+
|
|
90
|
+
# Get tracer
|
|
91
|
+
tracer = trace.get_tracer(__name__)
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Instrumentation:**
|
|
95
|
+
```python
|
|
96
|
+
from opentelemetry import trace
|
|
97
|
+
|
|
98
|
+
tracer = trace.get_tracer(__name__)
|
|
99
|
+
|
|
100
|
+
@tracer.start_as_current_span("operation")
|
|
101
|
+
def my_function():
|
|
102
|
+
span = trace.get_current_span()
|
|
103
|
+
span.set_attribute("custom.attribute", "value")
|
|
104
|
+
# Your code
|
|
105
|
+
pass
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### JavaScript/Node.js
|
|
109
|
+
|
|
110
|
+
**Installation:**
|
|
111
|
+
```bash
|
|
112
|
+
npm install @opentelemetry/api
|
|
113
|
+
npm install @opentelemetry/sdk-node
|
|
114
|
+
npm install @opentelemetry/exporter-otlp-http
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**Setup:**
|
|
118
|
+
```javascript
|
|
119
|
+
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
120
|
+
const { OTLPTraceExporter } = require('@opentelemetry/exporter-otlp-http');
|
|
121
|
+
const { Resource } = require('@opentelemetry/resources');
|
|
122
|
+
|
|
123
|
+
const sdk = new NodeSDK({
|
|
124
|
+
resource: new Resource({
|
|
125
|
+
'service.name': 'my-service',
|
|
126
|
+
'service.version': '1.0.0',
|
|
127
|
+
}),
|
|
128
|
+
traceExporter: new OTLPTraceExporter({
|
|
129
|
+
url: 'http://collector:4318/v1/traces',
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
sdk.start();
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Java
|
|
137
|
+
|
|
138
|
+
**Dependencies:**
|
|
139
|
+
```xml
|
|
140
|
+
<dependency>
|
|
141
|
+
<groupId>io.opentelemetry</groupId>
|
|
142
|
+
<artifactId>opentelemetry-api</artifactId>
|
|
143
|
+
</dependency>
|
|
144
|
+
<dependency>
|
|
145
|
+
<groupId>io.opentelemetry</groupId>
|
|
146
|
+
<artifactId>opentelemetry-sdk</artifactId>
|
|
147
|
+
</dependency>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Setup:**
|
|
151
|
+
```java
|
|
152
|
+
import io.opentelemetry.api.OpenTelemetry;
|
|
153
|
+
import io.opentelemetry.api.trace.Tracer;
|
|
154
|
+
|
|
155
|
+
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
|
|
156
|
+
.setTracerProvider(
|
|
157
|
+
SdkTracerProvider.builder()
|
|
158
|
+
.addSpanProcessor(BatchSpanProcessor.builder(
|
|
159
|
+
OtlpGrpcSpanExporter.builder()
|
|
160
|
+
.setEndpoint("http://collector:4317")
|
|
161
|
+
.build())
|
|
162
|
+
.build())
|
|
163
|
+
.build())
|
|
164
|
+
.build();
|
|
165
|
+
|
|
166
|
+
Tracer tracer = openTelemetry.getTracer("my-service");
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Go
|
|
170
|
+
|
|
171
|
+
**Installation:**
|
|
172
|
+
```bash
|
|
173
|
+
go get go.opentelemetry.io/otel
|
|
174
|
+
go get go.opentelemetry.io/otel/sdk
|
|
175
|
+
go get go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Setup:**
|
|
179
|
+
```go
|
|
180
|
+
import (
|
|
181
|
+
"go.opentelemetry.io/otel"
|
|
182
|
+
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
|
183
|
+
"go.opentelemetry.io/otel/sdk/trace"
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
exporter, err := otlptracegrpc.New(context.Background(),
|
|
187
|
+
otlptracegrpc.WithEndpoint("collector:4317"),
|
|
188
|
+
)
|
|
189
|
+
if err != nil {
|
|
190
|
+
log.Fatal(err)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
tp := trace.NewTracerProvider(
|
|
194
|
+
trace.WithBatcher(exporter),
|
|
195
|
+
)
|
|
196
|
+
otel.SetTracerProvider(tp)
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Automatic Instrumentation
|
|
200
|
+
|
|
201
|
+
### Python Auto-Instrumentation
|
|
202
|
+
|
|
203
|
+
**Install Packages:**
|
|
204
|
+
```bash
|
|
205
|
+
pip install opentelemetry-instrumentation-requests
|
|
206
|
+
pip install opentelemetry-instrumentation-flask
|
|
207
|
+
pip install opentelemetry-instrumentation-sqlalchemy
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Use Auto-Instrumentation:**
|
|
211
|
+
```python
|
|
212
|
+
from opentelemetry.instrumentation.requests import RequestsInstrumentor
|
|
213
|
+
from opentelemetry.instrumentation.flask import FlaskInstrumentor
|
|
214
|
+
from flask import Flask
|
|
215
|
+
|
|
216
|
+
# Auto-instrument requests library
|
|
217
|
+
RequestsInstrumentor().instrument()
|
|
218
|
+
|
|
219
|
+
# Auto-instrument Flask
|
|
220
|
+
app = Flask(__name__)
|
|
221
|
+
FlaskInstrumentor().instrument_app(app)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Command-Line Instrumentation:**
|
|
225
|
+
```bash
|
|
226
|
+
opentelemetry-instrument --traces_exporter otlp \
|
|
227
|
+
--service_name my-service \
|
|
228
|
+
python my_app.py
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Node.js Auto-Instrumentation
|
|
232
|
+
|
|
233
|
+
**Install:**
|
|
234
|
+
```bash
|
|
235
|
+
npm install @opentelemetry/auto-instrumentations-node
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Setup:**
|
|
239
|
+
```javascript
|
|
240
|
+
const { NodeSDK } = require('@opentelemetry/sdk-node');
|
|
241
|
+
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
|
|
242
|
+
|
|
243
|
+
const sdk = new NodeSDK({
|
|
244
|
+
instrumentations: [getNodeAutoInstrumentations()],
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
sdk.start();
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
## Manual Instrumentation
|
|
251
|
+
|
|
252
|
+
### Creating Spans
|
|
253
|
+
|
|
254
|
+
**Python:**
|
|
255
|
+
```python
|
|
256
|
+
from opentelemetry import trace
|
|
257
|
+
|
|
258
|
+
tracer = trace.get_tracer(__name__)
|
|
259
|
+
|
|
260
|
+
def process_order(order_id: str):
|
|
261
|
+
with tracer.start_as_current_span("process_order") as span:
|
|
262
|
+
span.set_attribute("order.id", order_id)
|
|
263
|
+
|
|
264
|
+
try:
|
|
265
|
+
result = validate_order(order_id)
|
|
266
|
+
span.set_status(trace.Status(trace.StatusCode.OK))
|
|
267
|
+
return result
|
|
268
|
+
except Exception as e:
|
|
269
|
+
span.record_exception(e)
|
|
270
|
+
span.set_status(trace.Status(trace.StatusCode.ERROR, str(e)))
|
|
271
|
+
raise
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Span Attributes
|
|
275
|
+
|
|
276
|
+
**Semantic Conventions:**
|
|
277
|
+
```python
|
|
278
|
+
span.set_attribute("http.method", "GET")
|
|
279
|
+
span.set_attribute("http.url", "/api/users")
|
|
280
|
+
span.set_attribute("http.status_code", 200)
|
|
281
|
+
span.set_attribute("db.system", "postgresql")
|
|
282
|
+
span.set_attribute("db.name", "users")
|
|
283
|
+
span.set_attribute("db.operation", "SELECT")
|
|
284
|
+
span.set_attribute("net.peer.ip", "192.168.1.1")
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**Custom Attributes:**
|
|
288
|
+
```python
|
|
289
|
+
span.set_attribute("business.order_id", order_id)
|
|
290
|
+
span.set_attribute("business.user_tier", "premium")
|
|
291
|
+
span.set_attribute("business.payment_method", "credit_card")
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Events
|
|
295
|
+
|
|
296
|
+
**Add Events to Spans:**
|
|
297
|
+
```python
|
|
298
|
+
span.add_event("order.validated", {
|
|
299
|
+
"validation_result": "success",
|
|
300
|
+
"items_count": 5
|
|
301
|
+
})
|
|
302
|
+
|
|
303
|
+
span.add_event("payment.processed", {
|
|
304
|
+
"payment_method": "credit_card",
|
|
305
|
+
"amount": 99.99
|
|
306
|
+
})
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## Context Propagation
|
|
310
|
+
|
|
311
|
+
### W3C Trace Context
|
|
312
|
+
|
|
313
|
+
**Propagate Across Services:**
|
|
314
|
+
```python
|
|
315
|
+
from opentelemetry.propagate import inject, extract
|
|
316
|
+
|
|
317
|
+
# Client: Inject context
|
|
318
|
+
headers = {}
|
|
319
|
+
inject(headers)
|
|
320
|
+
response = requests.get(url, headers=headers)
|
|
321
|
+
|
|
322
|
+
# Server: Extract context
|
|
323
|
+
context = extract(request.headers)
|
|
324
|
+
tracer = trace.get_tracer(__name__)
|
|
325
|
+
with tracer.start_as_current_span("handle_request", context=context):
|
|
326
|
+
# Process request
|
|
327
|
+
pass
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Baggage
|
|
331
|
+
|
|
332
|
+
**Propagate Custom Data:**
|
|
333
|
+
```python
|
|
334
|
+
from opentelemetry import baggage
|
|
335
|
+
|
|
336
|
+
# Set baggage
|
|
337
|
+
ctx = baggage.set_baggage("user.id", "user123")
|
|
338
|
+
ctx = baggage.set_baggage("experiment.flag", "true", context=ctx)
|
|
339
|
+
|
|
340
|
+
# Use baggage
|
|
341
|
+
user_id = baggage.get_baggage("user.id", context=ctx)
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Metrics
|
|
345
|
+
|
|
346
|
+
### Counter
|
|
347
|
+
|
|
348
|
+
```python
|
|
349
|
+
from opentelemetry import metrics
|
|
350
|
+
|
|
351
|
+
meter = metrics.get_meter(__name__)
|
|
352
|
+
counter = meter.create_counter(
|
|
353
|
+
"requests_total",
|
|
354
|
+
description="Total number of requests"
|
|
355
|
+
)
|
|
356
|
+
|
|
357
|
+
counter.add(1, {"method": "GET", "status": "200"})
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Gauge
|
|
361
|
+
|
|
362
|
+
```python
|
|
363
|
+
gauge = meter.create_up_down_counter(
|
|
364
|
+
"active_connections",
|
|
365
|
+
description="Number of active connections"
|
|
366
|
+
)
|
|
367
|
+
|
|
368
|
+
gauge.add(1) # Increment
|
|
369
|
+
gauge.add(-1) # Decrement
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Histogram
|
|
373
|
+
|
|
374
|
+
```python
|
|
375
|
+
histogram = meter.create_histogram(
|
|
376
|
+
"request_duration",
|
|
377
|
+
description="Request duration",
|
|
378
|
+
unit="ms"
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
histogram.record(245, {"method": "GET", "endpoint": "/api/users"})
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
## Resource Detection
|
|
385
|
+
|
|
386
|
+
### Resource Attributes
|
|
387
|
+
|
|
388
|
+
**Define Service Identity:**
|
|
389
|
+
```python
|
|
390
|
+
from opentelemetry.sdk.resources import Resource
|
|
391
|
+
|
|
392
|
+
resource = Resource.create({
|
|
393
|
+
"service.name": "order-service",
|
|
394
|
+
"service.version": "1.2.3",
|
|
395
|
+
"service.namespace": "production",
|
|
396
|
+
"deployment.environment": "prod",
|
|
397
|
+
})
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
**Automatic Detection:**
|
|
401
|
+
```python
|
|
402
|
+
from opentelemetry.sdk.resources import Resource
|
|
403
|
+
from opentelemetry.semconv.resource import ResourceAttributes
|
|
404
|
+
|
|
405
|
+
resource = Resource.create({
|
|
406
|
+
ResourceAttributes.SERVICE_NAME: "my-service",
|
|
407
|
+
ResourceAttributes.SERVICE_VERSION: "1.0.0",
|
|
408
|
+
})
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
## OpenTelemetry Collector
|
|
412
|
+
|
|
413
|
+
### Configuration
|
|
414
|
+
|
|
415
|
+
**Receivers:**
|
|
416
|
+
```yaml
|
|
417
|
+
receivers:
|
|
418
|
+
otlp:
|
|
419
|
+
protocols:
|
|
420
|
+
grpc:
|
|
421
|
+
endpoint: 0.0.0.0:4317
|
|
422
|
+
http:
|
|
423
|
+
endpoint: 0.0.0.0:4318
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
**Processors:**
|
|
427
|
+
```yaml
|
|
428
|
+
processors:
|
|
429
|
+
batch:
|
|
430
|
+
timeout: 10s
|
|
431
|
+
send_batch_size: 1024
|
|
432
|
+
resource:
|
|
433
|
+
attributes:
|
|
434
|
+
- key: environment
|
|
435
|
+
value: production
|
|
436
|
+
action: upsert
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
**Exporters:**
|
|
440
|
+
```yaml
|
|
441
|
+
exporters:
|
|
442
|
+
jaeger:
|
|
443
|
+
endpoint: jaeger:14250
|
|
444
|
+
tls:
|
|
445
|
+
insecure: true
|
|
446
|
+
prometheus:
|
|
447
|
+
endpoint: "0.0.0.0:8889"
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
**Service:**
|
|
451
|
+
```yaml
|
|
452
|
+
service:
|
|
453
|
+
pipelines:
|
|
454
|
+
traces:
|
|
455
|
+
receivers: [otlp]
|
|
456
|
+
processors: [batch]
|
|
457
|
+
exporters: [jaeger]
|
|
458
|
+
metrics:
|
|
459
|
+
receivers: [otlp]
|
|
460
|
+
processors: [batch, resource]
|
|
461
|
+
exporters: [prometheus]
|
|
462
|
+
```
|
|
463
|
+
|
|
464
|
+
## Best Practices
|
|
465
|
+
|
|
466
|
+
### 1. Use Semantic Conventions
|
|
467
|
+
|
|
468
|
+
**Follow Standards:**
|
|
469
|
+
- HTTP attributes
|
|
470
|
+
- Database attributes
|
|
471
|
+
- Messaging attributes
|
|
472
|
+
- Resource attributes
|
|
473
|
+
|
|
474
|
+
### 2. Sample Appropriately
|
|
475
|
+
|
|
476
|
+
**Head-Based Sampling:**
|
|
477
|
+
```python
|
|
478
|
+
from opentelemetry.sdk.trace.sampling import TraceIdRatioBased
|
|
479
|
+
|
|
480
|
+
sampler = TraceIdRatioBased(0.1) # 10% sampling
|
|
481
|
+
tracer_provider = TracerProvider(sampler=sampler)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
**Tail-Based Sampling:**
|
|
485
|
+
- Implement in collector
|
|
486
|
+
- Sample based on errors/slow traces
|
|
487
|
+
|
|
488
|
+
### 3. Minimize Overhead
|
|
489
|
+
|
|
490
|
+
**Async Export:**
|
|
491
|
+
```python
|
|
492
|
+
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
|
493
|
+
|
|
494
|
+
processor = BatchSpanProcessor(exporter)
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**Batch Exports:**
|
|
498
|
+
- Configure batch size
|
|
499
|
+
- Set timeout
|
|
500
|
+
- Balance latency and efficiency
|
|
501
|
+
|
|
502
|
+
### 4. Propagate Context
|
|
503
|
+
|
|
504
|
+
**Always Propagate:**
|
|
505
|
+
- HTTP requests
|
|
506
|
+
- Message queues
|
|
507
|
+
- RPC calls
|
|
508
|
+
- Database operations
|
|
509
|
+
|
|
510
|
+
### 5. Include Business Context
|
|
511
|
+
|
|
512
|
+
**Add Business Attributes:**
|
|
513
|
+
```python
|
|
514
|
+
span.set_attribute("business.user_id", user_id)
|
|
515
|
+
span.set_attribute("business.order_id", order_id)
|
|
516
|
+
span.set_attribute("business.payment_amount", amount)
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
## Integration with Backends
|
|
520
|
+
|
|
521
|
+
### Jaeger
|
|
522
|
+
|
|
523
|
+
**Exporter:**
|
|
524
|
+
```python
|
|
525
|
+
from opentelemetry.exporter.jaeger.thrift import JaegerExporter
|
|
526
|
+
|
|
527
|
+
jaeger_exporter = JaegerExporter(
|
|
528
|
+
agent_host_name="jaeger",
|
|
529
|
+
agent_port=6831,
|
|
530
|
+
)
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
### Prometheus
|
|
534
|
+
|
|
535
|
+
**Metrics Exporter:**
|
|
536
|
+
```python
|
|
537
|
+
from opentelemetry.exporter.prometheus import PrometheusMetricReader
|
|
538
|
+
from opentelemetry.sdk.metrics import MeterProvider
|
|
539
|
+
|
|
540
|
+
reader = PrometheusMetricReader()
|
|
541
|
+
provider = MeterProvider(metric_readers=[reader])
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### Zipkin
|
|
545
|
+
|
|
546
|
+
**Exporter:**
|
|
547
|
+
```python
|
|
548
|
+
from opentelemetry.exporter.zipkin.json import ZipkinExporter
|
|
549
|
+
|
|
550
|
+
zipkin_exporter = ZipkinExporter(
|
|
551
|
+
endpoint="http://zipkin:9411/api/v2/spans"
|
|
552
|
+
)
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
## Summary
|
|
556
|
+
|
|
557
|
+
OpenTelemetry provides:
|
|
558
|
+
|
|
559
|
+
1. **Vendor-neutral** instrumentation
|
|
560
|
+
2. **Standard APIs** across languages
|
|
561
|
+
3. **Automatic instrumentation** for common frameworks
|
|
562
|
+
4. **Flexible exporters** to multiple backends
|
|
563
|
+
5. **Context propagation** standards
|
|
564
|
+
6. **Semantic conventions** for consistency
|
|
565
|
+
7. **Collector** for processing and routing
|
|
566
|
+
8. **Open standard** for observability
|
|
567
|
+
|
|
568
|
+
Adopting OpenTelemetry ensures:
|
|
569
|
+
- Future-proof instrumentation
|
|
570
|
+
- Easy backend switching
|
|
571
|
+
- Consistent telemetry
|
|
572
|
+
- Standard tooling ecosystem
|
|
573
|
+
|