Security
The Jaeger library aims to be secure and follow industry best practices. This outline details the security measures implemented in the codebase.
Developer Certificate of Origin
Jaeger employs the Developer Certificate of Origin (DCO) to ensure the authenticity and origin of contributions. This ensures that all code contributions are made by individuals who have the right to contribute.
- Source: DCO
Dependency Management
Jaeger’s dependency management practices contribute to its security. These practices include:
Explicit Dependency Declarations: Jaeger utilizes
Gopkg.toml
to declare explicit dependencies, ensuring clarity about the software components used.Version Constraints: Version constraints are applied to all dependencies, limiting the use of potentially vulnerable versions.
Regular Dependency Updates: Jaeger regularly updates dependencies, minimizing exposure to known vulnerabilities.
Security Audits: Regular security audits are conducted to identify and address potential vulnerabilities.
Source: Gopkg.toml
Code Review and Testing
Jaeger employs comprehensive code review and testing procedures to enhance security.
Code Reviews: All code changes undergo thorough code reviews to identify potential security vulnerabilities.
Unit Tests: Unit tests are implemented to verify the functionality and security of individual code components.
Integration Tests: Integration tests are conducted to validate the security of the library’s interaction with external systems.
Source: README.md
Continuous Integration and Code Quality
Continuous integration (CI) and code quality practices are crucial for security. Jaeger utilizes:
Continuous Integration: The library is built, tested, and deployed continuously, enabling the rapid identification and resolution of security issues.
Code Style Enforcement: Code style guidelines are enforced, ensuring consistency and reducing the risk of introducing vulnerabilities.
Source: README.md
Licensing
Jaeger utilizes the Apache 2.0 license, a widely accepted and permissive license that encourages code reuse and collaboration while fostering security.
- Source: scripts/updateLicense.py
Metrics
Jaeger offers various metrics capabilities, including:
Go-Kit Integration: Jaeger leverages Go-Kit for integration with metrics systems, enabling the monitoring and analysis of application performance.
Tagged Metrics: Certain metrics factories support tagged metrics, allowing for more granular insights.
Counter Interface: The
Counter
interface provides a standardized way to track the occurrence of events.Source: metrics/go-kit/expvar/factory.go, metrics/go-kit/factory.go, metrics/counter.go
Rate Limiting
Jaeger includes a rate limiter based on the leaky bucket algorithm for resource management.
Rate Limiter: The
RateLimiter
interface provides a standardized way to manage the rate of events or resource consumption.Credits Balance: The implementation utilizes a credits balance that is replenished over time.
Item Costs: The rate limiter accepts the cost of an item and determines if it can be “purchased” within the rate limit.
Source: utils/rate_limiter.go
Build System
Jaeger’s build system helps enforce security.
Dependency Management: The build system utilizes tools like
dep
orglide
for dependency management.Linting: The build system runs linters to identify potential code issues, including security vulnerabilities.
Testing: The build system includes automated tests for code coverage and security checks.
Source: Makefile
Influx Metrics
Jaeger offers Influx-based metrics capabilities.
Capabilities: The Influx-based metrics factory supports tagging, enabling more detailed metrics collection.
Source: metrics/go-kit/influx/factory.go
## Top-Level Directory Explanations
<a class='local-link directory-link' data-ref="metrics/" href="#metrics/">metrics/</a> - This directory contains the metrics implementation for the Jaeger Tracing library.
<a class='local-link directory-link' data-ref="metrics/adapters/" href="#metrics/adapters/">metrics/adapters/</a> - This subdirectory contains the various metric adapters for different backends.
<a class='local-link directory-link' data-ref="metrics/go-kit/" href="#metrics/go-kit/">metrics/go-kit/</a> - This subdirectory contains the Go-Kit integration for the Jaeger Tracing library.
<a class='local-link directory-link' data-ref="metrics/go-kit/expvar/" href="#metrics/go-kit/expvar/">metrics/go-kit/expvar/</a> - This subdirectory contains the expvar implementation for the Go-Kit integration.
<a class='local-link directory-link' data-ref="metrics/go-kit/influx/" href="#metrics/go-kit/influx/">metrics/go-kit/influx/</a> - This subdirectory contains the InfluxDB implementation for the Go-Kit integration.
<a class='local-link directory-link' data-ref="metrics/metricstest/" href="#metrics/metricstest/">metrics/metricstest/</a> - This subdirectory contains the testing implementation for the metrics.
<a class='local-link directory-link' data-ref="metrics/prometheus/" href="#metrics/prometheus/">metrics/prometheus/</a> - This subdirectory contains the Prometheus implementation for the Jaeger Tracing library.
<a class='local-link directory-link' data-ref="metrics/tally/" href="#metrics/tally/">metrics/tally/</a> - This subdirectory contains the implementation for counting metrics using the tally package.
<a class='local-link directory-link' data-ref="sample/" href="#sample/">sample/</a> - This directory contains a sample implementation for the Jaeger Tracing library.
<a class='local-link directory-link' data-ref="scripts/" href="#scripts/">scripts/</a> - This directory contains various scripts for the project.
<a class='local-link directory-link' data-ref="utils/" href="#utils/">utils/</a> - This directory contains various utility functions for the project.