Skip to content

Commit

Permalink
Merge branch 'main' into codeboten/add-log-level
Browse files Browse the repository at this point in the history
  • Loading branch information
codeboten authored Sep 19, 2024
2 parents d70ace3 + f89f35a commit e6ae7dc
Show file tree
Hide file tree
Showing 12 changed files with 209 additions and 37 deletions.
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@
# https://help.github.com/en/articles/about-code-owners
#

* @open-telemetry/configuration-maintainers
* @open-telemetry/configuration-approvers
41 changes: 41 additions & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: "CodeQL Analysis"
on:
push:
branches: [main]
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.head_ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
CodeQL-Build:
permissions:
actions: read # for github/codeql-action/init to get workflow details
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/autobuild to send a status report
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

- name: Setup Go
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
with:
go-version: ~1.22

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6
with:
languages: go

- name: Autobuild
uses: github/codeql-action/autobuild@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6
23 changes: 21 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ The [examples](./examples) repository contains a variety of sample configuration
- [sdk-migration-config.yaml](./examples/sdk-migration-config.yaml): Includes env var substitution references to all [standard env vars](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md) which map cleanly to file configuration (see notes in the example for the set of env vars which are not referenced). Note, SDKs parsing configuration files ignore all env vars besides those referenced via [env var substitution][]. This is a great starting point for transitioning from env var based configuration to file based configuration.
- [sdk-config.yaml](./examples/sdk-config.yaml): Represents the typical default configuration. This is a good starting point if you are not using env var based configuration or wish to transition fully to file based configuration. Note, SDKs parsing configuration files ignore all env vars besides those referenced via [env var substitution][].

[env var substitution]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/file-configuration.md#environment-variable-substitution

## Code generation

