<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic OTel Weaver: a high-level overview of OTel's schema and policy enforcement in OTel</title>
    <link>https://community.dynatrace.com/t5/OTel/OTel-Weaver-a-high-level-overview-of-OTel-s-schema-and-policy/m-p/303520#M419</link>
    <description>&lt;P class=""&gt;Today, I'll give you a high-level overview of &lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/weaver" target="_blank" rel="noopener"&gt;OpenTelemetry (OTel) Weaver&lt;/A&gt;&lt;/SPAN&gt;, so that you can better understand what it does, and how it can help your organization as it moves ahead in its OpenTelemetry journey.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;What is Weaver, anyway?&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;At its core, Weaver is a tool that allows you to create, document, and manage OpenTelemetry schemas and policies. But why should you care?&lt;/P&gt;&lt;P class=""&gt;By defining and using a schema for your OpenTelemetry instrumentation, you ensure that everyone in your organization is speaking the same language. You establish:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Naming conventions&lt;/LI&gt;&lt;LI&gt;Spans, metrics, and logs (events) used by your application, and their attributes&lt;/LI&gt;&lt;LI&gt;Units of measure (metrics only)&lt;/LI&gt;&lt;LI&gt;Example values/format&lt;/LI&gt;&lt;LI&gt;Description of your telemetry&lt;/LI&gt;&lt;LI&gt;Stability level (in case something is still in the works, or is deprecated)&lt;/LI&gt;&lt;LI&gt;Policies&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;Policies are written in &lt;A href="https://www.openpolicyagent.org/docs/policy-language#why-use-rego" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Rego&lt;/SPAN&gt;&lt;/A&gt;, used by &lt;A href="https://www.openpolicyagent.org/docs/policy-language#why-use-rego" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenPolicy Agent (OPA)&lt;/SPAN&gt;&lt;/A&gt; and can be used to define things such as:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Enforcing a prefix matching the company name for every custom metric, attribute, etc.&lt;/LI&gt;&lt;LI&gt;Requiring fields that are considered optional by the semantic conventions, such as brief&lt;/LI&gt;&lt;LI&gt;Validating the annotations attached to attributes and/or signals&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Not only does Weaver let you define these, it can generate documentation (and/or code) for you, validate your schema, and enforce schema adherence. You can configure your CI process so that if someone introduces code that violates your schema and policies, that code is blocked from going into production until it's fixed.&lt;/P&gt;&lt;P class=""&gt;To use Weaver, you can either &lt;A href="https://github.com/open-telemetry/weaver#install" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;run the Weaver binary locally (by building from source), or, if you're lazy like me, you can run it via Docker.&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Weaver flow&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;To help you better understand how Weaver works, let's look at what a Weaver workflow might look like.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;1. Create schema&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;First things first — you must create a schema for your telemetry! You do this by creating YAML files to describe your telemetry schema — i.e. files that describe your spans, metrics, and events (logs).&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;The schema files should go into a special schema folder in your repository. You can call the folder whatever you want. For example: &lt;/SPAN&gt;[telemetry/registry](&lt;A href="https://github.com/telemetrydrops/otel-in-practice/tree/main/stage-1-monolith/telemetry/registry" target="_blank" rel="noopener"&gt;https://github.com/telemetrydrops/otel-in-practice/tree/main/stage-1-monolith/telemetry/registry&lt;/A&gt;)&lt;SPAN class=""&gt; or &lt;/SPAN&gt;[telemetry-schema](&lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema" target="_blank" rel="noopener"&gt;https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema&lt;/A&gt;)&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;The names of the YAML files also don't matter, as Weaver will scan them and interpret them accordingly (as long as you provide the location of the schema files). Although the name doesn't matter, you should call them something meaningful.&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;As a best practice, you should create separate YAML files for spans, events (logs), metrics. If your application has multiple services, consider breaking each signal type down by service name. &lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;You can see a great example here&lt;/SPAN&gt;&lt;/A&gt;. Common attributes should be kept in a separate file so that &lt;A href="https://github.com/open-telemetry/opentelemetry-demo/blob/05fab63b804f9d243c34ac624f0a9083bec92127/telemetry-schema/services/cart.yaml#L10-L14" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;they can be referenced&lt;/SPAN&gt;&lt;/A&gt;, avoiding repetition.&lt;/P&gt;&lt;P class=""&gt;Once you've created your files, you validate them like this:&lt;/P&gt;&lt;P class=""&gt;weaver registry check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt;&lt;/P&gt;&lt;P class=""&gt;This ensures that your YAML is formatted correctly. For example, do your metrics definitions include units?&lt;/P&gt;&lt;P class=""&gt;Policy validation is optional, but if you'd like to be extra rigorous, you can add it to your validation process:&lt;/P&gt;&lt;P class=""&gt;weaver registry check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt;&lt;/P&gt;&lt;P class=""&gt;--policy &amp;lt;path_to_policies&amp;gt;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;2. Create templates (optional)&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;Templates are &lt;A href="https://jinja.palletsprojects.com/en/stable/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Jinja2 templates&lt;/SPAN&gt;&lt;/A&gt; that Weaver can use to transform your YAML schema into code. This code can include but is not limited to: markdown, HTML files, document templates for Confluence, and data structures in your application code.&lt;/P&gt;&lt;P class=""&gt;It's important to note that this part isn't done by Weaver. You have to create your own templates. This also means that you have to be familiar with Jinja2. For more information on how to create your own templates, &lt;A href="https://telemetrydrops.com/blog/weaver-from-zero-to-hero/#step-2-generate-go-code" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;check out this example&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;Now, although Weaver itself doesn't come with its own templates, some OTel projects have created their own:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/semantic-conventions-java/tree/main/buildscripts/templates/registry" target="_blank" rel="noopener"&gt;Java templates&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/opentelemetry-go/tree/main/semconv/templates/registry/go" target="_blank" rel="noopener"&gt;Go templates&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/telemetry-docs/templates/markdown" target="_blank" rel="noopener"&gt;Markdown templates for the OTel Demo&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;This means that you can technically skip this step if there's an existing template that works for you.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3. Generate files from templates&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;With template files in hand, you can use Weaver to generate code from those templates (see step 2). That is, Weaver looks at your schema definitions, applies them to your templates, and then magically turns that into code.&lt;/P&gt;&lt;P class=""&gt;This is done by running:&lt;/P&gt;&lt;P class=""&gt;weaver registry generate \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--template &amp;lt;path_to_templates&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;&amp;lt;output_path&amp;gt;&lt;/P&gt;&lt;P class=""&gt;The template path can be either a local path or a remote path (e.g. GitHub repository). Check out a full example &lt;A href="https://telemetrydrops.com/blog/weaver-from-zero-to-hero/#step-2-generate-go-code" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;here&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4. Validate your code in CI&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;Here, you can use Weaver's &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; during test execution in your CI process, ensuring that the telemetry emitted by your application (e.g. via an &lt;A href="https://opentelemetry.io/docs/collector/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Collector&lt;/SPAN&gt;&lt;/A&gt;) adheres to the schema and policies you wish to enforce.&lt;/P&gt;&lt;P class=""&gt;The &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; produces a report telling you where you're non-compliant. It exits with code &lt;SPAN class=""&gt;1&lt;/SPAN&gt; if there are any &lt;SPAN class=""&gt;violation&lt;/SPAN&gt; findings in the report. It also produces various stats in the report, such as &lt;SPAN class=""&gt;coverage&lt;/SPAN&gt;, which can be used to check if your tests encompass the full registry.&lt;/P&gt;&lt;P class=""&gt;Weaver's &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; is incredibly flexible. It supports multiple:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;input sources (e.g. file path, stdin, OTLP)&lt;/LI&gt;&lt;LI&gt;input formats (e.g. text, JSON)&lt;/LI&gt;&lt;LI&gt;output formats (e.g. YAML, JSON, JSONL)&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;It's great to have all that flexibility, but so many options can also be a bit overwhelming!&lt;/P&gt;&lt;P class=""&gt;One way to run it is like this:&lt;/P&gt;&lt;P class=""&gt;weaver registry live-check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--policy &amp;lt;path_to_policies&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--input-source otlp \&lt;/P&gt;&lt;P class=""&gt;--format yaml&lt;/P&gt;&lt;P class=""&gt;--output &amp;lt;path_to_report_output&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--otlp-grpc-address 0.0.0.0 \&lt;/P&gt;&lt;P class=""&gt;--otlp-grpc-port 4318&lt;/P&gt;&lt;P class=""&gt;Which runs a &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; on telemetry emitted by a Collector at address &lt;SPAN class=""&gt;0.0.0.0:4318&lt;/SPAN&gt;, checks it against the registry (&lt;SPAN class=""&gt;--registry&lt;/SPAN&gt; flag) and policies (&lt;SPAN class=""&gt;--policy&lt;/SPAN&gt; flag) provided, and outputs a YAML report to the specified path.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;5. Refactor!&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;If your CI process fails, you have to go back to the drawing board and refactor your code to ensure that it's compliant. UGH! But wait — refactoring doesn't have to be a nightmare, because &lt;A href="https://github.com/open-telemetry/weaver/tree/main/crates/weaver_mcp" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Weaver has an MCP server&lt;/SPAN&gt;&lt;/A&gt; (&lt;SPAN class=""&gt;weaver registry mcp&lt;/SPAN&gt;) which, paired with your AI coding agent, can be used to help you refactor the code that failed the CI validation.&lt;/P&gt;</description>
    <pubDate>Wed, 19 Aug 2026 12:00:50 GMT</pubDate>
    <dc:creator>AdrianaVillela</dc:creator>
    <dc:date>2026-08-19T12:00:50Z</dc:date>
    <item>
      <title>OTel Weaver: a high-level overview of OTel's schema and policy enforcement</title>
      <link>https://community.dynatrace.com/t5/OTel/OTel-Weaver-a-high-level-overview-of-OTel-s-schema-and-policy/m-p/303520#M419</link>
      <description>&lt;P class=""&gt;Today, I'll give you a high-level overview of &lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/weaver" target="_blank" rel="noopener"&gt;OpenTelemetry (OTel) Weaver&lt;/A&gt;&lt;/SPAN&gt;, so that you can better understand what it does, and how it can help your organization as it moves ahead in its OpenTelemetry journey.&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;What is Weaver, anyway?&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;At its core, Weaver is a tool that allows you to create, document, and manage OpenTelemetry schemas and policies. But why should you care?&lt;/P&gt;&lt;P class=""&gt;By defining and using a schema for your OpenTelemetry instrumentation, you ensure that everyone in your organization is speaking the same language. You establish:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Naming conventions&lt;/LI&gt;&lt;LI&gt;Spans, metrics, and logs (events) used by your application, and their attributes&lt;/LI&gt;&lt;LI&gt;Units of measure (metrics only)&lt;/LI&gt;&lt;LI&gt;Example values/format&lt;/LI&gt;&lt;LI&gt;Description of your telemetry&lt;/LI&gt;&lt;LI&gt;Stability level (in case something is still in the works, or is deprecated)&lt;/LI&gt;&lt;LI&gt;Policies&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;Policies are written in &lt;A href="https://www.openpolicyagent.org/docs/policy-language#why-use-rego" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Rego&lt;/SPAN&gt;&lt;/A&gt;, used by &lt;A href="https://www.openpolicyagent.org/docs/policy-language#why-use-rego" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OpenPolicy Agent (OPA)&lt;/SPAN&gt;&lt;/A&gt; and can be used to define things such as:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;Enforcing a prefix matching the company name for every custom metric, attribute, etc.&lt;/LI&gt;&lt;LI&gt;Requiring fields that are considered optional by the semantic conventions, such as brief&lt;/LI&gt;&lt;LI&gt;Validating the annotations attached to attributes and/or signals&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;Not only does Weaver let you define these, it can generate documentation (and/or code) for you, validate your schema, and enforce schema adherence. You can configure your CI process so that if someone introduces code that violates your schema and policies, that code is blocked from going into production until it's fixed.&lt;/P&gt;&lt;P class=""&gt;To use Weaver, you can either &lt;A href="https://github.com/open-telemetry/weaver#install" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;run the Weaver binary locally (by building from source), or, if you're lazy like me, you can run it via Docker.&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;&lt;P class=""&gt;&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;Weaver flow&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;To help you better understand how Weaver works, let's look at what a Weaver workflow might look like.&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;1. Create schema&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;First things first — you must create a schema for your telemetry! You do this by creating YAML files to describe your telemetry schema — i.e. files that describe your spans, metrics, and events (logs).&lt;/P&gt;&lt;P class=""&gt;&lt;SPAN class=""&gt;The schema files should go into a special schema folder in your repository. You can call the folder whatever you want. For example: &lt;/SPAN&gt;[telemetry/registry](&lt;A href="https://github.com/telemetrydrops/otel-in-practice/tree/main/stage-1-monolith/telemetry/registry" target="_blank" rel="noopener"&gt;https://github.com/telemetrydrops/otel-in-practice/tree/main/stage-1-monolith/telemetry/registry&lt;/A&gt;)&lt;SPAN class=""&gt; or &lt;/SPAN&gt;[telemetry-schema](&lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema" target="_blank" rel="noopener"&gt;https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema&lt;/A&gt;)&lt;SPAN class=""&gt;.&lt;/SPAN&gt;&lt;/P&gt;&lt;P class=""&gt;The names of the YAML files also don't matter, as Weaver will scan them and interpret them accordingly (as long as you provide the location of the schema files). Although the name doesn't matter, you should call them something meaningful.&amp;nbsp;&lt;/P&gt;&lt;P class=""&gt;As a best practice, you should create separate YAML files for spans, events (logs), metrics. If your application has multiple services, consider breaking each signal type down by service name. &lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/telemetry-schema" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;You can see a great example here&lt;/SPAN&gt;&lt;/A&gt;. Common attributes should be kept in a separate file so that &lt;A href="https://github.com/open-telemetry/opentelemetry-demo/blob/05fab63b804f9d243c34ac624f0a9083bec92127/telemetry-schema/services/cart.yaml#L10-L14" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;they can be referenced&lt;/SPAN&gt;&lt;/A&gt;, avoiding repetition.&lt;/P&gt;&lt;P class=""&gt;Once you've created your files, you validate them like this:&lt;/P&gt;&lt;P class=""&gt;weaver registry check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt;&lt;/P&gt;&lt;P class=""&gt;This ensures that your YAML is formatted correctly. For example, do your metrics definitions include units?&lt;/P&gt;&lt;P class=""&gt;Policy validation is optional, but if you'd like to be extra rigorous, you can add it to your validation process:&lt;/P&gt;&lt;P class=""&gt;weaver registry check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt;&lt;/P&gt;&lt;P class=""&gt;--policy &amp;lt;path_to_policies&amp;gt;&lt;/P&gt;&lt;P class=""&gt;&lt;STRONG&gt;2. Create templates (optional)&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;Templates are &lt;A href="https://jinja.palletsprojects.com/en/stable/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Jinja2 templates&lt;/SPAN&gt;&lt;/A&gt; that Weaver can use to transform your YAML schema into code. This code can include but is not limited to: markdown, HTML files, document templates for Confluence, and data structures in your application code.&lt;/P&gt;&lt;P class=""&gt;It's important to note that this part isn't done by Weaver. You have to create your own templates. This also means that you have to be familiar with Jinja2. For more information on how to create your own templates, &lt;A href="https://telemetrydrops.com/blog/weaver-from-zero-to-hero/#step-2-generate-go-code" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;check out this example&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P class=""&gt;Now, although Weaver itself doesn't come with its own templates, some OTel projects have created their own:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/semantic-conventions-java/tree/main/buildscripts/templates/registry" target="_blank" rel="noopener"&gt;Java templates&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/opentelemetry-go/tree/main/semconv/templates/registry/go" target="_blank" rel="noopener"&gt;Go templates&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;LI&gt;&lt;SPAN class=""&gt;&lt;A href="https://github.com/open-telemetry/opentelemetry-demo/tree/main/src/telemetry-docs/templates/markdown" target="_blank" rel="noopener"&gt;Markdown templates for the OTel Demo&lt;/A&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;This means that you can technically skip this step if there's an existing template that works for you.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3. Generate files from templates&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;With template files in hand, you can use Weaver to generate code from those templates (see step 2). That is, Weaver looks at your schema definitions, applies them to your templates, and then magically turns that into code.&lt;/P&gt;&lt;P class=""&gt;This is done by running:&lt;/P&gt;&lt;P class=""&gt;weaver registry generate \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--template &amp;lt;path_to_templates&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;&amp;lt;output_path&amp;gt;&lt;/P&gt;&lt;P class=""&gt;The template path can be either a local path or a remote path (e.g. GitHub repository). Check out a full example &lt;A href="https://telemetrydrops.com/blog/weaver-from-zero-to-hero/#step-2-generate-go-code" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;here&lt;/SPAN&gt;&lt;/A&gt;.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4. Validate your code in CI&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;Here, you can use Weaver's &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; during test execution in your CI process, ensuring that the telemetry emitted by your application (e.g. via an &lt;A href="https://opentelemetry.io/docs/collector/" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;OTel Collector&lt;/SPAN&gt;&lt;/A&gt;) adheres to the schema and policies you wish to enforce.&lt;/P&gt;&lt;P class=""&gt;The &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; produces a report telling you where you're non-compliant. It exits with code &lt;SPAN class=""&gt;1&lt;/SPAN&gt; if there are any &lt;SPAN class=""&gt;violation&lt;/SPAN&gt; findings in the report. It also produces various stats in the report, such as &lt;SPAN class=""&gt;coverage&lt;/SPAN&gt;, which can be used to check if your tests encompass the full registry.&lt;/P&gt;&lt;P class=""&gt;Weaver's &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; is incredibly flexible. It supports multiple:&lt;/P&gt;&lt;UL class=""&gt;&lt;LI&gt;input sources (e.g. file path, stdin, OTLP)&lt;/LI&gt;&lt;LI&gt;input formats (e.g. text, JSON)&lt;/LI&gt;&lt;LI&gt;output formats (e.g. YAML, JSON, JSONL)&lt;/LI&gt;&lt;/UL&gt;&lt;P class=""&gt;It's great to have all that flexibility, but so many options can also be a bit overwhelming!&lt;/P&gt;&lt;P class=""&gt;One way to run it is like this:&lt;/P&gt;&lt;P class=""&gt;weaver registry live-check \&lt;/P&gt;&lt;P class=""&gt;--registry &amp;lt;path_to_registry&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--policy &amp;lt;path_to_policies&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--input-source otlp \&lt;/P&gt;&lt;P class=""&gt;--format yaml&lt;/P&gt;&lt;P class=""&gt;--output &amp;lt;path_to_report_output&amp;gt; \&lt;/P&gt;&lt;P class=""&gt;--otlp-grpc-address 0.0.0.0 \&lt;/P&gt;&lt;P class=""&gt;--otlp-grpc-port 4318&lt;/P&gt;&lt;P class=""&gt;Which runs a &lt;SPAN class=""&gt;live-check&lt;/SPAN&gt; on telemetry emitted by a Collector at address &lt;SPAN class=""&gt;0.0.0.0:4318&lt;/SPAN&gt;, checks it against the registry (&lt;SPAN class=""&gt;--registry&lt;/SPAN&gt; flag) and policies (&lt;SPAN class=""&gt;--policy&lt;/SPAN&gt; flag) provided, and outputs a YAML report to the specified path.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;5. Refactor!&lt;/STRONG&gt;&lt;/P&gt;&lt;P class=""&gt;If your CI process fails, you have to go back to the drawing board and refactor your code to ensure that it's compliant. UGH! But wait — refactoring doesn't have to be a nightmare, because &lt;A href="https://github.com/open-telemetry/weaver/tree/main/crates/weaver_mcp" target="_blank" rel="noopener"&gt;&lt;SPAN class=""&gt;Weaver has an MCP server&lt;/SPAN&gt;&lt;/A&gt; (&lt;SPAN class=""&gt;weaver registry mcp&lt;/SPAN&gt;) which, paired with your AI coding agent, can be used to help you refactor the code that failed the CI validation.&lt;/P&gt;</description>
      <pubDate>Wed, 19 Aug 2026 12:00:50 GMT</pubDate>
      <guid>https://community.dynatrace.com/t5/OTel/OTel-Weaver-a-high-level-overview-of-OTel-s-schema-and-policy/m-p/303520#M419</guid>
      <dc:creator>AdrianaVillela</dc:creator>
      <dc:date>2026-08-19T12:00:50Z</dc:date>
    </item>
  </channel>
</rss>

