| 1 | plugin_name: otel.plugin |
| 2 | modules: |
| 3 | - meta: |
| 4 | id: collector-otel.plugin-otel |
| 5 | plugin_name: otel.plugin |
| 6 | module_name: otel |
| 7 | monitored_instance: |
| 8 | name: OpenTelemetry |
| 9 | link: https://opentelemetry.io/ |
| 10 | categories: |
| 11 | - data-collection.cloud-and-devops |
| 12 | icon_filename: opentelemetry.svg |
| 13 | alternative_monitored_instances: [] |
| 14 | keywords: |
| 15 | - opentelemetry |
| 16 | - otel |
| 17 | - otlp |
| 18 | - grpc |
| 19 | - metrics |
| 20 | - logs |
| 21 | - observability |
| 22 | related_resources: |
| 23 | integrations: |
| 24 | list: [] |
| 25 | info_provided_to_referring_integrations: |
| 26 | description: "" |
| 27 | overview: |
| 28 | data_collection: |
| 29 | metrics_description: | |
| 30 | This plugin enables the Netdata Agent to receive OpenTelemetry metrics and logs |
| 31 | via the OTLP/gRPC protocol from any compatible source — collectors, SDKs, or |
| 32 | instrumented applications. |
| 33 | |
| 34 | Metrics are automatically visualized as Netdata charts with full alerting support. |
| 35 | Logs are stored in systemd-compatible journal files and can be explored through |
| 36 | the Netdata Logs tab. |
| 37 | method_description: | |
| 38 | The plugin listens on a configurable gRPC endpoint for incoming OTLP data. |
| 39 | |
| 40 | Incoming metrics are mapped to Netdata charts using YAML mapping rules placed in the |
| 41 | chart configs directory (default `/etc/netdata/otel.d/v1/metrics/`). Each file can |
| 42 | contain entries that match metrics by instrumentation scope and metric name, and control |
| 43 | how data point attributes translate to chart instances and dimensions. Per-metric |
| 44 | overrides for the collection interval and grace period are also supported. Without a |
| 45 | matching rule, the plugin creates charts using default settings. Charts with no incoming |
| 46 | data are automatically expired and removed. |
| 47 | |
| 48 | | Mapping file option | Description | |
| 49 | |:--------------------|:------------| |
| 50 | | `instrumentation_scope.name` | Regex to match the instrumentation scope name | |
| 51 | | `instrumentation_scope.version` | Regex to match the instrumentation scope version | |
| 52 | | `dimension_attribute_key` | Data point attribute whose value becomes the dimension name | |
| 53 | | `interval_secs` | Per-metric collection interval override (1–3600 seconds) | |
| 54 | | `grace_period_secs` | Per-metric grace period override | |
| 55 | |
| 56 | Incoming logs are written to journal files with configurable rotation and retention |
| 57 | policies. |
| 58 | supported_platforms: |
| 59 | include: |
| 60 | - Linux |
| 61 | exclude: [] |
| 62 | multi_instance: false |
| 63 | additional_permissions: |
| 64 | description: "" |
| 65 | default_behavior: |
| 66 | auto_detection: |
| 67 | description: | |
| 68 | The plugin starts automatically and listens on `127.0.0.1:4317` for incoming OTLP/gRPC connections. |
| 69 | limits: |
| 70 | description: "" |
| 71 | performance_impact: |
| 72 | description: "" |
| 73 | setup: |
| 74 | prerequisites: |
| 75 | list: |
| 76 | - title: OpenTelemetry data source |
| 77 | description: | |
| 78 | An OpenTelemetry Collector, SDK, or instrumented application configured to send OTLP data |
| 79 | to the Netdata agent's gRPC endpoint. |
| 80 | configuration: |
| 81 | file: |
| 82 | name: otel.yaml |
| 83 | options: |
| 84 | description: | |
| 85 | The plugin is configured via `otel.yaml` in the Netdata configuration directory. |
| 86 | Only the fields you want to change need to be specified. |
| 87 | |
| 88 | Any option can also be overridden via environment variables with the `NETDATA_OTEL_` |
| 89 | prefix (highest priority). The variable name is the config option in all caps with |
| 90 | dots replaced by underscores — e.g. `endpoint.tls_cert_path` becomes |
| 91 | `NETDATA_OTEL_ENDPOINT_TLS_CERT_PATH`. |
| 92 | folding: |
| 93 | title: Config options |
| 94 | enabled: true |
| 95 | list: |
| 96 | - name: endpoint.path |
| 97 | description: gRPC endpoint to listen on for incoming OTLP data. |
| 98 | default_value: "127.0.0.1:4317" |
| 99 | required: false |
| 100 | - name: endpoint.tls_cert_path |
| 101 | description: Path to TLS certificate file. Enables TLS when provided. |
| 102 | default_value: "" |
| 103 | required: false |
| 104 | - name: endpoint.tls_key_path |
| 105 | description: Path to TLS private key file. Required when TLS certificate is provided. |
| 106 | default_value: "" |
| 107 | required: false |
| 108 | - name: endpoint.tls_ca_cert_path |
| 109 | description: Path to TLS CA certificate file for client authentication. |
| 110 | default_value: "" |
| 111 | required: false |
| 112 | - name: metrics.chart_configs_dir |
| 113 | description: Directory containing metric mapping YAML files. |
| 114 | detailed_description: | |
| 115 | Each file defines how OTLP metrics are mapped to Netdata charts. |
| 116 | Files can match metrics by instrumentation scope and name, set the |
| 117 | dimension attribute key, and override timing parameters. The plugin |
| 118 | ships stock mappings; user files in this directory take priority. |
| 119 | default_value: "/etc/netdata/otel.d/v1/metrics/" |
| 120 | required: false |
| 121 | - name: metrics.interval_secs |
| 122 | description: Collection interval in seconds (1–3600). Defines the Netdata chart update frequency. |
| 123 | default_value: 10 |
| 124 | required: false |
| 125 | - name: metrics.grace_period_secs |
| 126 | description: Grace period in seconds. After the last data point, the plugin waits this long before gap-filling. |
| 127 | default_value: 60 |
| 128 | required: false |
| 129 | - name: metrics.expiry_duration_secs |
| 130 | description: Expiry duration in seconds. Charts with no data for this long are removed. |
| 131 | default_value: 900 |
| 132 | required: false |
| 133 | - name: metrics.max_new_charts_per_request |
| 134 | description: Maximum new charts created per gRPC request. |
| 135 | detailed_description: | |
| 136 | Limits cardinality explosion from high-cardinality label combinations. |
| 137 | default_value: 100 |
| 138 | required: false |
| 139 | - name: logs.journal_dir |
| 140 | description: Directory to store journal files for ingested logs. |
| 141 | default_value: "" |
| 142 | required: true |
| 143 | - name: logs.size_of_journal_file |
| 144 | description: Maximum file size before rotating to a new journal file. |
| 145 | default_value: "100MB" |
| 146 | required: false |
| 147 | - name: logs.entries_of_journal_file |
| 148 | description: Maximum log entries per journal file. |
| 149 | default_value: 50000 |
| 150 | required: false |
| 151 | - name: logs.duration_of_journal_file |
| 152 | description: Maximum time span within a single journal file. |
| 153 | default_value: "2 hours" |
| 154 | required: false |
| 155 | - name: logs.number_of_journal_files |
| 156 | description: Maximum number of journal files to keep. |
| 157 | default_value: 10 |
| 158 | required: false |
| 159 | - name: logs.size_of_journal_files |
| 160 | description: Maximum total size of all journal files. |
| 161 | default_value: "1GB" |
| 162 | required: false |
| 163 | - name: logs.duration_of_journal_files |
| 164 | description: Maximum age of journal files. |
| 165 | default_value: "7 days" |
| 166 | required: false |
| 167 | - name: logs.store_otlp_json |
| 168 | description: Store the complete OTLP JSON in each log entry. |
| 169 | detailed_description: | |
| 170 | Useful for debugging and reprocessing, but increases storage usage. |
| 171 | default_value: false |
| 172 | required: false |
| 173 | examples: |
| 174 | folding: |
| 175 | title: Config |
| 176 | enabled: true |
| 177 | list: |
| 178 | - name: Basic configuration |
| 179 | folding: |
| 180 | enabled: false |
| 181 | description: Listen on default endpoint with default settings. |
| 182 | config: | |
| 183 | endpoint: |
| 184 | path: "127.0.0.1:4317" |
| 185 | metrics: |
| 186 | chart_configs_dir: /etc/netdata/otel.d/v1/metrics/ |
| 187 | interval_secs: 10 |
| 188 | grace_period_secs: 60 |
| 189 | expiry_duration_secs: 900 |
| 190 | max_new_charts_per_request: 100 |
| 191 | logs: |
| 192 | journal_dir: /var/log/netdata/otel-journals |
| 193 | - name: Partial user override |
| 194 | description: | |
| 195 | Override only specific fields in the user config. All other settings |
| 196 | are inherited from the stock config. Unknown fields are ignored for |
| 197 | forward compatibility. |
| 198 | config: | |
| 199 | endpoint: |
| 200 | path: "0.0.0.0:4317" |
| 201 | logs: |
| 202 | number_of_journal_files: 20 |
| 203 | duration_of_journal_files: "14 days" |
| 204 | - name: Metric mapping file |
| 205 | description: | |
| 206 | Place YAML files like this in `/etc/netdata/otel.d/v1/metrics/` to control how |
| 207 | OTLP metrics are mapped to Netdata charts. This example maps metrics from the |
| 208 | OpenTelemetry Collector hostmetrics receiver. |
| 209 | config: | |
| 210 | metrics: |
| 211 | "system.network.connections": |
| 212 | - instrumentation_scope: |
| 213 | name: .*hostmetricsreceiver.*networkscraper$ |
| 214 | dimension_attribute_key: state |
| 215 | |
| 216 | "system.cpu.utilization": |
| 217 | - instrumentation_scope: |
| 218 | name: .*hostmetricsreceiver.*cpuscraper$ |
| 219 | dimension_attribute_key: state |
| 220 | |
| 221 | "system.memory.usage": |
| 222 | - instrumentation_scope: |
| 223 | name: .*hostmetricsreceiver.*memoryscraper$ |
| 224 | dimension_attribute_key: state |
| 225 | interval_secs: 5 |
| 226 | - name: TLS-enabled configuration |
| 227 | description: Listen with TLS enabled for secure connections. |
| 228 | config: | |
| 229 | endpoint: |
| 230 | path: "0.0.0.0:4317" |
| 231 | tls_cert_path: /etc/netdata/ssl/cert.pem |
| 232 | tls_key_path: /etc/netdata/ssl/key.pem |
| 233 | metrics: |
| 234 | chart_configs_dir: /etc/netdata/otel.d/v1/metrics/ |
| 235 | interval_secs: 10 |
| 236 | grace_period_secs: 60 |
| 237 | expiry_duration_secs: 900 |
| 238 | max_new_charts_per_request: 100 |
| 239 | logs: |
| 240 | journal_dir: /var/log/netdata/otel-journals |
| 241 | troubleshooting: |
| 242 | problems: |
| 243 | list: [] |
| 244 | alerts: [] |
| 245 | metrics: |
| 246 | folding: |
| 247 | title: Metrics |
| 248 | enabled: false |
| 249 | description: | |
| 250 | Metrics are dynamically created based on the OpenTelemetry data received. |
| 251 | The specific metrics depend on the OTLP sources sending data to the plugin. |
| 252 | availability: [] |
| 253 | scopes: [] |