-
Notifications
You must be signed in to change notification settings - Fork 311
initial policy project proposal #3569
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
jaronoff97
wants to merge
5
commits into
open-telemetry:main
Choose a base branch
from
jaronoff97:policy-project-proposal
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+235
−0
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,235 @@ | ||
| # Initial Policies Implementation | ||
|
|
||
| ## Background and description | ||
|
|
||
| With the recent merge of the | ||
| [Policies OTEP](https://github.com/open-telemetry/opentelemetry-specification/pull/4738), | ||
| there is significant interest in implementing Policies across the OpenTelemetry | ||
| ecosystem. Policies introduce an intent-based specification for configuring how | ||
| telemetry components process data. A Policy is an atomic, self-contained rule | ||
| that declares a single intent — "match specific telemetry and apply an action" — | ||
| and can be evaluated identically regardless of where it runs. | ||
|
|
||
| Policies are self-contained, independent, and can be evaluated in parallel and | ||
| scaled to thousands of rules without degradation. The same policy behaves the | ||
| same way whether it executes inside an SDK, a Collector, or any other | ||
| specification-compliant component, and policies are designed to be defined | ||
| centrally and distributed to running systems. | ||
|
|
||
| This project coordinates the initial work needed to move Policies from an | ||
| accepted OTEP into stable, usable policies people can rely on across | ||
| OpenTelemetry. Concretely, that means defining the data model and enforcement | ||
| specifications, defining the canonical Protobuf schemas, and shipping an **alpha | ||
| OpenTelemetry Collector component** that natively interprets and enforces | ||
| Policies. There are existing policy implementations already found in | ||
| [java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) and | ||
| Tero's Policy work ([1](https://github.com/usetero/policy), | ||
| [2](https://github.com/usetero/policy-go), | ||
| [3](https://github.com/usetero/policy-zig)) that this project can build on as a | ||
| second implementation. "Done" for this project is a small set of stable policies | ||
| you can interact with; the components and features we need fall out from making | ||
| those policies successful. | ||
|
|
||
| ### Current challenges | ||
|
|
||
| Configuring telemetry processing today is fragmented and component-specific. | ||
| Operators who want to filter, sample, redact, or transform telemetry must learn | ||
| a different configuration surface for each component — OTTL and processors in | ||
| the Collector, sampler configuration in each SDK, and vendor-specific mechanisms | ||
| elsewhere. A rule that drops debug logs or redacts PII has to be re-expressed, | ||
| re-tested, and re-maintained for every place it needs to run. | ||
|
|
||
| Existing configuration problems: | ||
|
|
||
| - **No portability.** A processing rule written for the Collector cannot be | ||
| moved closer to the source (into an SDK) without a rewrite, even though moving | ||
| it upstream is often the cheaper and safer place to enforce it. | ||
| - **No central management.** OpAMP exists to provide the capabilities for remote | ||
| management, however, without a consistent configuration method, there is no | ||
| way to centrally manage your telemetry infrastructure. | ||
| - **Ordering and coupling.** Existing pipeline configuration is order-dependent | ||
| and stateful, which makes rules hard to reason about in isolation and hard to | ||
| scale as their number grows. | ||
| - **Safety.** A malformed processing rule can break a pipeline and cause | ||
| telemetry loss. | ||
|
|
||
| If nothing is done, users continue to hand-maintain overlapping, non-portable | ||
| configuration in every component, and the ecosystem lacks a common, governable | ||
| way to express telemetry-processing intent. | ||
|
|
||
| ### Goals, objectives, and requirements | ||
|
|
||
| The aim of this project is to deliver an initial, working implementation of | ||
| Policies along with the specification and schemas that support it, proving the | ||
| intent-based model end to end in at least one component (the Collector) as a | ||
| foundation the rest of the ecosystem can build on. | ||
|
|
||
| **Goals:** | ||
|
|
||
| - Deliver a small scoped set of stable policies — **sampling, filtering, and | ||
| scoped transformations** — that work consistently across OpenTelemetry. More | ||
| transform types and additional policy types can be added iteratively once | ||
| these are successful. | ||
| - Split and stabilize the specification into two documents: a **data model** | ||
| specification (the policy schema, matchers, and actions) and an | ||
| **enforcement** specification (how a component evaluates policies, including | ||
| the two-stage match then keep & transform model and the core guarantees). | ||
| Enforcment should also describe and require a set of conformance tests to | ||
| ensure that implementations are consistent. | ||
| - Define the canonical Protobuf schema for Policies, with a human-authorable | ||
| YAML representation and bidirectional conversion (including shorthand forms). | ||
| - Ship an alpha OpenTelemetry Collector component that **natively interprets and | ||
| enforces** policies (rather than translating them into existing Collector | ||
| configuration), honoring the core guarantees: atomicity, fail-open behavior, | ||
| idempotence, and data-model-based field references for portability. | ||
| - Use the host component's existing self-observability (e.g. Collector processor | ||
| self-obs metrics) to expose policy match tracking (hits/misses) so operators | ||
| can observe policy effectiveness, and scope out how a component reports | ||
| _which_ policies are applied (e.g. an OpAMP status tagged by policy | ||
| version/UUID, or self-observability signals for SDKs). | ||
|
|
||
| **Requirements the model must preserve:** | ||
|
|
||
| - **Fail-open:** an invalid policy becomes inert rather than breaking valid | ||
| policies or dropping telemetry. | ||
| - **Atomic and self-contained:** one matcher set, one action set, no references | ||
| to other policies, no ordering dependency. This means no policy depends on | ||
| another policy having already been applied — it does not mean policies | ||
| cannot conflict or overwrite each other's effects; precedence rules (see | ||
| Deliverables) govern that. | ||
| - **Portable:** field references use the OpenTelemetry data model so a policy | ||
| runs identically across conformant runtimes. | ||
|
|
||
| **Why now:** the OTEP has just merged and there is broad interest across SIGs. | ||
| Coordinating the specification, schema, and an alpha Collector component now | ||
| delivers immediately on the goals of the OTEP. Delivering this gives | ||
| OpenTelemetry a common, governable way to express telemetry-processing intent | ||
| that can be enforced anywhere in the pipeline. | ||
|
|
||
| ## Deliverables | ||
|
|
||
| - **Data model specification.** The policy schema itself: the matcher system | ||
| (field selectors, match types, options, `AttributePath` nested traversal), | ||
| actions, keep/sampling semantics for logs, metrics, and traces, and precedence | ||
| (most-restrictive-wins). | ||
| - **Enforcement specification.** How a component evaluates policies: the | ||
| two-stage execution model (match; then keep & transform), the core guarantees | ||
| (atomicity, fail-open, idempotence, portability), and the error-handling | ||
| taxonomy (parse, compilation, runtime). | ||
| - **Canonical Protobuf schema** for Policies, plus the YAML authoring format and | ||
| documented bidirectional conversion including shorthand forms. | ||
| - **Alpha Collector component** that natively interprets and enforces policies | ||
| across logs, metrics, and traces (not a translation into existing Collector | ||
| configuration), including fail-open handling and match tracking. | ||
| - **Experimental policies** for the initial scope: **sampling, filtering, and | ||
| scoped transformations**. Additional transform types for things like | ||
| datapoints and other policy types are deferred and added iteratively. | ||
| - **Applied-policy reporting.** Scope and formalize how a component reports | ||
| which policies are actually in effect — for example an OpAMP status tagged by | ||
| policy version/UUID, or self-observability signals for SDKs — so operators can | ||
| see what is applied to a given instance. | ||
| - **Integration direction** documenting how Policies relate to distribution | ||
| mechanisms (e.g. OpAMP, the OpenTelemetry Operator) and to policy composition | ||
| ("merger") — with dynamic distribution intentionally kept separate from core | ||
| policy semantics so both can iterate independently. | ||
|
|
||
| Following OpenTelemetry specification practice, the alpha component(s) — the | ||
| Collector component here, plus the existing java-contrib implementation as a | ||
| second — come before the specification is formalized. These requirements should | ||
| be discussed with a TC member before submitting any follow-on OTEP. | ||
|
|
||
| ## Staffing / Help Wanted | ||
|
|
||
| ### Industry outreach (Optional) | ||
|
|
||
| The Policies concept originated in discussions at KubeCon NA 2025 on | ||
| policy-based control of telemetry. Interested parties across the SDK, Collector, | ||
| Operator, and OpAMP SIGs, as well as vendors building telemetry-processing | ||
| products, should be aware of this effort and are invited to participate. | ||
|
|
||
| ### SIG | ||
|
|
||
| A new Policies SIG will lead this work. Initial coordination and the alpha | ||
| Collector component will happen in collaboration with the Collector SIG. | ||
|
|
||
| ### Required staffing | ||
|
|
||
| See [Project Staffing](/project-management.md#project-staffing) | ||
|
|
||
| #### Project Leads(s) | ||
|
jaronoff97 marked this conversation as resolved.
|
||
|
|
||
| - **@jaronoff97** (Tero) – Maintainer; Operator, Helm, Injector | ||
| - **@jsuereth** (Google) – Maintainer; Specification, Collector | ||
| - **@dashpole** (Google) – Maintainer; Specification, Collector, Prometheus | ||
| - **@menderico** (Google) – Maintainer; Collector | ||
| - **@jackshirazi** (Elastic) – Maintainer; Java SDK/agent, author of the | ||
| existing policy implementation in | ||
| [java-contrib](https://github.com/open-telemetry/opentelemetry-java-contrib) | ||
|
|
||
| #### Other Staffing | ||
|
|
||
| Contributors from the Collector, SDK, Configuration, OpAMP, and Operator SIGs | ||
| are being recruited. Maintainers/approvers from those SIGs committed to | ||
| reviewing the specification and alpha components will be listed here as they | ||
| commit. | ||
|
|
||
| ### Sponsorship | ||
|
|
||
| See [Project Sponsorship](/project-management.md#project-sponsorship) | ||
|
|
||
| #### TC Sponsor | ||
|
|
||
| - @dashpole (Google) | ||
|
|
||
| #### Delegated TC Sponsor (Optional) | ||
|
|
||
| N/A | ||
|
|
||
| #### GC Liaison | ||
|
|
||
| TBD | ||
|
|
||
| ## Expected Timeline | ||
|
|
||
| Relative to project start: | ||
|
|
||
| - **Start:** form the Policies SIG, set up meetings and community table entries, | ||
| and lock the initial policy scope (sampling, filtering, attribute | ||
| sanitization). | ||
| - **~1 month in:** first draft of the canonical Protobuf schema and YAML | ||
| representation, and the data model / enforcement specification split, | ||
| circulated for review. | ||
| - **~2 months in:** alpha Collector component enforcing the initial policies, | ||
| covering the match and keep stages for logs, metrics, and traces. | ||
| - **~3–4 months in:** match tracking and applied-policy reporting in the alpha | ||
| component; experimental policies published. | ||
| - **Following:** align the java-contrib implementation as a second | ||
| implementation of the same policies, and document integration with | ||
| distribution mechanisms (OpAMP/Operator). | ||
|
|
||
| The SIG will give regular (roughly monthly) updates to the Maintainer and | ||
| Specification SIGs. After the project starts, specific target dates will be | ||
| tracked via GitHub project updates (see | ||
| [Project Lifecycle](/project-management.md#project-lifecycle)). | ||
|
|
||
| ## Labels (Optional) | ||
|
|
||
| - `policies` | ||
| - `spec:policies` | ||
| - `area:collector` | ||
|
|
||
| ## GitHub Project (Post-Approval) | ||
|
|
||
| To be created from the | ||
| [GitHub Project template](https://github.com/orgs/open-telemetry/projects/140) | ||
| once the project is approved, pre-populated with issues covering the | ||
| deliverables above and organized by the timeline milestones. Link to be added | ||
| here. | ||
|
|
||
| ## SIG Meetings, Roadmap, and Other Info (Post-Approval) | ||
|
jaronoff97 marked this conversation as resolved.
|
||
|
|
||
| Meeting times, Slack channel, and meeting notes will be posted on the | ||
| [OpenTelemetry public calendar](https://github.com/open-telemetry/community#calendar) | ||
| and added to the community SIG tables via [workstreams.yml](/workstreams.yml) | ||
| (running `make generate`), including the GitHub project ID as a `roadmapProject` | ||
| entry so the project appears in the OpenTelemetry Roadmap. | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How do we know which policies were applied by the collector if the collector process crashed before it could even report those metrics?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
General health and availability of the collector is already something that can be established by existing means (e.g. prometheus
upmetric, k8s liveness probes, or other forms of uptime monitoring). This will allow operators to diagnose issues with a policy that isn't applied (e.g. because it is invalid) or issues delivering policies, or will allow operators to tell how long it takes between when a policy is defined by the user, and when a policy is actually being enforced.