diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1c2d9786cad3..6b090dbe7bc3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -45,6 +45,7 @@ content/en/docs/zero-code/go @open-telemetry/docs-approvers @open-te content/en/docs/zero-code/java/ @open-telemetry/docs-approvers @open-telemetry/java-approvers @open-telemetry/java-instrumentation-approvers content/en/docs/zero-code/js/ @open-telemetry/docs-approvers @open-telemetry/javascript-approvers content/en/docs/zero-code/net/ @open-telemetry/docs-approvers @open-telemetry/dotnet-approvers @open-telemetry/dotnet-instrumentation-approvers +content/en/docs/zero-code/python/ @open-telemetry/docs-approvers @open-telemetry/python-approvers content/en/docs/zero-code/php/ @open-telemetry/docs-approvers @open-telemetry/php-approvers content/en/ecosystem/demo/ @open-telemetry/demo-approvers @open-telemetry/demo-approvers content/zh/ @open-telemetry/docs-maintainers @open-telemetry/docs-zh-approvers diff --git a/.textlintrc.yml b/.textlintrc.yml index 95125fda5a7d..e70a4a84d709 100644 --- a/.textlintrc.yml +++ b/.textlintrc.yml @@ -8,8 +8,8 @@ filters: enablingComment: prettier-ignore-end allowlist: allow: - # Don't check registry .yml file fields for language, repo and tags: - - '/^\s*(?:language|repo|name|docs): .*$/m' + # Don't check registry .yml file fields for language, repo, url and tags: + - '/^\s*(?:language|repo|name|docs|url): .*$/m' - /^(?:tags):(\s*-.+$)*/m # Hugo template syntax: - /{{.*?}}/ diff --git a/content/en/blog/2022/debug-otel-with-otel/index.md b/content/en/blog/2022/debug-otel-with-otel/index.md index 530842a4f0bf..622f09478107 100644 --- a/content/en/blog/2022/debug-otel-with-otel/index.md +++ b/content/en/blog/2022/debug-otel-with-otel/index.md @@ -261,4 +261,4 @@ COPY opentelemetry_module.conf /etc/nginx/conf.d https://github.com/open-telemetry/opentelemetry-cpp-contrib/releases/tag/webserver%2Fv1.0.1 [java]: /docs/zero-code/java/agent/configuration/#capturing-http-request-and-response-headers -[python]: /docs/languages/python/automatic/ +[python]: /docs/zero-code/python/ diff --git a/content/en/blog/2023/end-user-discussions-03.md b/content/en/blog/2023/end-user-discussions-03.md index fd88538c28a7..a7e2b4497c27 100644 --- a/content/en/blog/2023/end-user-discussions-03.md +++ b/content/en/blog/2023/end-user-discussions-03.md @@ -190,7 +190,7 @@ agent to the host metrics receiver for infrastructure monitoring. maturing in OTel; for example, the Java JAR agent takes care of instrumenting [most libraries](https://github.com/open-telemetry/opentelemetry-java-instrumentation/blob/main/docs/supported-libraries.md#libraries--frameworks) that are used by applications. Auto-instrumentation is also available for - [Python](/docs/languages/python/automatic/), [.NET](/docs/zero-code/net/), and + [Python](/docs/zero-code/python/), [.NET](/docs/zero-code/net/), and [Node.js](/docs/zero-code/js/). - If you’re using Kubernetes, they can use the [OTel operator](https://github.com/open-telemetry/opentelemetry-operator), diff --git a/content/en/blog/2023/end-user-q-and-a-01.md b/content/en/blog/2023/end-user-q-and-a-01.md index b0fae1f5b62a..ccb51f0cb0df 100644 --- a/content/en/blog/2023/end-user-q-and-a-01.md +++ b/content/en/blog/2023/end-user-q-and-a-01.md @@ -169,7 +169,7 @@ They are hoping to leverage [OpenTelemetry’s Exemplars](/docs/specs/otel/metrics/data-model/#exemplars) to link traces and metrics. -### How is the organization sending telemetry data to various observability back-ends? +### How is the organization sending telemetry data to various observability backends? J’s team uses a combination of the proprietary backend agent and the OpenTelemetry Collector (for metrics). They are one of the primary users of diff --git a/content/en/docs/collector/_index.md b/content/en/docs/collector/_index.md index 12942cf9f9ff..85d354bdc9d3 100644 --- a/content/en/docs/collector/_index.md +++ b/content/en/docs/collector/_index.md @@ -3,7 +3,7 @@ title: Collector description: Vendor-agnostic way to receive, process and export telemetry data. aliases: [collector/about] cascade: - vers: 0.103.0 + vers: 0.103.1 weight: 270 --- diff --git a/content/en/docs/collector/internal-telemetry.md b/content/en/docs/collector/internal-telemetry.md index b54a555eca02..2c4190b4a205 100644 --- a/content/en/docs/collector/internal-telemetry.md +++ b/content/en/docs/collector/internal-telemetry.md @@ -332,4 +332,4 @@ with the network or backend receiving the data. You can monitor data ingress with the `otelcol_receiver_accepted_spans` and `otelcol_receiver_accepted_metric_points` metrics and data egress with the -`otecol_exporter_sent_spans` and `otelcol_exporter_sent_metric_points` metrics. +`otelcol_exporter_sent_spans` and `otelcol_exporter_sent_metric_points` metrics. diff --git a/content/en/docs/collector/management.md b/content/en/docs/collector/management.md index d41987eea02b..7e4a7ce2247b 100644 --- a/content/en/docs/collector/management.md +++ b/content/en/docs/collector/management.md @@ -90,7 +90,7 @@ We will set up a simple OpAMP control plane consisting of an example OpAMP server and let an OpenTelemetry Collector connect to it via an example OpAMP supervisor. -First, clone the `open-telemetry/opamp-go` repo: +First, clone the `open-telemetry/opamp-go` repository: ```sh git clone https://github.com/open-telemetry/opamp-go.git @@ -159,7 +159,7 @@ service: ``` Now it's time to launch the supervisor (which in turn will launch your -OpenTelemetry collector): +OpenTelemetry Collector): ```console $ go run . diff --git a/content/en/docs/collector/troubleshooting.md b/content/en/docs/collector/troubleshooting.md index e48030b648fb..2483bddb0058 100644 --- a/content/en/docs/collector/troubleshooting.md +++ b/content/en/docs/collector/troubleshooting.md @@ -2,7 +2,7 @@ title: Troubleshooting description: Recommendations for troubleshooting the Collector weight: 25 -cSpell:ignore: pprof tracez zpages +cSpell:ignore: confmap pprof tracez zpages --- On this page, you can learn how to troubleshoot the health and performance of @@ -359,3 +359,21 @@ container, producing the error message the `NO_WINDOWS_SERVICE=1` environment variable must be set to force the Collector to start as if it were running in an interactive terminal, without attempting to run as a Windows service. + +### Collector is experiencing configuration issues + +The Collector might experience problems due to configuration issues. + +#### Null maps + +During configuration resolution of multiple configs, values in earlier configs +are removed in favor of later configs, even if the later value is null. You can +fix this issue by + +- Using `{}` to represent an empty map, such as `processors: {}` instead of + `processors:`. +- Omitting empty configurations such as `processors:` from the configuration. + +See +[confmap troubleshooting](https://github.com/open-telemetry/opentelemetry-collector/blob/main/confmap/README.md#null-maps) +for more information. diff --git a/content/en/docs/concepts/instrumentation/zero-code.md b/content/en/docs/concepts/instrumentation/zero-code.md index 6b0d74b6ff9f..14a158f40975 100644 --- a/content/en/docs/concepts/instrumentation/zero-code.md +++ b/content/en/docs/concepts/instrumentation/zero-code.md @@ -49,4 +49,4 @@ Automatic instrumentation is available for the following languages: - [Java](/docs/zero-code/java/) - [JavaScript](/docs/zero-code/js/) - [PHP](/docs/zero-code/php/) -- [Python](/docs/languages/python/automatic/) +- [Python](/docs/zero-code/python/) diff --git a/content/en/docs/concepts/signals/baggage.md b/content/en/docs/concepts/signals/baggage.md index 1e7c7cc4d84d..7cf6d1379fce 100644 --- a/content/en/docs/concepts/signals/baggage.md +++ b/content/en/docs/concepts/signals/baggage.md @@ -4,46 +4,52 @@ weight: 4 description: Contextual information that is passed between signals. --- -In OpenTelemetry, Baggage is contextual information that’s passed between spans. -It's a key-value store that resides alongside span context in a trace, making -values available to any span created within that trace. +In OpenTelemetry, Baggage is contextual information that resides next to +context. Baggage is a key-value store, which means it lets you +[propagate](/docs/concepts/context-propagation/#propagation) any data you like +alongside [context](/docs/concepts/context-propagation/#context). -For example, imagine you want to have a `ClientId` attribute on every span in -your trace, which involves multiple services; however, `ClientId` is only -available in one specific service. To accomplish your goal, you can use -OpenTelemetry Baggage to propagate this value across your system. +Baggage means you can pass data across services and processes, making it +available to add to [traces](/docs/concepts/signals/traces/), +[metrics](/docs/concepts/signals/metrics/), or +[logs](/docs/concepts/signals/logs/) in those services. -OpenTelemetry uses -[Context Propagation](/docs/concepts/signals/traces/#context-propagation) to -pass Baggage around, and each of the different library implementations has -propagators that parse and make that Baggage available without you needing to -explicitly implement it. +## Example -![OTel Baggage](/img/otel-baggage.svg) +Baggage is often used in tracing to propagate additional data across services. + +For example, imagine you have a `clientId` at the start of a request, but you'd +like for that ID to be available on all spans in a trace, some metrics in +another service, and some logs along the way. Because the trace may span +multiple services, you need some way to propagate that data without copying the +`clientId` across many places in your codebase. -## Why does OTel Baggage exist? +By using +[Context Propagation](/docs/concepts/signals/traces/#context-propagation) to +pass baggage across these services, the `clientId` is available to add to any +additional spans, metrics, or logs. Additionally, instrumentations automatically +propagate baggage for you. -Baggage provides a uniform way to store and propagate information across a trace -and other signals. For example, you may want to attach information from your -application to a span and retrieve that information much later and use it later -on with another span. However, spans in OpenTelemetry are immutable once -created, and can be exported before you need information on them later on. -Baggage allows you to work around this problem by providing a place to store and -retrieve information. +![OTel Baggage](/img/otel-baggage.svg) ## What should OTel Baggage be used for? -Common use cases include information that’s only accessible further up a stack. -This can include things like Account Identification, User IDs, Product IDs, and -origin IPs, for example. Passing these down your stack allows you to then add -them to your Spans in downstream services to make it easier to filter when -you’re searching in your Observability backend. +Baggage is best used to include information typically available only at the +start of a request further downstream. This can include things like Account +Identification, User IDs, Product IDs, and origin IPs, for example. + +Propagating this information using baggage allows for deeper analysis of +telemetry in a backend. For example, if you include information like a User ID +on a span that tracks a database call, you can much more easily answer questions +like "which users are experiencing the slowest database calls?" You can also log +information about a downstream operation and include that same User ID in the +log data. ![OTel Baggage](/img/otel-baggage-2.svg) ## Baggage security considerations -Sensitive Baggage items could be shared with unintended resources, like +Sensitive Baggage items can be shared with unintended resources, like third-party APIs. This is because automatic instrumentation includes Baggage in most of your service’s network requests. Specifically, Baggage and other parts of trace context are sent in HTTP headers, making it visible to anyone @@ -52,22 +58,21 @@ then this risk may not apply, but keep in mind that downstream services could propagate Baggage outside your network. Also, there are no built-in integrity checks to ensure that Baggage items are -yours, so exercise caution when retrieving them. +yours, so exercise caution when reading them. -## Baggage is not the same as Span attributes +## Baggage is not the same as attributes -One important thing to note about Baggage is that it is not a subset of the -[Span Attributes](/docs/concepts/signals/traces/#attributes). When you add -something as Baggage, it does not automatically end up on the Attributes of the -child system’s spans. You must explicitly take something out of Baggage and -append it as Attributes. +An important thing to note about baggage is that it is a separate key-value +store and is unassociated with attributes on spans, metrics, or logs without +explicitly adding them. -For example, in .NET you might do this: +To add baggage entries to attributes, you need to explicitly read the data from +baggage and add it as attributes to your spans, metrics, or logs. -```csharp -var accountId = Baggage.GetBaggage("AccountId"); -Activity.Current?.SetTag("AccountId", accountId); -``` +Because a common use cases for Baggage is to add data to +[Span Attributes](/docs/concepts/signals/traces/#attributes) across a whole +trace, several languages have Baggage Span Processors that add data from baggage +as attributes on span creation. > For more information, see the [baggage specification][]. diff --git a/content/en/docs/contributing/blog.md b/content/en/docs/contributing/blog.md index dda6ff74788b..c798246149dd 100644 --- a/content/en/docs/contributing/blog.md +++ b/content/en/docs/contributing/blog.md @@ -79,13 +79,13 @@ Follow these steps to create a post from the template: 1. Run the following command from the repository root: ```sh - npx hugo new content/en/blog/2023/short-name-for-post.md + npx hugo new content/en/blog/2024/short-name-for-post.md ``` If your post has images or other assets, run the following command: ```sh - npx hugo new content/en/blog/2023/short-name-for-post/index.md + npx hugo new content/en/blog/2024/short-name-for-post/index.md ``` 1. Edit the Markdown file at the path you provided in the previous command. The diff --git a/content/en/docs/demo/_index.md b/content/en/docs/demo/_index.md index f4ed9dd79043..cf0cdf49607c 100644 --- a/content/en/docs/demo/_index.md +++ b/content/en/docs/demo/_index.md @@ -63,7 +63,7 @@ solve them. We'll be adding more scenarios over time. - Generate a [Product Catalog error](feature-flags) for `GetProduct` requests - with product id: `OLJCESPC7Z` using the Feature Flag service + with product ID: `OLJCESPC7Z` using the Feature Flag service - Discover a memory leak and diagnose it using metrics and traces. [Read more](scenarios/recommendation-cache/) diff --git a/content/en/docs/demo/feature-flags.md b/content/en/docs/demo/feature-flags.md index f7a798f4b625..4b9fd1c72999 100644 --- a/content/en/docs/demo/feature-flags.md +++ b/content/en/docs/demo/feature-flags.md @@ -19,7 +19,7 @@ change the `defaultVariant` value in the config file for a given flag to "on". | `adServiceManualGc` | Ad Service | Trigger full manual garbage collections in the ad service | | `adServiceHighCpu` | Ad Service | Trigger high cpu load in the ad service. If you want to demo cpu throttling, set cpu resource limits | | `cartServiceFailure` | Cart Service | Generate an error for `EmptyCart` 1/10th of the time | -| `productCatalogFailure` | Product Catalog | Generate an error for `GetProduct` requests with product id: `OLJCESPC7Z` | +| `productCatalogFailure` | Product Catalog | Generate an error for `GetProduct` requests with product ID: `OLJCESPC7Z` | | `recommendationServiceCacheFailure` | Recommendation | Create a memory leak due to an exponentially growing cache. 1.4x growth, 50% of requests trigger growth. | | `paymentServiceFailure` | Payment Service | Generate an error when calling the `charge` method. | | `paymentServiceUnreachable` | Checkout Service | Use a bad address when calling the PaymentService to make it seem like the PaymentService is unavailable. | diff --git a/content/en/docs/kubernetes/operator/automatic.md b/content/en/docs/kubernetes/operator/automatic.md index d606c01ed93b..22bd2963d3b2 100644 --- a/content/en/docs/kubernetes/operator/automatic.md +++ b/content/en/docs/kubernetes/operator/automatic.md @@ -404,7 +404,7 @@ spec: #### Learn more {#python-learn-more} -[See the Python agent Configuration docs for more details.](/docs/languages/python/automatic/configuration/#disabling-specific-instrumentations) +[See the Python agent Configuration docs for more details.](/docs/zero-code/python/configuration/#disabling-specific-instrumentations) ### Go diff --git a/content/en/docs/kubernetes/operator/troubleshooting/_index.md b/content/en/docs/kubernetes/operator/troubleshooting/_index.md index 8349c7457f97..91f696066c0f 100644 --- a/content/en/docs/kubernetes/operator/troubleshooting/_index.md +++ b/content/en/docs/kubernetes/operator/troubleshooting/_index.md @@ -4,5 +4,5 @@ linkTitle: Troubleshooting description: Contains a collection of tips for troubleshooting various aspects of the OpenTelemetry Kubernetes Operator. For example, what to do when the target - allocator isn't scraping metrics. + allocator is failing to discover scrape targets. --- diff --git a/content/en/docs/kubernetes/operator/troubleshooting/target-allocator.md b/content/en/docs/kubernetes/operator/troubleshooting/target-allocator.md new file mode 100644 index 000000000000..ea979bece401 --- /dev/null +++ b/content/en/docs/kubernetes/operator/troubleshooting/target-allocator.md @@ -0,0 +1,515 @@ +--- +title: Target Allocator +cSpell:ignore: bleh targetallocator +--- + +If you’ve enabled +[Target Allocator](/docs/kubernetes/operator/target-allocator/) service +discovery on the [OpenTelemetry Operator](/docs/kubernetes/operator), and the +Target Allocator is failing to discover scrape targets, there are a few +troubleshooting steps that you can take to help you understand what’s going on +and restore normal operation. + +## Troubleshooting steps + +### Did you deploy all of your resources to Kubernetes? + +As a first step, make sure that you have deployed all relevant resources to your +Kubernetes cluster. + +### Do you know if metrics are actually being scraped? + +After you’ve deployed all of your resources to Kubernetes, make sure that the +Target Allocator is discovering scrape targets from your +[`ServiceMonitor`](https://prometheus-operator.dev/docs/operator/design/#servicemonitor)(s) +or +[`PodMonitor`](https://prometheus-operator.dev/docs/user-guides/getting-started/#using-podmonitors)(s). + +Suppose that you have this `ServiceMonitor` definition: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: sm-example + namespace: opentelemetry + labels: + app.kubernetes.io/name: py-prometheus-app + release: prometheus +spec: + selector: + matchLabels: + app: my-app + namespaceSelector: + matchNames: + - opentelemetry + endpoints: + - port: prom + path: /metrics + - port: py-client-port + interval: 15s + - port: py-server-port +``` + +this `Service` definition: + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: py-prometheus-app + namespace: opentelemetry + labels: + app: my-app + app.kubernetes.io/name: py-prometheus-app +spec: + selector: + app: my-app + app.kubernetes.io/name: py-prometheus-app + ports: + - name: prom + port: 8080 +``` + +and this `OpenTelemetryCollector` definition: + +```yaml +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: otelcol + namespace: opentelemetry +spec: + mode: statefulset + targetAllocator: + enabled: true + serviceAccount: opentelemetry-targetallocator-sa + prometheusCR: + enabled: true + podMonitorSelector: {} + serviceMonitorSelector: {} + config: + receivers: + otlp: + protocols: + grpc: {} + http: {} + prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + scrape_interval: 10s + static_configs: + - targets: ['0.0.0.0:8888'] + + processors: + batch: {} + + exporters: + logging: + verbosity: detailed + + service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [logging] + metrics: + receivers: [otlp, prometheus] + processors: [] + exporters: [logging] + logs: + receivers: [otlp] + processors: [batch] + exporters: [logging] +``` + +First, set up a `port-forward` in Kubernetes, so that you can expose the Target +Allocator service: + +```shell +kubectl port-forward svc/otelcol-targetallocator -n opentelemetry 8080:80 +``` + +Where `otelcol-targetallocator` is the value of `metadata.name` in your +`OpenTelemetryCollector` CR concatenated with the `-targetallocator` suffix, and +`opentelemetry` is the namespace to which the `OpenTelemetryCollector` CR is +deployed. + +{{% alert title="Tip" %}} + +You can also get the service name by running + +```shell +kubectl get svc -l app.kubernetes.io/component=opentelemetry-targetallocator -n +``` + +{{% /alert %}} + +Next, get a list of jobs registered with the Target Allocator: + +```shell +curl localhost:8080/jobs | jq +``` + +Your sample output should look like this: + +```json +{ + "serviceMonitor/opentelemetry/sm-example/1": { + "_link": "/jobs/serviceMonitor%2Fopentelemetry%2Fsm-example%2F1/targets" + }, + "serviceMonitor/opentelemetry/sm-example/2": { + "_link": "/jobs/serviceMonitor%2Fopentelemetry%2Fsm-example%2F2/targets" + }, + "otel-collector": { + "_link": "/jobs/otel-collector/targets" + }, + "serviceMonitor/opentelemetry/sm-example/0": { + "_link": "/jobs/serviceMonitor%2Fopentelemetry%2Fsm-example%2F0/targets" + }, + "podMonitor/opentelemetry/pm-example/0": { + "_link": "/jobs/podMonitor%2Fopentelemetry%2Fpm-example%2F0/targets" + } +} +``` + +Where `serviceMonitor/opentelemetry/sm-example/0` represents one of the +`Service` ports that the `ServiceMonitor`picked up: + +- `opentelemetry` is the namespace in which the `ServiceMonitor` resource + resides. +- `sm-example` is the name of the `ServiceMonitor`. +- `0` is one of the port endpoints matched between the `ServiceMonitor` and the + `Service`. + +Similarly, the `PodMonitor`, shows up as `podMonitor/opentelemetry/pm-example/0` +in the `curl` output. + +This is good news, because it tells us that the scrape config discovery is +working! + +You might also be wondering about the `otel-collector` entry. This is happening +because `spec.config.receivers.prometheusReceiver` in the +`OpenTelemetryCollector` resource (named `otel-collector`) has self-scrape +enabled: + +```yaml +prometheus: + config: + scrape_configs: + - job_name: 'otel-collector' + scrape_interval: 10s + static_configs: + - targets: ['0.0.0.0:8888'] +``` + +We can take a deeper look into `serviceMonitor/opentelemetry/sm-example/0`, to +see what scrape targets are getting picked up by running `curl` against the +value of the `_link` output above: + +```shell +curl localhost:8080/jobs/serviceMonitor%2Fopentelemetry%2Fsm-example%2F0/targets | jq +``` + +Sample output: + +```json +{ + "otelcol-collector-0": { + "_link": "/jobs/serviceMonitor%2Fopentelemetry%2Fsm-example%2F0/targets?collector_id=otelcol-collector-0", + "targets": [ + { + "targets": ["10.244.0.11:8080"], + "labels": { + "__meta_kubernetes_endpointslice_port_name": "prom", + "__meta_kubernetes_pod_labelpresent_app_kubernetes_io_name": "true", + "__meta_kubernetes_endpointslice_port_protocol": "TCP", + "__meta_kubernetes_endpointslice_address_target_name": "py-prometheus-app-575cfdd46-nfttj", + "__meta_kubernetes_endpointslice_annotation_endpoints_kubernetes_io_last_change_trigger_time": "2024-06-21T20:01:37Z", + "__meta_kubernetes_endpointslice_labelpresent_app_kubernetes_io_name": "true", + "__meta_kubernetes_pod_name": "py-prometheus-app-575cfdd46-nfttj", + "__meta_kubernetes_pod_controller_name": "py-prometheus-app-575cfdd46", + "__meta_kubernetes_pod_label_app_kubernetes_io_name": "py-prometheus-app", + "__meta_kubernetes_endpointslice_address_target_kind": "Pod", + "__meta_kubernetes_pod_node_name": "otel-target-allocator-talk-control-plane", + "__meta_kubernetes_pod_labelpresent_pod_template_hash": "true", + "__meta_kubernetes_endpointslice_label_kubernetes_io_service_name": "py-prometheus-app", + "__meta_kubernetes_endpointslice_annotationpresent_endpoints_kubernetes_io_last_change_trigger_time": "true", + "__meta_kubernetes_service_name": "py-prometheus-app", + "__meta_kubernetes_pod_ready": "true", + "__meta_kubernetes_pod_labelpresent_app": "true", + "__meta_kubernetes_pod_controller_kind": "ReplicaSet", + "__meta_kubernetes_endpointslice_labelpresent_app": "true", + "__meta_kubernetes_pod_container_image": "otel-target-allocator-talk:0.1.0-py-prometheus-app", + "__address__": "10.244.0.11:8080", + "__meta_kubernetes_service_label_app_kubernetes_io_name": "py-prometheus-app", + "__meta_kubernetes_pod_uid": "495d47ee-9a0e-49df-9b41-fe9e6f70090b", + "__meta_kubernetes_endpointslice_port": "8080", + "__meta_kubernetes_endpointslice_label_endpointslice_kubernetes_io_managed_by": "endpointslice-controller.k8s.io", + "__meta_kubernetes_endpointslice_label_app": "my-app", + "__meta_kubernetes_service_labelpresent_app_kubernetes_io_name": "true", + "__meta_kubernetes_pod_host_ip": "172.24.0.2", + "__meta_kubernetes_namespace": "opentelemetry", + "__meta_kubernetes_endpointslice_endpoint_conditions_serving": "true", + "__meta_kubernetes_endpointslice_labelpresent_kubernetes_io_service_name": "true", + "__meta_kubernetes_endpointslice_endpoint_conditions_ready": "true", + "__meta_kubernetes_service_annotation_kubectl_kubernetes_io_last_applied_configuration": "{\"apiVersion\":\"v1\",\"kind\":\"Service\",\"metadata\":{\"annotations\":{},\"labels\":{\"app\":\"my-app\",\"app.kubernetes.io/name\":\"py-prometheus-app\"},\"name\":\"py-prometheus-app\",\"namespace\":\"opentelemetry\"},\"spec\":{\"ports\":[{\"name\":\"prom\",\"port\":8080}],\"selector\":{\"app\":\"my-app\",\"app.kubernetes.io/name\":\"py-prometheus-app\"}}}\n", + "__meta_kubernetes_endpointslice_endpoint_conditions_terminating": "false", + "__meta_kubernetes_pod_container_port_protocol": "TCP", + "__meta_kubernetes_pod_phase": "Running", + "__meta_kubernetes_pod_container_name": "my-app", + "__meta_kubernetes_pod_container_port_name": "prom", + "__meta_kubernetes_pod_ip": "10.244.0.11", + "__meta_kubernetes_service_annotationpresent_kubectl_kubernetes_io_last_applied_configuration": "true", + "__meta_kubernetes_service_labelpresent_app": "true", + "__meta_kubernetes_endpointslice_address_type": "IPv4", + "__meta_kubernetes_service_label_app": "my-app", + "__meta_kubernetes_pod_label_app": "my-app", + "__meta_kubernetes_pod_container_port_number": "8080", + "__meta_kubernetes_endpointslice_name": "py-prometheus-app-bwbvn", + "__meta_kubernetes_pod_label_pod_template_hash": "575cfdd46", + "__meta_kubernetes_endpointslice_endpoint_node_name": "otel-target-allocator-talk-control-plane", + "__meta_kubernetes_endpointslice_labelpresent_endpointslice_kubernetes_io_managed_by": "true", + "__meta_kubernetes_endpointslice_label_app_kubernetes_io_name": "py-prometheus-app" + } + } + ] + } +} +``` + +The query parameter `collector_id` in the `_link` field of the above output +states that these are the targets pertain to `otelcol-collector-0` (the name of +the `StatefulSet` created for the `OpenTelemetryCollector` resource). + +{{% alert title="Note" %}} + +See the +[Target Allocator readme](https://github.com/open-telemetry/opentelemetry-operator/blob/main/cmd/otel-allocator/README.md?plain=1#L128-L134) +for more information on the `/jobs` endpoint. + +{{% /alert %}} + +### Is the Target Allocator enabled? Is Prometheus service discovery enabled? + +If the `curl` commands above don’t show a list of expected `ServiceMonitor`s and +`PodMonitor`s, you need to check whether the features that populate those values +are turned on. + +One thing to remember is that just because you include the `targetAllocator` +section in the `OpenTelemetryCollector` CR doesn’t mean that it’s enabled. You +need to explicitly enable it. Furthermore, if you want to use +[Prometheus service discovery](https://github.com/open-telemetry/opentelemetry-operator/blob/main/cmd/otel-allocator/README.md#discovery-of-prometheus-custom-resources), +you must explicitly enable it: + +- Set `spec.targetAllocator.enabled` to `true` +- Set `spec.targetAllocator.prometheusCR.enabled` to `true` + +So that your `OpenTelemetryCollector` resource looks like this: + +```yaml +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: otelcol + namespace: opentelemetry +spec: + mode: statefulset + targetAllocator: + enabled: true + serviceAccount: opentelemetry-targetallocator-sa + prometheusCR: + enabled: true +``` + +See the full `OpenTelemetryCollector` +[resource definition in "Do you know if metrics are actually being scraped?"](#do-you-know-if-metrics-are-actually-beingscraped). + +### Did you configure a ServiceMonitor (or PodMonitor) selector? + +If you configured a +[`ServiceMonitor`](https://observability.thomasriley.co.uk/prometheus/configuring-prometheus/using-service-monitors/#:~:text=The%20ServiceMonitor%20is%20used%20to,build%20the%20required%20Prometheus%20configuration.) +selector, it means that the Target Allocator only looks for `ServiceMonitors` +having a `metadata.label` that matches the value in +[`serviceMonitorSelector`](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollectorspectargetallocatorprometheuscr-1). + +Suppose that you configured a +[`serviceMonitorSelector`](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollectorspectargetallocatorprometheuscr-1) +for your Target Allocator, like in the following example: + +```yaml +apiVersion: opentelemetry.io/v1beta1 +kind: OpenTelemetryCollector +metadata: + name: otelcol + namespace: opentelemetry +spec: + mode: statefulset + targetAllocator: + enabled: true + serviceAccount: opentelemetry-targetallocator-sa + prometheusCR: + enabled: true + serviceMonitorSelector: + matchLabels: + app: my-app +``` + +By setting the value of +`spec.targetAllocator.prometheusCR.serviceMonitorSelector.matchLabels` to +`app: my-app`, it means that your `ServiceMonitor` resource must in turn have +that same value in `metadata.labels`: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: sm-example + labels: + app: my-app + release: prometheus +spec: +``` + +See the full `ServiceMonitor` +[resource definition in "Do you know if metrics are actually being scraped?"](#do-you-know-if-metrics-are-actually-beingscraped). + +In this case, the `OpenTelemetryCollector` resource's +`prometheusCR.serviceMonitorSelector.matchLabels` is looking only for +`ServiceMonitors` having the label `app: my-app`, which we see in the previous +example. + +If your `ServiceMonitor` resource is missing that label, then the Target +Allocator will fail to discover scrape targets from that `ServiceMonitor`. + +{{% alert title="Tip" %}} + +The same applies if you’re using a +[PodMonitor](https://prometheus-operator.dev/docs/user-guides/getting-started/#using-podmonitors). +In that case, you would use a +[`podMonitorSelector`](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollectorspectargetallocatorprometheuscr) +instead of a `serviceMonitorSelector`. + +{{% /alert %}} + +### Did you leave out the serviceMonitorSelector and/or podMonitorSelector configuration altogether? + +As mentioned in +["Did you configure a ServiceMonitor or PodMonitor selector"](#did-you-configure-a-servicemonitor-or-podmonitor-selector), +setting mismatched values for `serviceMonitorSelector` and `podMonitorSelector` +results in the Target Allocator failing to discover scrape targets from your +`ServiceMonitors` and `PodMonitors`, respectively. + +Similarly, in +[`v1beta1`](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollector-1) +of the `OpenTelemetryCollector` CR, leaving out this configuration altogether +also results in the Target Allocator failing to discover scrape targets from +your `ServiceMonitors` and `PodMonitors`. + +As of `v1beta1` of the `OpenTelemetryOperator`, a `serviceMonitorSelector` and +`podMonitorSelector` must be included, even if you don’t intend to use it, like +this: + +```yaml +prometheusCR: + enabled: true + podMonitorSelector: {} + serviceMonitorSelector: {} +``` + +This configuration means that it will match on all `PodMonitor` and +`ServiceMonitor` resources. See the +[full OpenTelemetryCollector definition in "Do you know if metrics are actually being scraped?"](#do-you-know-if-metrics-are-actually-beingscraped). + +### Do your labels, namespaces, and ports match for your ServiceMonitor and your Service (or PodMonitor and your Pod)? + +The `ServiceMonitor` is configured to pick up Kubernetes +[Services](https://kubernetes.io/docs/concepts/services-networking/service/) +that match on: + +- Labels +- Namespaces (optional) +- Ports (endpoints) + +Suppose that you have this `ServiceMonitor`: + +```yaml +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: sm-example + labels: + app: my-app + release: prometheus +spec: + selector: + matchLabels: + app: my-app + namespaceSelector: + matchNames: + - opentelemetry + endpoints: + - port: prom + path: /metrics + - port: py-client-port + interval: 15s + - port: py-server-port +``` + +The previous `ServiceMonitor` is looking for any services that have: + +- the label `app: my-app` +- reside in a namespace called `opentelemetry` +- a port named `prom`, `py-client-port`, _or_ `py-server-port` + +For example, the following `Service` resource would get picked up by the +`ServiceMonitor`, because it matches the previous criteria: + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: py-prometheus-app + namespace: opentelemetry + labels: + app: my-app + app.kubernetes.io/name: py-prometheus-app +spec: + selector: + app: my-app + app.kubernetes.io/name: py-prometheus-app + ports: + - name: prom + port: 8080 +``` + +The following `Service` resource would not be picked up, because the +`ServiceMonitor` is looking for ports named `prom`, `py-client-port`, _or_ +`py-server-port`, and this service’s port is called `bleh`. + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: py-prometheus-app + namespace: opentelemetry + labels: + app: my-app + app.kubernetes.io/name: py-prometheus-app +spec: + selector: + app: my-app + app.kubernetes.io/name: py-prometheus-app + ports: + - name: bleh + port: 8080 +``` + +{{% alert title="Tip" %}} + +If you’re using `PodMonitor`, the same applies, except that it picks up +Kubernetes pods that match on labels, namespaces, and named ports. + +{{% /alert %}} diff --git a/content/en/docs/languages/java/configuration.md b/content/en/docs/languages/java/configuration.md index 1452390d2573..2e068ca73d65 100644 --- a/content/en/docs/languages/java/configuration.md +++ b/content/en/docs/languages/java/configuration.md @@ -180,8 +180,8 @@ exporters. | System property | Description | Default | | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------- | | `otel.{signal}.exporter` | Select the OpenTelemetry exporter for {signal}. | otlp | -| `otel.exporter.otlp.endpoint` | The OTLP traces, metrics, and logs endpoint to connect to. Must be a URL with a scheme of either `http` or `https` based on the use of TLS. If protocol is `http/protobuf` the version and signal will be appended to the path (e.g. `v1/traces`, `v1/metrics`, or `v1/logs`). | `http://localhost:4317` when protocol is `grpc`, and `http://localhost:4318/v1/{signal}` when protocol is `http/protobuf`. | -| `otel.exporter.otlp.{signal}.endpoint` | The OTLP {signal} endpoint to connect to. Must be a URL with a scheme of either `http` or `https` based on the use of TLS. | `http://localhost:4317` when protocol is `grpc`, and `http://localhost:4318/v1/{signal}` when protocol is `http/protobuf`. | +| `otel.exporter.otlp.endpoint` | The endpoint to send all OTLP traces, metrics, and logs to. Often the address of an OpenTelemetry Collector. Must be a URL with a scheme of either `http` or `https` based on the use of TLS. If protocol is `http/protobuf` the version and signal will be appended to the path (e.g. `v1/traces`, `v1/metrics`, or `v1/logs`). | `http://localhost:4317` when protocol is `grpc`, and `http://localhost:4318/v1/{signal}` when protocol is `http/protobuf`. | +| `otel.exporter.otlp.{signal}.endpoint` | The endpoint to send OTLP {signal} to. Often the address of an OpenTelemetry Collector. Must be a URL with a scheme of either `http` or `https` based on the use of TLS. | `http://localhost:4317` when protocol is `grpc`, and `http://localhost:4318/v1/{signal}` when protocol is `http/protobuf`. | | `otel.exporter.otlp.certificate` | The path to the file containing trusted certificates to use when verifying an OTLP trace, metric, or log server's TLS credentials. The file should contain one or more X.509 certificates in PEM format. | The host platform's trusted root certificates are used. | | `otel.exporter.otlp.{signal}.certificate` | The path to the file containing trusted certificates to use when verifying an OTLP {signal} server's TLS credentials. The file should contain one or more X.509 certificates in PEM format. | The host platform's trusted root certificates are used | | `otel.exporter.otlp.client.key` | The path to the file containing private client key to use when verifying an OTLP trace, metric, or log client's TLS credentials. The file should contain one private key PKCS8 PEM format. | No client key file is used. | diff --git a/content/en/docs/languages/js/serverless.md b/content/en/docs/languages/js/serverless.md index 629d26fe292d..c418b95e00c3 100644 --- a/content/en/docs/languages/js/serverless.md +++ b/content/en/docs/languages/js/serverless.md @@ -25,7 +25,7 @@ If you are interested in a plug and play user experience, see ### Dependencies -First, create an empty package.json: +First, create an empty `package.json`: ```sh npm init -y diff --git a/content/en/docs/languages/php/instrumentation.md b/content/en/docs/languages/php/instrumentation.md index f4e70fbfd8b5..a983898532c8 100644 --- a/content/en/docs/languages/php/instrumentation.md +++ b/content/en/docs/languages/php/instrumentation.md @@ -690,7 +690,7 @@ See [Exporters](/docs/languages/php/exporters) OpenTelemetry can be used to measure and record different types of metrics from an application, which can then be [pushed](/docs/specs/otel/metrics/sdk/#push-metric-exporter) to a metrics -service such as the OpenTelemetry collector: +service such as the OpenTelemetry Collector: - counter - async counter diff --git a/content/en/docs/languages/python/_index.md b/content/en/docs/languages/python/_index.md index 08ed02503454..072d7c3cfcad 100644 --- a/content/en/docs/languages/python/_index.md +++ b/content/en/docs/languages/python/_index.md @@ -61,8 +61,8 @@ pip install -e ./opentelemetry-sdk ## Repositories and benchmarks -- Main repo: [opentelemetry-python][] -- Contrib repo: [opentelemetry-python-contrib][] +- Main repository: [opentelemetry-python][] +- Contrib repository: [opentelemetry-python-contrib][] [opentelemetry-python]: https://github.com/open-telemetry/opentelemetry-python [opentelemetry-python-contrib]: diff --git a/content/en/docs/languages/python/getting-started.md b/content/en/docs/languages/python/getting-started.md index 53ac6c716ad4..388261189ea3 100644 --- a/content/en/docs/languages/python/getting-started.md +++ b/content/en/docs/languages/python/getting-started.md @@ -83,9 +83,9 @@ flask run -p 8080 ## Instrumentation -Automatic instrumentation will generate telemetry data on your behalf. There are +Zero-code instrumentation will generate telemetry data on your behalf. There are several options you can take, covered in more detail in -[Automatic Instrumentation](../automatic/). Here we'll use the +[Zero-code Instrumentation](/docs/zero-code/python/). Here we'll use the `opentelemetry-instrument` agent. Install the `opentelemetry-distro` package, which contains the OpenTelemetry @@ -814,8 +814,8 @@ Value: 1 ## Next steps There are several options available for automatic instrumentation and Python. -See [Automatic Instrumentation](../automatic/) to learn about them and how to -configure them. +See [Zero-code Instrumentation](/docs/zero-code/python/) to learn about them and +how to configure them. There's a lot more to manual instrumentation than just creating a child span. To learn details about initializing manual instrumentation and many more parts of diff --git a/content/en/docs/languages/python/libraries.md b/content/en/docs/languages/python/libraries.md index faeade39fc33..dce7cfa23d95 100644 --- a/content/en/docs/languages/python/libraries.md +++ b/content/en/docs/languages/python/libraries.md @@ -104,7 +104,7 @@ You might also want to configure an appropriate exporter to telemetry backends. You can also check the -[automatic instrumentation for Python](/docs/languages/python/automatic). +[Zero-code instrumentation for Python](/docs/zero-code/python/). [opentelemetry-python-contrib]: https://github.com/open-telemetry/opentelemetry-python-contrib/tree/main/instrumentation#readme diff --git a/content/en/docs/languages/ruby/exporters.md b/content/en/docs/languages/ruby/exporters.md index f5dd3779ec6e..42099925237d 100644 --- a/content/en/docs/languages/ruby/exporters.md +++ b/content/en/docs/languages/ruby/exporters.md @@ -115,7 +115,7 @@ end ``` If you now run your application, set the environment variable -`OTEL_TRACES_EXPORTER` to zipkin: +`OTEL_TRACES_EXPORTER` to Zipkin: ```sh env OTEL_TRACES_EXPORTER=zipkin rails server diff --git a/content/en/docs/languages/ruby/getting-started.md b/content/en/docs/languages/ruby/getting-started.md index 16430e6a8f6f..1839617fe3a1 100644 --- a/content/en/docs/languages/ruby/getting-started.md +++ b/content/en/docs/languages/ruby/getting-started.md @@ -34,7 +34,7 @@ For more elaborate examples, see [examples](/docs/languages/ruby/examples/). ### Dependencies -To begin, install rails: +To begin, install Rails: ```sh gem install rails diff --git a/content/en/docs/zero-code/java/spring-boot-starter/getting-started.md b/content/en/docs/zero-code/java/spring-boot-starter/getting-started.md index 8d2da55ea72d..18520fb770f4 100644 --- a/content/en/docs/zero-code/java/spring-boot-starter/getting-started.md +++ b/content/en/docs/zero-code/java/spring-boot-starter/getting-started.md @@ -29,7 +29,14 @@ Importing the `opentelemetry-bom` and `opentelemetry-instrumentation-bom-alpha` BOMs when using the OpenTelemetry starter is important to ensure version alignment across all OpenTelemetry dependencies. -The following example shows how to import both BOMs using Maven: +{{% alert title="Note" color="info" %}} + +If you import the `spring-boot-dependencies` BOM, you have to declare it after +the OpenTelemetry BOMs. + +{{% /alert %}} + +The following example shows how to import the OpenTelemetry BOMs using Maven: ```xml diff --git a/content/en/docs/zero-code/php.md b/content/en/docs/zero-code/php.md index 2becffe5d396..2bcebe17f677 100644 --- a/content/en/docs/zero-code/php.md +++ b/content/en/docs/zero-code/php.md @@ -70,10 +70,13 @@ $demo = new DemoClass(); $demo->run(); ``` -Here, we provide `pre` and `post` functions, which are executed before and after -`DemoClass::run`. The `pre` function starts and activates a span, and the `post` -function ends it. If an exception was thrown by `DemoClass::run()`, the `post` -function will record it, without affecting exception propagation. +In the example above we define `DemoClass`, then register `pre` and `post` hook +functions on its `run` method. The hook functions will run before and after each +execution of the `DemoClass::run()` method. The `pre` function starts and +activates a span, and the `post` function ends it. + +If an exception was thrown by `DemoClass::run()`, the `post` function will +record it, without affecting exception propagation. ## Installation @@ -213,13 +216,13 @@ OpenTelemetry\API\Globals::registerInitializer(function (Configurator $configura $tracer = Globals::tracerProvider()->getTracer('example'); //or, via CachedInstrumentation which uses `Globals` internally $instrumentation = new CachedInstrumentation('example'); -$tracerProvider = $instrumentation->tracer(); +$tracer = $instrumentation->tracer(); ``` ## Supported libraries and frameworks -Automatic Instrumentation comes with a number of instrumentation libraries for -commonly used PHP libraries. For the full list, see +Automatic Instrumentation is available for a number of instrumentation libraries +for commonly used PHP libraries. For the full list, see [instrumentation libraries on packagist](https://packagist.org/search/?query=open-telemetry&tags=instrumentation). ## Next steps diff --git a/content/en/docs/languages/python/automatic/_index.md b/content/en/docs/zero-code/python/_index.md similarity index 96% rename from content/en/docs/languages/python/automatic/_index.md rename to content/en/docs/zero-code/python/_index.md index 3e24342ab725..50d2d9a14cfb 100644 --- a/content/en/docs/languages/python/automatic/_index.md +++ b/content/en/docs/zero-code/python/_index.md @@ -1,7 +1,8 @@ --- -title: Automatic Instrumentation -linkTitle: Automatic +title: Python zero-code instrumentation +linkTitle: Python weight: 30 +aliases: [/docs/languages/python/automatic] # prettier-ignore cSpell:ignore: devel distro mkdir myapp pyproject uninstrumented virtualenv Werkzeug --- diff --git a/content/en/docs/languages/python/automatic/configuration.md b/content/en/docs/zero-code/python/configuration.md similarity index 97% rename from content/en/docs/languages/python/automatic/configuration.md rename to content/en/docs/zero-code/python/configuration.md index 11df56fbc064..f0c33f567498 100644 --- a/content/en/docs/languages/python/automatic/configuration.md +++ b/content/en/docs/zero-code/python/configuration.md @@ -2,7 +2,9 @@ title: Agent Configuration linkTitle: Configuration weight: 10 -aliases: [agent-config] +aliases: + - /docs/languages/python/automatic/configuration + - /docs/languages/python/automatic/agent-config # prettier-ignore cSpell:ignore: distro healthcheck mkdir myapp Starlette uninstrumented urllib virtualenv --- @@ -119,7 +121,7 @@ outputted. warning) - `OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED`: to enable auto-instrumentation of logs. Attaches OTLP handler to Python root logger. See - example [here](/docs/languages/python/automatic/logs-example) + example [here](/docs/zero-code/python/logs-example) Examples: diff --git a/content/en/docs/languages/python/automatic/example.md b/content/en/docs/zero-code/python/example.md similarity index 99% rename from content/en/docs/languages/python/automatic/example.md rename to content/en/docs/zero-code/python/example.md index d1c087a3f342..f791b02f6551 100644 --- a/content/en/docs/languages/python/automatic/example.md +++ b/content/en/docs/zero-code/python/example.md @@ -2,6 +2,7 @@ title: Auto-Instrumentation Example linkTitle: Example weight: 20 +aliases: [/docs/languages/python/automatic/example] # prettier-ignore cSpell:ignore: distro instrumentor mkdir MSIE Referer Starlette uninstrumented venv werkzeug --- diff --git a/content/en/docs/languages/python/automatic/logs-example.md b/content/en/docs/zero-code/python/logs-example.md similarity index 99% rename from content/en/docs/languages/python/automatic/logs-example.md rename to content/en/docs/zero-code/python/logs-example.md index 7df014946a4e..3bd6076e1f0a 100644 --- a/content/en/docs/languages/python/automatic/logs-example.md +++ b/content/en/docs/zero-code/python/logs-example.md @@ -2,6 +2,7 @@ title: Logs Auto-Instrumentation Example linkTitle: Logs Example weight: 20 +aliases: [/docs/languages/python/automatic/logs-example] # prettier-ignore cSpell:ignore: distro instrumentor mkdir MSIE Referer Starlette uninstrumented virtualenv --- diff --git a/content/en/docs/languages/python/automatic/operator.md b/content/en/docs/zero-code/python/operator.md similarity index 90% rename from content/en/docs/languages/python/automatic/operator.md rename to content/en/docs/zero-code/python/operator.md index 7b17202b59c9..a08fd5e0219d 100644 --- a/content/en/docs/languages/python/automatic/operator.md +++ b/content/en/docs/zero-code/python/operator.md @@ -1,6 +1,7 @@ --- title: Using the OpenTelemetry Operator to Inject Auto-Instrumentation linkTitle: Operator +aliases: [/docs/languages/python/automatic/operator] weight: 30 cSpell:ignore: distro mkdir uninstrumented virtualenv --- diff --git a/content/en/ecosystem/integrations.md b/content/en/ecosystem/integrations.md index cc9ff3174b41..fe309ee3ad38 100644 --- a/content/en/ecosystem/integrations.md +++ b/content/en/ecosystem/integrations.md @@ -13,6 +13,10 @@ The following list contains a sample of libraries, services, and apps that have either integrated OpenTelemetry APIs and SDKs directly for native telemetry or provide a first-party plugin that fits into their own extensibility ecosystem. +You will find open source (OSS) projects at the beginning of the list; +commercial projects follow. Projects which are part of the +[CNCF](https://www.cncf.io/) show a small CNCF logo beside their name. + {{% ecosystem/integrations-table %}} ## How to add your integration {#how-to-add} diff --git a/content/ja/docs/concepts/_index.md b/content/ja/docs/concepts/_index.md new file mode 100644 index 000000000000..a624699333d7 --- /dev/null +++ b/content/ja/docs/concepts/_index.md @@ -0,0 +1,11 @@ +--- +title: OpenTelemetryの概念 +linkTitle: 概念 +description: OpenTelemetryの重要概念 +aliases: [concepts/overview] +weight: 170 +default_lang_commit: ebd92bb +--- + +このセクションでは、OpenTelemetryプロジェクトのデータソースと主要な要素について説明します。 +これらのドキュメントを読めば、OpenTelemetryが動作原理について理解できるでしょう。 diff --git a/content/ja/docs/concepts/components.md b/content/ja/docs/concepts/components.md new file mode 100644 index 000000000000..469982f946ba --- /dev/null +++ b/content/ja/docs/concepts/components.md @@ -0,0 +1,109 @@ +--- +title: コンポーネント +description: OpenTelemetryを構成する主なコンポーネント +aliases: [data-collection] +weight: 20 +default_lang_commit: 313e391 +--- + +OpenTelemetryは現在、いくつかの主要コンポーネントで構成されています。 + +- [仕様](#specification) +- [コレクター](#collector) +- [言語固有のAPIとSDKの実装](#language-specific-api--sdk-implementations) + - [計装ライブラリ](#instrumentation-libraries) + - [エクスポーター](#exporters) + - [ゼロコード計装](#zero-code-instrumentation) + - [リソース検出器](#resource-detectors) + - [サービス間プロパゲーター](#cross-service-propagators) + - [サンプラー](#samplers) +- [Kubernetesオペレーター](#kubernetes-operator) +- [Function as a Serviceアセット](#function-as-a-service-assets) + +OpenTelemetryは、テレメトリーデータの生成とエクスポートのためのベンダー固有のSDKとツールを置き換えられます。 + +## 仕様 {#specification} + +仕様はすべての実装に対する言語横断的な要件と想定を記述しています。 +用語の定義だけでなく、この仕様では以下のことが定義されています。 + +- **API:** トレース、メトリクス、およびロギングデータを生成および相関させるためのデータ型と操作を定義します。 +- **SDK:** 言語固有のAPI実装の要件を定義します。設定、データ処理、エクスポートの概念もここで定義されます。 +- **データ:** OpenTelemetryプロトコル(OTLP)と、テレメトリーバックエンドがサポートできるベンダー非依存のセマンティック規約を定義します。 + +詳細は、[仕様](/docs/specs/)のページを参照してください。 + +## コレクター {#collector} + +OpenTelemetryコレクターは、テレメトリーデータを受信、処理、エクスポートできる、ベンダー非依存のプロキシーです。 +複数のフォーマット(たとえば、OTLP、Jaeger、Prometheus、および多くの商用/独自ツール)でテレメトリーデータを受信し、1つ以上のバックエンドにデータを送信します。 +また、テレメトリーデータをエクスポートする前の処理やフィルタリングもサポートします。 + +詳細は、[コレクター](/docs/collector/)のページを参照してください。 + +## 言語固有のAPIとSDKの実装 {#language-specific-api--sdk-implementations} + +OpenTelemetryには言語SDKもあります。このSDKによってOpenTelemetryAPIを使って、選択した言語でテレメトリーデータを生成し、そのデータを好みのバックエンドにエクスポートできます。 +これらのSDKはまた、あなたのアプリケーションでの手動計装に接続するために使える、一般的なライブラリとフレームワーク用の計装ライブラリも組み込めます。 + +詳細は、[計装](/docs/concepts/instrumentation/)のページを参照してください。 + +### 計装ライブラリ {#instrumentation-libraries} + +OpenTelemetry は、サポートされている言語の一般的なライブラリやフレームワークから関連するテレメトリーデータを生成する、幅広い数のコンポーネントをサポートしています。 +たとえば、HTTPライブラリからのインバウンドとアウトバウンドのHTTPリクエストは、それらのリクエストに関するデータを生成します。 + +OpenTelemetryの意欲的なゴールは、すべての一般的なライブラリがデフォルトでオブザーバビリティがあるようにビルドされることです。 + +詳細は、[計装ライブラリ](/docs/concepts/instrumentation/libraries/)のページを参照してください。 + +### エクスポーター {#exporters} + +{{% docs/languages/exporters/intro %}} + +### ゼロコード計装 {#zero-code-instrumentation} + +利用できる場合、OpenTelemetryの言語固有の実装は、ソースコードに触れることなくアプリケーションを計装する方法を提供します。 +基礎となる仕組みは言語に依存しますが、ゼロコード計装は、アプリケーションにOpenTelemetry API と SDK の機能を追加します。 +さらに、計装ライブラリのセットとエクスポーターの依存関係を追加するかもしれません。 + +詳細は、[ゼロコード計装](/docs/concepts/instrumentation/zero-code/)のページを参照してください。 + +### リソース検出器 {#resource-detectors} + +[リソース](/docs/concepts/resources/)はテレメトリーを生成するエンティティをリソース属性として表します。 +たとえば、Kubernetes上のコンテナで実行されているテレメトリーを生成するプロセスには、Pod名、名前空間、そして場合によってはデプロイメント名があります。 +これらの属性をすべてリソースに含めることができます。 + +OpenTelemetry の言語固有の実装は、`OTEL_RESOURCE_ATTRIBUTES` 環境変数からのリソース検出と、プロセスのランタイム、サービス、ホスト、オペレーティングシステムのような多くの一般的なエンティティを提供します。 + +詳細は、[リソース](/docs/concepts/resources/)のページを参照してください。 + +### サービス間プロパゲーター {#cross-service-propagators} + +伝搬は、サービスやプロセス間でデータを移動させる仕組みです。 +トレースに限ったことではありませんが、伝搬により、プロセスやネットワークの境界を越えて任意に分散したサービス間で、トレースはシステムに関する因果情報を構築できます。 + +ほとんどのユースケースでは、コンテキスト伝搬は計装ライブラリを通じて行われます。 +必要であれば、スパンのコンテキストや[バゲッジ](/docs/concepts/signals/baggage/)のような横断的な関心事をシリアライズおよびデシリアライズするために、プロパゲータを使用できます。 + +### サンプラー {#samplers} + +サンプリングは、システムによって生成されるトレースの量を制限するプロセスです。 +OpenTelemetryの各言語固有の実装は、いくつかの[ヘッドサンプラー](/docs/concepts/sampling/#head-sampling)を提供しています。 + +詳細は、[サンプリング](/docs/concepts/sampling)のページを参照してください。 + +## Kubernetesオペレーター {#kubernetes-operator} + +OpenTelemetryオペレーターはKubernetesオペレーターの実装です。 +オペレーターはOpenTelemetryコレクターを管理し、OpenTelemetryを使用してワークロードの自動計装を行います。 + +詳細は、[K8sオペレーター](/docs/kubernetes/operator/)のページを参照してください。 + +## Function as a Serviceアセット {#function-as-a-service-assets} + +OpenTelemetryは、さまざまなクラウドベンダーが提供する Function-as-a-Service を監視するさまざまな方法をサポートしています。 +OpenTelemetryコミュニティは、現在、アプリケーションを自動計装できるビルド済みのLambdaレイヤーと、アプリケーションを手動または自動で計装する際に使用できるスタンドアロンのコレクターLambdaレイヤーのオプションを提供しています。 + +詳細は、[Functions as a Service](/docs/faas/)のページを参照してください。 diff --git a/content/ja/docs/concepts/context-propagation.md b/content/ja/docs/concepts/context-propagation.md new file mode 100644 index 000000000000..520a96e7526a --- /dev/null +++ b/content/ja/docs/concepts/context-propagation.md @@ -0,0 +1,33 @@ +--- +title: コンテキスト伝搬 +weight: 10 +description: 分散トレーシングを可能にする概念について学ぶ +default_lang_commit: 313e391 +--- + +コンテキスト伝搬により、[シグナル](/docs/concepts/signals)は、それらが生成された場所に関係なく、互いを相関させられます。 +トレースに限ったことではありませんが、コンテキスト伝搬によって、[トレース](/docs/concepts/signals/traces)は、プロセスやネットワークの境界を越えて任意に分散しているサービス間で、システムに関する因果情報を構築できます。 + +コンテキストの伝播を理解するには、コンテキストと伝搬(プロパゲーション)という、2つの別々の概念を理解する必要があります。 + +## コンテキスト + +コンテキストは、送受信サービスまたは[実行ユニット](/docs/specs/otel/glossary/#execution-unit)が、あるシグナルと別のシグナルを関連付けるための情報を含むオブジェクトです。 + +たとえば、サービスAがサービスBを呼び出した場合、IDがコンテキスト内にあるサービスAのスパンは、サービスBで次に作成されるスパンの親スパンとして使用されます。 +コンテキスト内にあるトレースIDは、サービスBで次に作成されるスパンにも使用されるため、そのスパンはサービスAのスパンと同じトレースの一部であることを意味します。 + +## 伝搬(プロパゲーション) + +伝搬は、サービスとプロセス間でコンテキストを移動させる仕組みです。 +コンテキストオブジェクトをシリアライズまたはデシリアライズし、あるサービスから別のサービスに伝搬される関連情報を提供します。 + +伝播は通常、計装ライブラリによって処理され、ユーザーには透過的です。 +手動でコンテキストを伝播する必要がある場合は、伝搬APIを使用できます。 + +OpenTelemetryはいくつかの公式プロパゲーターを保守しています。 +デフォルトのプロパゲーターは[W3C TraceContext](https://www.w3.org/TR/trace-context/)仕様で指定されたヘッダーを使用しています。 + +## 仕様 + +コンテキスト伝搬の詳細については、[コンテキストの仕様](/docs/specs/otel/context/)を参照してください。 diff --git a/content/ja/docs/concepts/observability-primer.md b/content/ja/docs/concepts/observability-primer.md new file mode 100644 index 000000000000..5e25387c9f74 --- /dev/null +++ b/content/ja/docs/concepts/observability-primer.md @@ -0,0 +1,118 @@ +--- +title: Observability入門 +description: 重要なオブザーバビリティに関する概念 +weight: 9 +cSpell:ignore: webshop +default_lang_commit: ebd92bb +--- + +## オブザーバビリティとは何か {#what-is-observability} + +オブザーバビリティは、システムの内部構造を知らなくても、そのシステムについて質問することで、システムを外側から理解することを可能にします。 +さらに、真新しい問題、つまり「未知の未知」のトラブルシューティングや対処が容易になります。 +また、「なぜこのようなことが起こるのか」という疑問に答えるのにも役立ちます。 + +システムに関してこれらの質問をするためには、アプリケーションが適切に計装されていなければなりません。 +つまり、アプリケーションのコードは、[トレース](/docs/concepts/signals/traces/)、[メトリクス](/docs/concepts/signals/metrics/)、[ログ](/docs/concepts/signals/logs/)などの[シグナル](/docs/concepts/signals/)を発しなければなりません。 +開発者が問題をトラブルシュートするために計装を追加する必要がないとき、アプリケーションは適切に計装されていると言えます。 +なぜなら開発者が必要な情報をすべて持っているということになるからです。 + +[OpenTelemetry](/docs/what-is-opentelemetry/)は、システムをオブザーバビリティがある状態にするために、アプリケーションコードの計装を手助けする仕組みです。 + +## 信頼性とメトリクス + +**テレメトリー** とは、システムやその動作から送出されるデータのことです。 +データは[トレース](/docs/concepts/signals/traces/)、[メトリクス](/docs/concepts/signals/metrics/)、[ログ](/docs/concepts/signals/logs/)などの形式で得られます。 + +**信頼性** は「サービスがユーザーの期待通りに動いているでしょうか」といった疑問に答えてくれます。 +システムは常に100%稼働していても、ユーザーがショッピングカートに黒い靴を追加するために「カートに追加」をクリックしたときに、システムが常に黒い靴を追加するとは限らない場合、システムは **信頼性がない** と言えるでしょう。 + +**メトリクス** とは、インフラやアプリケーションに関する数値データを一定期間にわたって集計したものです。 +たとえば、システムエラー率、CPU使用率、あるサービスのリクエスト率などです。 +メトリクスとOpenTelemetryとの関係については、[メトリクス](/docs/concepts/signals/metrics/) のページを参照してください。 + +**SLI**(サービスレベル指標)は、サービスの動作の計測値を表します。 +優れたSLIは、ユーザーの視点からサービスを計測します。 +SLIの例として、ウェブページの読み込み速度が挙げられます。 + +**SLO**(サービスレベル目標)は、信頼性を組織や他のチームに伝達する手段を表します。 +これは、1つ以上のSLIをビジネス価値に付加することで達成されます。 + +## 分散トレースを理解する + +分散トレースにより、複雑な分散システムを通してリクエストが伝搬する様子を観察できます。 +分散トレースはアプリケーションやシステムの健全性の可視性を向上させ、ローカルで再現するのが困難な挙動をデバッグできます。 +これは、一般的に非決定論的な問題があったり、ローカルで再現するには複雑すぎる分散システムには不可欠です。 + +分散トレースを理解するには、ログ、スパン、トレースといった各要素の役割を理解する必要があります。 + +### ログ + +**ログ**は、サービスや他のコンポーネントが発するタイムスタンプ付きのメッセージです。 +[トレース](#distributed-traces)とは異なり、ログは必ずしも特定のユーザーリクエストやトランザクションに関連付けられているわけではありません。 +ログは、ソフトウェアのあらゆる場所で見られます。 +ログは、開発者と運用者の両方がシステムの挙動を理解するのに役立つため、これまで大いに利用されてきました。 + +次にあるのはログの例です。 + +```text +I, [2021-02-23T13:26:23.505892 #22473] INFO -- : [6459ffe1-ea53-4044-aaa3-bf902868f730] Started GET "/" for ::1 at 2021-02-23 13:26:23 -0800 +``` + +ログはコードの実行を追跡するには十分ではありません。 +ログには通常、どこから呼び出されたかといったコンテキスト情報が欠けているからです。 + +ログは、[スパン](#span)の一部として含まれるとき、あるいはトレースやスパンと相関があるときに、はるかに有用になります。 + +ログの詳細とOpenTelemetryとの関係については、[ログ](/docs/concepts/signals/logs/)のページを参照してください。 + +### スパン {#span} + +**スパン** は作業または操作の単位を表します。 +スパンは、リクエストが行う特定の操作を追跡し、その操作が実行された時間に何が起こったかを説明してくれます。 + +スパンには、名前、時間関連データ、[構造化ログメッセージ](/docs/concepts/signals/traces/#span-events)、[その他のメタデータ(つまり属性)](/docs/concepts/signals/traces/#attributes)が含まれ、追跡する操作に関する情報を提供します。 + +#### スパン属性 + +スパン属性はスパンに紐づけられたメタデータです。 + +次の表はスパン属性の例を列挙しています。 + +| キー | 値 | +| :-------------------------- | :--------------------------------------------------------------------------------- | +| `http.request.method` | `"GET"` | +| `network.protocol.version` | `"1.1"` | +| `url.path` | `"/webshop/articles/4"` | +| `url.query` | `"?s=1"` | +| `server.address` | `"example.com"` | +| `server.port` | `8080` | +| `url.scheme` | `"https"` | +| `http.route` | `"/webshop/articles/:article_id"` | +| `http.response.status_code` | `200` | +| `client.address` | `"192.0.2.4"` | +| `client.socket.address` | `"192.0.2.5"` (クライアントはプロキシ経由) | +| `user_agent.original` | `"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0"` | + +スパンと OpenTelemetry との関係については、[スパン](/docs/concepts/signals/traces/#spans)の節を参照してください。 + +### 分散トレース {#distributed-traces} + +一般的に**トレース**として知られている**分散トレース**は、マイクロサービスやサーバーレスアプリケーションのようなマルチサービスアーキテクチャを伝播するリクエスト(アプリケーションまたはエンドユーザーによって行われる)が辿った経路を記録します。 + +トレースは1つ以上のスパンで構成されるます。 +最初のスパンはルートスパンを表します。 +各ルートスパンは、リクエストの開始から終了までを表します。 +親の下にあるスパンは、リクエスト中に発生すること(またはリクエストを構成するステップ)について、より詳細なコンテキストを提供します。 + +トレースなしでは、分散システムのパフォーマンス問題の根本的な原因を見つけることは困難です。 +トレースは、分散システムを流れるリクエストの中で何が起こっているのかを分解することで、分散システムのデバッグと理解をしやすくします。 + +多くのオブザーバビリティバックエンドは、トレースをこのようなウォーターフォール図として視覚化しています。 + +![トレースの例](/img/waterfall-trace.svg 'トレースのウォーターフォール図') + +ウォーターフォール図は、ルートスパンとその子スパンの親子関係を示しています。 +スパンが別のスパンを含む場合も、入れ子関係を表します。 + +トレースとOpenTelemetryとの関係については、[トレース](/docs/concepts/signals/traces/)のページを参照してください。 diff --git a/content/ja/docs/what-is-opentelemetry.md b/content/ja/docs/what-is-opentelemetry.md index e6a7fb23693c..141a8a215f97 100644 --- a/content/ja/docs/what-is-opentelemetry.md +++ b/content/ja/docs/what-is-opentelemetry.md @@ -19,7 +19,7 @@ OpenTelemetryの主な目的は、あなたのアプリケーションやシス [オブザーバビリティ](/docs/concepts/observability-primer/#what-is-observability)とは、システムの出力を調べることによって、システムの内部状態を理解する能力のことです。 ソフトウェアの文脈では、これは、トレース、メトリクス、ログを含むテレメトリーデータを調べることによって、システムの内部状態を理解できることを意味します。 -システムをオブザーバビリティがある状態にするには、[軽装されて](/docs/concepts/instrumentation)いなければなりません。 +システムをオブザーバビリティがある状態にするには、[計装されて](/docs/concepts/instrumentation)いなければなりません。 つまり、コードが[トレース](/docs/concepts/signals/traces/)、[メトリクス](/docs/concepts/signals/metrics/)、または[ログ](/docs/concepts/signals/logs/)を出力しなければなりません。 計装されたデータは、オブザーバビリティバックエンドに送信されなければなりません。 diff --git a/data/ecosystem/adopters.yaml b/data/ecosystem/adopters.yaml index 34aa5befd199..b99334732b04 100644 --- a/data/ecosystem/adopters.yaml +++ b/data/ecosystem/adopters.yaml @@ -86,7 +86,8 @@ - name: Sicredi url: https://www.sicredi.com.br/ components: [Collector, Go, Java, Python] - reference: '' + reference: https://medium.com/sicreditech/sicredis-path-for-opentelemetry-adoption-3564fc8a743a + referenceTitle: blog post contact: https://github.com/igorestevanjasinski - name: Skyscanner url: https://www.skyscanner.net/ diff --git a/data/ecosystem/distributions.yaml b/data/ecosystem/distributions.yaml index c4b21324a51d..5e8c3152d1a8 100644 --- a/data/ecosystem/distributions.yaml +++ b/data/ecosystem/distributions.yaml @@ -83,3 +83,15 @@ url: https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/monitor/azure-monitor-opentelemetry docsUrl: https://learn.microsoft.com/azure/azure-monitor/app/opentelemetry-enable?tabs=python components: [Python] +- name: Elastic Distribution for OpenTelemetry Java + url: https://github.com/elastic/elastic-otel-java + docsUrl: https://github.com/elastic/elastic-otel-java + components: [Java] +- name: Elastic Distribution for OpenTelemetry .NET + url: https://github.com/elastic/elastic-otel-dotnet + docsUrl: https://github.com/elastic/elastic-otel-dotnet + components: [.NET] +- name: Elastic Distribution for OpenTelemetry Node.js + url: https://github.com/elastic/elastic-otel-node + docsUrl: https://github.com/elastic/elastic-otel-node + components: [Node] diff --git a/data/ecosystem/integrations.yaml b/data/ecosystem/integrations.yaml index 224ae2b5e00a..f3ad515e276d 100644 --- a/data/ecosystem/integrations.yaml +++ b/data/ecosystem/integrations.yaml @@ -4,214 +4,256 @@ docsUrl: https://github.com/containerd/containerd/blob/main/docs/tracing.md components: [Go] oss: true + cncf: graduated - name: CRI-O url: https://cri-o.io/ docsUrl: https://github.com/cri-o/cri-o/blob/main/docs/crio.conf.5.md#criotracing-table components: [Go] oss: true + cncf: graduated - name: Docker Buildx and BuildKit url: https://www.docker.com/ docsUrl: https://docs.docker.com/build/building/opentelemetry/ components: [Go] oss: true + cncf: false - name: Elasticsearch Java API Client url: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html docsUrl: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/opentelemetry.html components: [Java] native: true # Elasticsearch Java API Client provides a native integration of the OpenTelemetry API oss: true + cncf: false - name: Kubernetes url: https://kubernetes.io/ docsUrl: https://kubernetes.io/docs/concepts/cluster-administration/system-traces/ components: [Go] oss: true + cncf: graduated - name: Micrometer url: https://micrometer.io/ docsUrl: https://micrometer.io/docs/tracing#_micrometer_tracing_opentelemetry_setup components: [Java] oss: true + cncf: false - name: Quarkus url: https://quarkus.io/ docsUrl: https://quarkus.io/guides/opentelemetry components: [Java] oss: true + cncf: false - name: RoadRunner url: https://roadrunner.dev/ docsUrl: https://roadrunner.dev/docs/lab-otel/current/en components: [Go, PHP] oss: true + cncf: false - name: Kong API Gateway url: https://www.konghq.com/ docsUrl: https://docs.konghq.com/hub/kong-inc/opentelemetry/ components: [Lua] oss: true + cncf: false - name: NGINX Web Server url: https://nginx.org/ docsUrl: https://github.com/nginxinc/nginx-otel components: [C++] oss: true + cncf: false - name: Cisco NSO url: https://www.cisco.com/c/en/us/products/cloud-systems-management/network-services-orchestrator/index.html docsUrl: https://developer.cisco.com/docs/nso/#!observability-exporter/ components: [Python] oss: false + cncf: false - name: Next.js url: https://nextjs.org/ docsUrl: https://nextjs.org/docs/app/building-your-application/optimizing/open-telemetry components: [JavaScript] native: true # Next.js provides a native integration of the OpenTelemetry API oss: true + cncf: false - name: ThousandEyes (Cisco) url: https://www.thousandeyes.com/ docsUrl: 'https://docs.thousandeyes.com/product-documentation/api/opentelemetry' components: [Collector] oss: false + cncf: false - name: Cerbos JS SDK url: https://cerbos.dev/ docsUrl: https://github.com/cerbos/cerbos-sdk-javascript/tree/main/packages/opentelemetry components: [JavaScript] native: false # Cerbos provides a first party instrumentation library oss: true + cncf: false - name: Tyk API Gateway url: https://tyk.io docsUrl: https://tyk.io/docs/product-stack/tyk-gateway/advanced-configurations/distributed-tracing/open-telemetry/open-telemetry-overview/ components: [Go] oss: true + cncf: false - name: OpenFeature flagd url: https://openfeature.dev/ docsUrl: https://flagd.dev/reference/monitoring/#opentelemetry components: [Go] oss: true + cncf: incubating - name: Jenkins url: https://www.jenkins.io/ docsUrl: https://plugins.jenkins.io/opentelemetry/ components: [Java] oss: true + cncf: false - name: Flipt url: https://flipt.io/ docsUrl: https://www.flipt.io/docs/configuration/observability#tracing components: [Go] oss: true + cncf: false - name: Harbor url: https://goharbor.io/ docsUrl: https://goharbor.io/docs/edge/administration/distributed-tracing/ components: [Go] oss: true + cncf: graduated - name: KEDA url: https://keda.sh/ docsUrl: https://keda.sh/docs/2.12/operate/opentelemetry/ components: [Go] oss: true + cncf: graduated - name: Open Policy Agent url: https://www.openpolicyagent.org/ docsUrl: https://www.openpolicyagent.org/docs/latest/monitoring/#opentelemetry components: [Go] oss: true + cncf: graduated - name: cortex url: https://cortexmetrics.io/ docsUrl: https://cortexmetrics.io/docs/guides/tracing/#opentelemetry components: [Go] oss: true + cncf: incubating - name: Thanos url: https://thanos.io/ docsUrl: https://thanos.io/tip/thanos/tracing.md/#opentelemetry-otlp components: [Go] oss: true + cncf: incubating - name: Kyverno url: https://kyverno.io/ docsUrl: https://kyverno.io/docs/monitoring/opentelemetry/ components: [Go] oss: true + cncf: incubating - name: Knative url: https://knative.dev/ docsUrl: https://knative.dev/docs/eventing/observability/metrics/collecting-metrics/#about-opentelemetry components: [Go] oss: true + cncf: incubating - name: Dapr url: https://dapr.io/ docsUrl: https://docs.dapr.io/operations/observability/tracing/otel-collector/open-telemetry-collector/ components: [Go] oss: true + cncf: incubating - name: MySQL Enterprise Server url: https://www.mysql.com/ docsUrl: https://dev.mysql.com/doc/refman/8.1/en/telemetry-trace.html components: [C++] oss: false + cncf: false - name: rustup url: https://rustup.rs/ docsUrl: https://rust-lang.github.io/rustup/dev-guide/tracing.html components: [Rust] oss: true + cncf: false - name: Matlab url: https://www.mathworks.com/products/matlab.html docsUrl: https://www.mathworks.com/matlabcentral/fileexchange/130979-opentelemetry-matlab components: [C++] oss: false + cncf: false - name: Traefik Hub API Management url: https://traefik.io/traefik-hub/ docsUrl: https://doc.traefik.io/traefik-hub/operations/metrics components: [Go] oss: false + cncf: false - name: Strimzi url: https://strimzi.io/ docsUrl: https://strimzi.io/docs/operators/latest/deploying#assembly-distributed-tracing-str components: [Java] oss: true + cncf: incubating - name: CloudWeGo url: https://www.cloudwego.io/ docsUrl: https://www.cloudwego.io/docs/hertz/tutorials/observability/open-telemetry/ components: [Go] oss: true + cncf: false - name: GORM url: https://gorm.io/ docsUrl: https://github.com/go-gorm/opentelemetry components: [Go] oss: true + cncf: false - name: Cloud Foundry url: https://www.cloudfoundry.org/ docsUrl: https://github.com/cloudfoundry/cf-deployment/blob/main/operations/experimental/add-otel-collector.yml components: [Collector] oss: true + cncf: false - name: Otterize network mapper url: https://github.com/otterize/network-mapper docsUrl: https://docs.otterize.com/reference/configuration/network-mapper/helm-chart#opentelemetry-exporter-parameters components: [Go] oss: true + cncf: false - name: KafkaFlow url: https://github.com/Farfetch/kafkaflow docsUrl: https://farfetch.github.io/kafkaflow/docs/guides/open-telemetry components: [.NET] oss: true + cncf: false - name: Apache Dubbo # Provide the latest docs instead of blog url in 2~3 months later. refer to https://github.com/open-telemetry/opentelemetry.io/pull/3908#discussion_r1473133919. url: https://github.com/apache/dubbo docsUrl: https://cn.dubbo.apache.org/en/blog/2024/01/31/tracing-dubbo-with-opentelemetry/ components: [Java] oss: true + cncf: false - name: Microcks url: https://microcks.io/ docsUrl: https://microcks.io/documentation/using/monitoring/ components: [Java] oss: true + cncf: sandbox - name: ClickHouse url: https://www.clickhouse.com/ docsUrl: https://clickhouse.com/docs/en/operations/opentelemetry components: [C++] oss: true + cncf: false - name: FluentCI Engine url: https://github.com/fluentci-io/fluentci-engine docsUrl: https://github.com/fluentci-io/fluentci-engine#-opentelemetry-tracing components: [Rust] oss: true + cncf: false - name: KrakenD API Gateway url: https://www.krakend.io docsUrl: https://www.krakend.io/docs/telemetry/opentelemetry/ components: [Go] oss: true + cncf: false - name: Azure SDKs url: https://github.com/Azure/azure-sdk-for-net docsUrl: https://learn.microsoft.com/en-us/azure/azure-monitor/app/opentelemetry-enable components: [.NET] oss: true + cncf: false - name: MassTransit .NET client url: https://github.com/MassTransit/MassTransit docsUrl: https://masstransit.io/documentation/configuration/observability @@ -223,23 +265,34 @@ docsUrl: https://kuma.io/docs/2.7.x/guides/otel-metrics/ components: [Go] oss: true + cncf: sandbox - name: Kong Mesh url: https://konghq.com/products/kong-mesh docsUrl: https://docs.konghq.com/mesh/latest/guides/otel-metrics/ components: [Go] oss: false + cncf: false - name: Envoy url: https://www.envoyproxy.io/ docsUrl: https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/opentelemetry components: [C++] oss: true + cncf: graduated - name: Istio url: https://istio.io/ docsUrl: https://istio.io/latest/docs/tasks/observability/distributed-tracing/opentelemetry/ components: [Go] oss: true + cncf: graduated - name: Kubewarden url: https://kubewarden.io/ docsUrl: https://docs.kubewarden.io/howtos/telemetry/opentelemetry-qs components: [Rust, Go] oss: true + cncf: sandbox +- name: gRPC + url: https://grpc.io/ + docsUrl: https://grpc.io/docs/guides/opentelemetry-metrics/ + components: [C++, Java, Go, Python] + oss: true + cncf: incubating diff --git a/data/registry/exporter-dotnet-geneva.yml b/data/registry/exporter-dotnet-geneva.yml index 965616a2e946..d6fc51aacfcf 100644 --- a/data/registry/exporter-dotnet-geneva.yml +++ b/data/registry/exporter-dotnet-geneva.yml @@ -17,4 +17,4 @@ createdAt: 2022-11-07 package: registry: nuget name: OpenTelemetry.Exporter.Geneva - version: 1.9.0-rc.2 + version: 1.9.0 diff --git a/data/registry/exporter-dotnet-prometheus-aspnetcore.yml b/data/registry/exporter-dotnet-prometheus-aspnetcore.yml index 13c36c6f3269..2b1f98c96890 100644 --- a/data/registry/exporter-dotnet-prometheus-aspnetcore.yml +++ b/data/registry/exporter-dotnet-prometheus-aspnetcore.yml @@ -21,4 +21,4 @@ createdAt: 2022-11-07 package: registry: nuget name: OpenTelemetry.Exporter.Prometheus.AspNetCore - version: 1.9.0-beta.1 + version: 1.9.0-beta.2 diff --git a/data/registry/exporter-dotnet-prometheus-httplistener.yml b/data/registry/exporter-dotnet-prometheus-httplistener.yml index 2531b063c173..b53f88e6e3d4 100644 --- a/data/registry/exporter-dotnet-prometheus-httplistener.yml +++ b/data/registry/exporter-dotnet-prometheus-httplistener.yml @@ -18,4 +18,4 @@ createdAt: 2022-11-07 package: registry: nuget name: OpenTelemetry.Exporter.Prometheus.HttpListener - version: 1.9.0-beta.1 + version: 1.9.0-beta.2 diff --git a/data/registry/exporter-js-instana.yml b/data/registry/exporter-js-instana.yml index 02131f53f727..6b8711307af4 100644 --- a/data/registry/exporter-js-instana.yml +++ b/data/registry/exporter-js-instana.yml @@ -15,4 +15,4 @@ createdAt: 2022-04-18 package: registry: npm name: '@instana/opentelemetry-exporter' - version: 3.11.0 + version: 3.14.1 diff --git a/data/registry/exporter-js-jaeger.yml b/data/registry/exporter-js-jaeger.yml index b6be8fe367f9..70e839eac0d0 100644 --- a/data/registry/exporter-js-jaeger.yml +++ b/data/registry/exporter-js-jaeger.yml @@ -14,4 +14,4 @@ createdAt: 2020-02-06 package: registry: npm name: '@opentelemetry/exporter-jaeger' - version: 1.25.0 + version: 1.25.1 diff --git a/data/registry/exporter-js-prometheus.yml b/data/registry/exporter-js-prometheus.yml index 342b5e39490f..a886b2e20509 100644 --- a/data/registry/exporter-js-prometheus.yml +++ b/data/registry/exporter-js-prometheus.yml @@ -14,4 +14,4 @@ createdAt: 2020-02-06 package: registry: npm name: '@opentelemetry/exporter-prometheus' - version: 0.52.0 + version: 0.52.1 diff --git a/data/registry/exporter-js-zipkin.yml b/data/registry/exporter-js-zipkin.yml index 7e5080ed8321..62ba4b872fc9 100644 --- a/data/registry/exporter-js-zipkin.yml +++ b/data/registry/exporter-js-zipkin.yml @@ -11,7 +11,7 @@ authors: package: name: '@opentelemetry/exporter-zipkin' registry: npm - version: 1.25.0 + version: 1.25.1 urls: repo: https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin docs: /docs/languages/js/exporters/#zipkin diff --git a/data/registry/instrumentation-js-fetch.yml b/data/registry/instrumentation-js-fetch.yml index c69af40c0f6d..37ab7cd5e00a 100644 --- a/data/registry/instrumentation-js-fetch.yml +++ b/data/registry/instrumentation-js-fetch.yml @@ -14,4 +14,4 @@ createdAt: 2020-11-09 package: registry: npm name: '@opentelemetry/instrumentation-fetch' - version: 0.52.0 + version: 0.52.1 diff --git a/data/registry/instrumentation-js-grpc.yml b/data/registry/instrumentation-js-grpc.yml index 58c2f88235bb..376785ac50ad 100644 --- a/data/registry/instrumentation-js-grpc.yml +++ b/data/registry/instrumentation-js-grpc.yml @@ -14,4 +14,4 @@ createdAt: 2020-11-09 package: registry: npm name: '@opentelemetry/instrumentation-grpc' - version: 0.52.0 + version: 0.52.1 diff --git a/data/registry/instrumentation-js-http.yml b/data/registry/instrumentation-js-http.yml index 898bf5ee9d02..d744c467139a 100644 --- a/data/registry/instrumentation-js-http.yml +++ b/data/registry/instrumentation-js-http.yml @@ -14,4 +14,4 @@ createdAt: 2020-11-09 package: registry: npm name: '@opentelemetry/instrumentation-http' - version: 0.52.0 + version: 0.52.1 diff --git a/data/registry/instrumentation-js-langchain.yml b/data/registry/instrumentation-js-langchain.yml index f22d240c8989..ff2cf12f93d4 100644 --- a/data/registry/instrumentation-js-langchain.yml +++ b/data/registry/instrumentation-js-langchain.yml @@ -18,4 +18,4 @@ createdAt: 2024-06-05 package: registry: npm name: '@arizeai/openinference-instrumentation-langchain' - version: 0.0.6 + version: 0.0.8 diff --git a/data/registry/instrumentation-js-openai.yml b/data/registry/instrumentation-js-openai.yml index b5aa6175a1d7..f82022b97cb8 100644 --- a/data/registry/instrumentation-js-openai.yml +++ b/data/registry/instrumentation-js-openai.yml @@ -18,4 +18,4 @@ createdAt: 2024-06-05 package: registry: npm name: '@arizeai/openinference-instrumentation-openai' - version: 0.3.1 + version: 0.3.3 diff --git a/data/registry/instrumentation-js-prisma.yml b/data/registry/instrumentation-js-prisma.yml index 8225bebdc630..e22d5f01bff1 100644 --- a/data/registry/instrumentation-js-prisma.yml +++ b/data/registry/instrumentation-js-prisma.yml @@ -17,4 +17,4 @@ createdAt: 2022-08-25 package: registry: npm name: '@prisma/instrumentation' - version: 5.15.1 + version: 5.16.1 diff --git a/data/registry/instrumentation-js-xml-http-request.yml b/data/registry/instrumentation-js-xml-http-request.yml index b54edb78457c..830803d40f93 100644 --- a/data/registry/instrumentation-js-xml-http-request.yml +++ b/data/registry/instrumentation-js-xml-http-request.yml @@ -14,4 +14,4 @@ createdAt: 2020-11-09 package: registry: npm name: '@opentelemetry/instrumentation-xml-http-request' - version: 0.52.0 + version: 0.52.1 diff --git a/data/registry/instrumentation-ruby-active-support.yml b/data/registry/instrumentation-ruby-active-support.yml index a9a3490a88c4..f33c7a0db5c4 100644 --- a/data/registry/instrumentation-ruby-active-support.yml +++ b/data/registry/instrumentation-ruby-active-support.yml @@ -15,4 +15,4 @@ createdAt: 2020-11-09 package: registry: gems name: opentelemetry-instrumentation-active_support - version: 0.5.1 + version: 0.5.3 diff --git a/data/registry/instrumentation-ruby-faraday.yml b/data/registry/instrumentation-ruby-faraday.yml index 104333205afa..c1446b72da40 100644 --- a/data/registry/instrumentation-ruby-faraday.yml +++ b/data/registry/instrumentation-ruby-faraday.yml @@ -15,4 +15,4 @@ createdAt: 2020-11-09 package: registry: gems name: opentelemetry-instrumentation-faraday - version: 0.24.4 + version: 0.24.5 diff --git a/data/registry/tools-ruby-rspec-matcher.yml b/data/registry/tools-ruby-rspec-matcher.yml index 5b3f49cc26f3..79b33c894563 100644 --- a/data/registry/tools-ruby-rspec-matcher.yml +++ b/data/registry/tools-ruby-rspec-matcher.yml @@ -18,4 +18,4 @@ createdAt: 2024-02-13 package: registry: gems name: rspec-otel - version: 0.0.2 + version: 0.0.3 diff --git a/data/registry/tools-ruby-sentry.yml b/data/registry/tools-ruby-sentry.yml index 2e96b7f3e983..3c8be5960b71 100644 --- a/data/registry/tools-ruby-sentry.yml +++ b/data/registry/tools-ruby-sentry.yml @@ -23,4 +23,4 @@ createdAt: 2023-01-31 package: registry: gems name: sentry-opentelemetry - version: 5.17.3 + version: 5.18.0 diff --git a/layouts/shortcodes/ecosystem/integrations-table.md b/layouts/shortcodes/ecosystem/integrations-table.md index d1d7e053e0b1..8da425d350e8 100644 --- a/layouts/shortcodes/ecosystem/integrations-table.md +++ b/layouts/shortcodes/ecosystem/integrations-table.md @@ -3,7 +3,8 @@ Name[^1] | OSS | Components | Learn more ------------ | --- | ---------- | ---------- {{- range $data }} -[{{ .name }}]({{ .url }}) | {{- cond .oss "Yes" "No" }} | {{ delimit (sort .components) ", " }} | [{{ replace .docsUrl "https://" "" }}]({{ .docsUrl }}) +{{ $cncfTag := cond (not (eq .cncf false)) (printf "\"CNCF" (humanize .cncf) (humanize .cncf)) "" -}} +[{{ .name }}]({{ .url }}){{ $cncfTag }} | {{- cond .oss "Yes" "No" }} | {{ delimit (sort .components) ", " }} | [{{ replace .docsUrl "https://" "" }}]({{ .docsUrl }}) {{- end }} [^1]: Listed alphabetically diff --git a/package.json b/package.json index e07bc6d524f1..af4ab40adbc6 100644 --- a/package.json +++ b/package.json @@ -115,7 +115,7 @@ "textlint": "^14.0.4", "textlint-filter-rule-allowlist": "^4.0.0", "textlint-filter-rule-comments": "^1.2.2", - "textlint-rule-terminology": "^5.0.10", + "textlint-rule-terminology": "^5.0.15", "through2": "^4.0.2", "yargs": "^17.7.2" }, diff --git a/static/img/cncf-icon-color.svg b/static/img/cncf-icon-color.svg new file mode 100644 index 000000000000..bebd3b0bbd2c --- /dev/null +++ b/static/img/cncf-icon-color.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/refcache.json b/static/refcache.json index 49330b5568dd..873f53192e86 100644 --- a/static/refcache.json +++ b/static/refcache.json @@ -2647,6 +2647,18 @@ "StatusCode": 200, "LastSeen": "2024-01-18T20:05:36.185289-05:00" }, + "https://github.com/elastic/elastic-otel-dotnet": { + "StatusCode": 200, + "LastSeen": "2024-06-26T13:02:09.356344196Z" + }, + "https://github.com/elastic/elastic-otel-java": { + "StatusCode": 200, + "LastSeen": "2024-06-26T13:02:12.110420884Z" + }, + "https://github.com/elastic/elastic-otel-node": { + "StatusCode": 200, + "LastSeen": "2024-06-26T13:02:15.527574357Z" + }, "https://github.com/ent/ent/issues/1232#issuecomment-1200405070": { "StatusCode": 200, "LastSeen": "2024-02-24T14:33:06.756997-08:00" @@ -5011,6 +5023,10 @@ "StatusCode": 206, "LastSeen": "2024-01-18T08:53:34.433352-05:00" }, + "https://grpc.io/docs/guides/opentelemetry-metrics/": { + "StatusCode": 206, + "LastSeen": "2024-06-27T11:58:04.028327+02:00" + }, "https://guava.dev/releases/10.0/api/docs/com/google/common/util/concurrent/ListenableFuture.html": { "StatusCode": 206, "LastSeen": "2024-01-18T19:02:20.15592-05:00" @@ -5727,6 +5743,10 @@ "StatusCode": 200, "LastSeen": "2024-01-18T19:02:09.258083-05:00" }, + "https://medium.com/sicreditech/sicredis-path-for-opentelemetry-adoption-3564fc8a743a": { + "StatusCode": 200, + "LastSeen": "2024-06-25T12:05:30.755315709Z" + }, "https://medium.com/velotio-perspectives/a-comprehensive-tutorial-to-implementing-opentracing-with-jaeger-a01752e1a8ce": { "StatusCode": 200, "LastSeen": "2024-01-18T08:06:14.054263-05:00" @@ -6115,6 +6135,10 @@ "StatusCode": 200, "LastSeen": "2024-02-09T11:48:44.205582+01:00" }, + "https://observability.thomasriley.co.uk/prometheus/configuring-prometheus/using-service-monitors/#:~:text=The%20ServiceMonitor%20is%20used%20to,build%20the%20required%20Prometheus%20configuration.": { + "StatusCode": 206, + "LastSeen": "2024-06-18T13:27:45.202877-04:00" + }, "https://observiq.com/blog/what-are-connectors-in-opentelemetry/": { "StatusCode": 206, "LastSeen": "2024-01-30T06:06:02.410999-05:00" @@ -7703,6 +7727,14 @@ "StatusCode": 206, "LastSeen": "2024-01-30T06:01:24.93578-05:00" }, + "https://prometheus-operator.dev/docs/operator/design/#servicemonitor": { + "StatusCode": 206, + "LastSeen": "2024-06-18T16:43:08.829675-04:00" + }, + "https://prometheus-operator.dev/docs/user-guides/getting-started/#using-podmonitors": { + "StatusCode": 206, + "LastSeen": "2024-06-18T13:27:46.505689-04:00" + }, "https://prometheus.io": { "StatusCode": 206, "LastSeen": "2024-01-18T19:07:18.12399-05:00"