There are [several tools](https://json-schema.org/implementations.html) available to generate code from a JSON schema. The following shows an example for generating code from the JSON schema in Go:
Expand Down Expand Up @@ -70,6 +68,24 @@ Properties should be modeled using the most appropriate data structures and type

In instances where there is a type mismatch between the JSON schema and equivalent standard env var, an alternative version of the property may be provided to resolve the mismatch. For example, resource attributes are configured at `.resource.attributes`, but `.resource.attributes_list` is available with a format matching that of `OTEL_RESOURCE_ATTRIBUTES`. Alternative properties are reserved for cases where there is a demonstrated need for platforms to be able to participate in configuration and there is no reasonable alternative.

### Name-value pairs

When a type requires a configurable list of name-value pairs (i.e. resource attributes, HTTP headers), model using an array of objects, each with `name` and `value` properties. While an array of name-value objects is slightly more verbose than an object where each key-value is an entry, the latter is preferred because:

* Avoids user input as keys, which ensures conformity with the [snake_case properties](#property-name-case) rule.
* Allows both the names and the values to be targets for [env var substitution]. For example:

```yaml
tracer_provider:
processors:
- batch:
exporter:
otlp:
headers:
- name: ${AUTHORIZATION_HEADER_NAME:-api-key}
value: ${AUTHORIZATION_HEADER_VALUE}
```
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md)
Expand All @@ -89,3 +105,6 @@ Maintainers ([@open-telemetry/configuration-maintainers](https://github.com/orgs
- [Tyler Yahn](https://github.com/tsloughter), Splunk
*Find more about the maintainer role in [community repository](https://github.com/open-telemetry/community/blob/main/guides/contributor/membership.md#maintainer).*
[env var substitution]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/file-configuration.md#environment-variable-substitution
3 changes: 2 additions & 1 deletion examples/anchors.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ exporters:
client_key: /app/cert.pem
client_certificate: /app/cert.pem
headers:
api-key: !!str 1234
- name: api-key
value: "1234"
compression: gzip
timeout: 10000

Expand Down
51 changes: 47 additions & 4 deletions examples/kitchen-sink.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,12 @@ logger_provider:
#
# Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_LOGS_HEADERS
headers:
api-key: "1234"
- name: api-key
value: "1234"
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_LOGS_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: "api-key=1234"
# Configure compression.
#
# Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_LOGS_COMPRESSION
Expand Down Expand Up @@ -191,7 +196,12 @@ meter_provider:
#
# Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_METRICS_HEADERS
headers:
api-key: !!str 1234
- name: api-key
value: "1234"
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_METRICS_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: "api-key=1234"
# Configure compression.
#
# Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_METRICS_COMPRESSION
Expand Down Expand Up @@ -318,7 +328,12 @@ tracer_provider:
#
# Environment variable: OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_HEADERS
headers:
api-key: !!str 1234
- name: api-key
value: "1234"
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: "api-key=1234"
# Configure compression.
#
# Environment variable: OTEL_EXPORTER_OTLP_COMPRESSION, OTEL_EXPORTER_OTLP_TRACES_COMPRESSION
Expand Down Expand Up @@ -416,12 +431,40 @@ tracer_provider:
resource:
# Configure resource attributes. Entries have higher priority than entries from .resource.attributes_list.
#
# Each entry must contain .name and .value, and may optionally include .type, which defaults to "string" if not set. The value must match the type. Known types include: string, bool, int, double, string_array, bool_array, int_array, double_array.
#
# Environment variable: OTEL_RESOURCE_ATTRIBUTES
attributes:
# Configure `service.name` resource attribute
#
# Environment variable: OTEL_SERVICE_NAME
service.name: !!str "unknown_service"
- name: service.name
value: unknown_service
# Configure other resource attributes with explicit types.
- name: string_key
value: value
type: string
- name: bool_key
value: true
type: bool
- name: int_key
value: 1
type: int
- name: double_key
value: 1.1
type: double
- name: string_array_key
value: ["value1", "value2"]
type: string_array
- name: bool_array_key
value: [ true, false ]
type: bool_array
- name: int_array_key
value: [ 1, 2 ]
type: int_array
- name: double_array_key
value: [ 1.1, 2.2 ]
type: double_array
# Configure resource attributes. Entries have lower priority than entries from .resource.attributes.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_RESOURCE_ATTRIBUTES. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
Expand Down
9 changes: 5 additions & 4 deletions examples/sdk-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ resource:
# Configure resource attributes.
attributes:
# Configure `service.name` resource attribute
service.name: unknown_service
- name: service.name
value: unknown_service

# Configure general attribute limits. See also tracer_provider.limits, logger_provider.limits.
attribute_limits:
Expand Down Expand Up @@ -65,7 +66,7 @@ tracer_provider:
# Configure max time (in milliseconds) to wait for each export.
timeout: 10000
# Configure headers:
headers: {}
headers: []
# Configure span limits. See also attribute_limits.
limits:
# Configure max span attribute value size. Overrides attribute_limits.attribute_value_length_limit.
Expand Down Expand Up @@ -134,7 +135,7 @@ meter_provider:
# Configure max time (in milliseconds) to wait for each export.
timeout: 10000
# Configure headers:
headers: {}
headers: []
# Configure temporality preference.
temporality_preference: cumulative
# Configure default histogram aggregation.
Expand Down Expand Up @@ -173,7 +174,7 @@ logger_provider:
# Configure max time (in milliseconds) to wait for each export.
timeout: 10000
# Configure headers:
headers: {}
headers: []
# Configure log record limits. See also attribute_limits.
limits:
# Configure max log record attribute value size. Overrides attribute_limits.attribute_value_length_limit.
Expand Down
26 changes: 19 additions & 7 deletions examples/sdk-migration-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
# - OTEL_EXPORTER_OTLP_CERTIFICATE
# - OTEL_EXPORTER_OTLP_CLIENT_KEY
# - OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE
# - OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_{SIGNAL}_HEADERS
# - OTEL_EXPORTER_OTLP_COMPRESSION
# - OTEL_EXPORTER_OTLP_TIMEOUT

Expand All @@ -49,7 +48,8 @@ resource:
# Configure resource attributes. Entries have higher priority than entries from .resource.attributes_list.
attributes:
# Configure `service.name` resource attribute
service.name: ${OTEL_SERVICE_NAME:-unknown_service}
- name: service.name
value: ${OTEL_SERVICE_NAME:-unknown_service}
# Configure resource attributes. Entries have lower priority than entries from .resource.attributes.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_RESOURCE_ATTRIBUTES. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
Expand Down Expand Up @@ -99,7 +99,11 @@ tracer_provider:
# Configure max time (in milliseconds) to wait for each export.
timeout: ${OTEL_EXPORTER_OTLP_TRACES_TIMEOUT:-10000}
# Configure headers:
headers: {}
headers: []
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_TRACES_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: ${OTEL_EXPORTER_OTLP_TRACES_HEADERS}
# Configure span limits. See also attribute_limits.
limits:
# Configure max span attribute value size. Overrides attribute_limits.attribute_value_length_limit.
Expand Down Expand Up @@ -167,8 +171,12 @@ meter_provider:
compression: ${OTEL_EXPORTER_OTLP_METRICS_COMPRESSION:-gzip}
# Configure max time (in milliseconds) to wait for each export.
timeout: ${OTEL_EXPORTER_OTLP_METRICS_TIMEOUT:-10000}
# Configure headers:
headers: {}
# Configure headers.
headers: []
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_METRICS_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: ${OTEL_EXPORTER_OTLP_METRICS_HEADERS}
# Configure temporality preference.
temporality_preference: ${OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE:-cumulative}
# Configure default histogram aggregation.
Expand Down Expand Up @@ -206,8 +214,12 @@ logger_provider:
compression: ${OTEL_EXPORTER_OTLP_LOGS_COMPRESSION:-gzip}
# Configure max time (in milliseconds) to wait for each export.
timeout: ${OTEL_EXPORTER_OTLP_LOGS_TIMEOUT:-10000}
# Configure headers:
headers: {}
# Configure headers.
headers: []
# Configure headers. Entries have lower priority than entries from .headers.
#
# The value is a list of comma separated key-value pairs, matching the format of OTEL_EXPORTER_OTLP_HEADERS, OTEL_EXPORTER_OTLP_LOGS_HEADERS. See https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/configuration/sdk-environment-variables.md#general-sdk-configuration for details.
headers_list: ${OTEL_EXPORTER_OTLP_LOGS_HEADERS}
# Configure log record limits. See also attribute_limits.
limits:
# Configure max log record attribute value size. Overrides attribute_limits.attribute_value_length_limit.
Expand Down
32 changes: 22 additions & 10 deletions schema/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,6 @@
"title": "Common",
"type": ["object", "null"],
"$defs": {
"Headers": {
"type": ["object", "null"],
"title": "Headers",
"patternProperties": {
".*": {
"type": ["string", "null"]
}
}
},
"IncludeExclude": {
"type": "object",
"additionalProperties": false,
Expand Down Expand Up @@ -43,6 +34,21 @@
}
}
},
"NameStringValuePair": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"value": {
"type": ["string", "null"]
}
},
"required": [
"name", "value"
]
},
"Otlp": {
"type": ["object", "null"],
"additionalProperties": false,
Expand All @@ -64,7 +70,13 @@
"type": ["string", "null"]
},
"headers": {
"$ref": "#/$defs/Headers"
"type": "array",
"items": {
"$ref": "common.json#/$defs/NameStringValuePair"
}
},
"headers_list": {
"type": ["string", "null"]
},
"compression": {
"type": ["string", "null"]
Expand Down
8 changes: 7 additions & 1 deletion schema/meter_provider.json
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,13 @@
"type": ["string", "null"]
},
"headers": {
"$ref": "common.json#/$defs/Headers"
"type": "array",
"items": {
"$ref": "common.json#/$defs/NameStringValuePair"
}
},
"headers_list": {
"type": ["string", "null"]
},
"compression": {
"type": ["string", "null"]
Expand Down
Loading

0 comments on commit e6ae7dc

Please sign in to comment.