diff --git a/.github/component-label-map.yml b/.github/component-label-map.yml index a91191aea426..7d94bea6f026 100644 --- a/.github/component-label-map.yml +++ b/.github/component-label-map.yml @@ -2,6 +2,14 @@ blog: - changed-files: - any-glob-to-any-file: - content/en/blog/** +registry: + - changed-files: + - any-glob-to-any-file: + - data/registry/** +lang:zh: + - changed-files: + - any-glob-to-any-file: + - content/zh/** sig:cpp: - changed-files: - any-glob-to-any-file: diff --git a/.htmltest.yml b/.htmltest.yml index f2e0ae2e3e70..09c40257b946 100644 --- a/.htmltest.yml +++ b/.htmltest.yml @@ -3,17 +3,18 @@ DirectoryPath: public IgnoreDirectoryMissingTrailingSlash: true IgnoreAltMissing: true IgnoreCanonicalBrokenLinks: false +IgnoreInternalEmptyHash: true # TODO: remove after resolution of https://github.com/google/docsy/issues/1995 CheckMailto: false TestFilesConcurrently: true IgnoreDirs: - ^blog/(\d+/)?page/\d+ IgnoreInternalURLs: # list of paths IgnoreURLs: # list of regexs of paths or URLs to be ignored - - ^/docs/languages/\w+/(api|examples|registry)/$ - - ^/docs/collector/registry/$ - - ^/docs/languages/net/(metrics-api|traces-api)/ + - ^(/zh)?/docs/languages/\w+/(api|examples|registry)/$ + - ^(/zh)?/docs/collector/registry/$ + - ^(/zh)?/docs/languages/net/(metrics-api|traces-api)/ + - ^((/zh)?/docs/migration/)?opencensus/$ - ^/community/end-user/feedback-survey/$ - - ^(/docs/migration/)?opencensus/$ - ^https://deploy-preview-\d+--opentelemetry.netlify.app/ - ^https://www\.googletagmanager\.com diff --git a/content/en/_index.md b/content/en/_index.md index 05e045a23de4..12a2ece429a2 100644 --- a/content/en/_index.md +++ b/content/en/_index.md @@ -4,6 +4,9 @@ description: >- High-quality, ubiquitous, and portable telemetry to enable effective observability show_banner: true +outputs: + - HTML + - REDIRECTS # Include this `content/en` ONLY developer_note: The blocks/cover shortcode (used below) will use as a background image any image file containing "background" in its name. diff --git a/content/en/blog/2024/otel-operator-q-and-a/index.md b/content/en/blog/2024/otel-operator-q-and-a/index.md new file mode 100644 index 000000000000..209b21a4d6fc --- /dev/null +++ b/content/en/blog/2024/otel-operator-q-and-a/index.md @@ -0,0 +1,353 @@ +--- +title: + Things You Might Not Have Known About the OpenTelemetry Operator - An OTel + Operator Q&A +linkTitle: OTel Operator Q&A +date: 2024-05-13 +author: >- + [Adriana Villela](https://github.com/avillela) (ServiceNow), + +canonical_url: https://adri-v.medium.com/81d63addbf92? +cSpell:ignore: automagically mycollector +--- + +![Seattle's Mount Rainier rising about the clouds, as seen from an airplane. Photo by Adriana Villela](mount-rainier.jpg) + +The +[OpenTelemetry (OTel) Operator](https://github.com/open-telemetry/opentelemetry-operator) +is a +[Kubernetes Operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) +that manages OTel for you in your Kubernetes cluster to make life a little +easier. It does the following: + +- Manages deployment of the + [OpenTelemetry Collector](http://localhost:1313/docs/collector/), supported by + the + [`OpenTelemetryCollector`](https://github.com/open-telemetry/opentelemetry-operator?tab=readme-ov-file#getting-started) + [custom resource (CR)](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). +- Manages the configuration of a fleet of OpenTelemetry Collectors via + [OpAMP](/docs/specs/opamp/) integration, supported by the + [`OpAMPBridge`](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opampbridge) + custom resource. +- Provides + [integration with the Prometheus Operator's `PodMonitor` and `ServiceMonitor` CRs](https://github.com/open-telemetry/opentelemetry-operator/tree/main/cmd/otel-allocator). +- Injects and configures + [auto-instrumentation](https://www.honeycomb.io/blog/what-is-auto-instrumentation) + into your pods, supported by the + [`Instrumentation`](https://github.com/open-telemetry/opentelemetry-operator?tab=readme-ov-file#opentelemetry-auto-instrumentation-injection) + custom resource. + +I've had a chance to use the Operator in the last year, and learned some pretty +cool things, so I thought it might be helpful to share some little OTel Operator +goodies that I’ve picked up along the way, in the form of a Q&A. + +Please note that this post assumes that you have some familiarity with +OpenTelemetry, the +[OpenTelemetry Collector](http://localhost:1313/docs/collector/), the +[OpenTelemetry Operator](https://github.com/open-telemetry/opentelemetry-operator) +(including the +[Target Allocator](https://adri-v.medium.com/prometheus-opentelemetry-better-together-41dc637f2292)), +and [Kubernetes](https://kubernetes.io). + +## Q&A + +### Q1: Does the Operator support multiple Collector configuration sources? + +Short answer: No. + +Longer answer: OTel Collector can be fed more than one Collector config YAML +file. That way, you can keep your base configurations in, say, +`otelcol-config.yaml`, and overrides or additions to the base configuration can +go in, for example, `otelcol-config-extras.yaml`. See an example of this in the +[OTel Demo’s Docker compose file](https://github.com/open-telemetry/opentelemetry-demo/blob/06f020c97f78ae9625d3a4a5d1107c55045c567f/docker-compose.yml#L665-L668). + +Unfortunately, while the OTel Collector supports multiple Collector +configuration files, the Collector managed by the OTel Operator does not. + +To get around this, you could merge the multiple Collector configs through some +external tool beforehand. For example, if you +[were deploying the Operator via Helm](https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-operator), +you could technically +[pass it multiple Collector config files using multiple --values flags](https://stackoverflow.com/a/56653384) +and let [Helm](https://helm.sh) do the merging for you. + +> **NOTE:** There are plans to offer higher-level constructs for specifying +> configurations in the future, as per +> [this PR](https://github.com/open-telemetry/opentelemetry-operator/issues/1906). + +For reference, +[check out this thread in the #otel-operator CNCF Slack channel](https://cloud-native.slack.com/archives/C033BJ8BASU/p1709321896612279). + +### Q2: How can I securely reference access tokens in the Collector's configuration? + +In order to send OpenTelemetry data to an observability backend, you must define +at least one [exporter](/docs/collector/configuration/#exporters). Whether you +use [OTLP](/docs/specs/otel/protocol/) or +[some proprietary vendor format](/docs/specs/otel/protocol/), most exporters +typically require that you specify an endpoint and an access token when sending +data to a vendor backend. + +When using the OpenTelemetry Operator to manage the OTel Collector, the OTel +Collector config YAML is defined in the +[OpenTelemetryCollector](https://github.com/open-telemetry/opentelemetry-operator?tab=readme-ov-file#getting-started) +CR. This file should be version-controlled and therefore shouldn’t contain any +sensitive data, including access tokens stored as plain text. + +Fortunately, the `OpenTelemetryCollector` CR gives us a way to reference that +value as a secret. Here’s how you do it: + +1- Create a Kubernetes secret for your access token. Remember to +[base-64 encode](https://www.base64encode.org/) the secret. + +2- +[Expose the secret as an environment variable](https://kubernetes.io/docs/concepts/configuration/secret/#using-a-secret) +by adding it to the `OpenTelemetryCollector` CR’s +[`env` section](https://github.com/avillela/otel-target-allocator-talk/blob/21e9643e28165e39bd79f3beec7f2b1f989d87e9/src/resources/02-otel-collector-ls.yml#L16-L21). +For example: + +```yaml +env: + - name: TOKEN_VALUE + valueFrom: + secretKeyRef: + key: TOKEN_VALUE + name: otel-collector-secret +``` + +3- Reference the environment variable in your +[exporter definition](https://github.com/avillela/otel-target-allocator-talk/blob/21e9643e28165e39bd79f3beec7f2b1f989d87e9/src/resources/02-otel-collector-ls.yml#L43-L47): + +```yaml +exporters: + otlp: + endpoint: '' + headers: + '': '${TOKEN_VALUE}' +``` + +For more info, see the +[full example](https://github.com/avillela/otel-target-allocator-talk/blob/main/src/resources/02-otel-collector-ls.yml), +along with the +[instructions](https://github.com/avillela/otel-target-allocator-talk/tree/main?tab=readme-ov-file#3b--kubernetes-deployment-servicenow-cloud-observability-backend). + +### Q3: Is the Operator version at parity with the Collector version? + +For every Collector release, there is an Operator release which provides support +for that Collector version. For example, at the time of this writing, the latest +Operator version is 0.98.0. Thus, the the default image of the Collector used by +the Operator is version 0.98.0 of the +[core distribution](/blog/2024/otel-collector-anti-patterns/#3--not-using-the-right-collector-distribution-or-not-building-your-own-distribution) +(as opposed to the contrib distribution). + +### Q4: Can I override the base OTel Collector image? + +Yes! In fact, +[you probably should](https://cloud-native.slack.com/archives/C033BJ8BASU/p1713894678225579)! + +As we saw earlier, the +[core distribution](https://github.cm/open-telemetry/open-telemetry-collector) +is the default Collector distribution used by the `OpenTelemetryCollector` CR. +The Core distribution is a bare-bones distribution of the Collector for OTel +developers to develop and test. It contains a base set of components–i.e. +[extensions](/docs/collector/configuration/#service-extensions), +[connectors](/docs/collector/configuration/#connectors), +[receivers](/docs/collector/configuration/#receivers), +[processors](/docs/collector/configuration/#processors), and +[exporters](/docs/collector/configuration/#exporters). + +If you want access to more components than the ones offered by core, you can use +the Collector's +[Kubernetes Distribution](https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-k8s) +instead. This distribution is made specifically to be used in a Kubernetes +cluster to monitor Kubernetes and services running in Kubernetes. It contains a +subset of components from +[OpenTelemetry Collector Core](https://github.com/open-telemetry/opentelemetry-collector) +and +[OpenTelemetry Collector Contrib](https://github.com/open-telemetry/opentelemetry-collector-contrib). + +If you want to use your own specific Collector components, you can build your +own distribution using the +[OpenTelemetry Collector Builder](/docs/collector/custom-collector/) (OCB), and +include only the components that you need. + +Either way, the OpenTelemetryCollector CR allows you to override the default +Collector image with one that better suits your needs by `adding spec.image` to +your `OpenTelemetryCollector` YAML. In addition, you can also specify the number +of Collector replicas by adding `spec.replicas`. This is totally independent of +whether or not you override the Collector image. + +Your code would look something like this: + +```yaml +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: otelcol + namespace: mynamespace +spec: + mode: statefulset + image: + replicas: +``` + +Where: + +- `` is the name of a valid Collector image from a container + repository +- `` is the number of pod instances for the underlying + OpenTelemetry Collector + +Keep in mind that if you're pulling a Collector image from a private container +registry, you'll need to use +[`imagePullSecrets`](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/). +Since private container registries require authentication, this will enable you +to authenticate against that private registry. For more info on how to use +`imagePullSecrets` for your Collector image, see +[the instructions](https://github.com/open-telemetry/opentelemetry-operator?tab=readme-ov-file#using-imagepullsecrets). + +For more info, check out the +[OpenTelemetryCollector CR API docs](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollector). + +### Q5: Does the Target Allocator work for all deployment types? + +No. The Target Allocator only works for +[StatefulSet](https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/), +and +[DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) +([newly-introduced](https://github.com/open-telemetry/opentelemetry-operator/pull/2430#discussion_r1420495631)). +For more info, see +[`collector_webhook.go`](https://github.com/open-telemetry/opentelemetry-operator/blob/aed905c2c3c0aa3fb608a79c2e4d0e7b73dff980/apis/v1beta1/collector_webhook.go#L328). + +### Q6: If I enable `prometheusCR` in the Target Allocator, do I need the `PodMonitor` and `ServiceMonitor` CRs installed in my Kubernetes cluster? + +Yes, you do. These CRs are bundled with the +[Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator); +however, they can be installed standalone, which means that you don’t need to +install the Prometheus Operator just to use these two CRs with the Target +Allocator. + +The easiest way to install the +[`PodMonitor`](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.PodMonitor) +and +[`ServiceMonitor`](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#monitoring.coreos.com/v1.ServiceMonitor) +CRs is to grab a copy of the individual +[PodMonitor YAML](https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/charts/crds/crds/crd-podmonitors.yaml) +and +[ServiceMonitor YAML](https://github.com/prometheus-community/helm-charts/blob/main/charts/kube-prometheus-stack/charts/crds/crds/crd-servicemonitors.yaml) +[custom resource definitions (CRDs)](https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/), +like this: + +```shell +kubectl --context kind-otel-target-allocator-talk apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_servicemonitors.yaml + +kubectl --context kind-otel-target-allocator-talk apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/example/prometheus-operator-crd/monitoring.coreos.com_podmonitors.yaml +``` + +See my +[example of the OpenTelemetry Operator’s Target Allocator with `ServiceMonitor`](https://github.com/avillela/otel-target-allocator-talk/tree/main?tab=readme-ov-file#3b--kubernetes-deployment-servicenow-cloud-observability-backend). + +### Q7: Do I need to create a service account to use the Target Allocator? + +No, but you do need to do a bit of extra work. So, here’s the deal…although you +need a +[service account](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/) +to use the Target Allocator, you don’t have to create your own. + +If you enable the Target Allocator and don’t create a service account, one is +automagically created for you. This service account’s default name is a +concatenation of the Collector name (`metadata.name` in the +`OpenTelemetryCollector` CR) and `-collector`. For example, if your Collector is +called `mycollector`, then your service account would be called +`mycollector-collector`. + +By default, this service account has no defined policy. This means that you’ll +still need to create your own +[`ClusterRole`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole) +and +[`ClusterRoleBinding`](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding), +and associate the `ClusterRole` to the `ServiceAccount` via +`ClusterRoleBinding`. + +See the +[Target Allocator readme](https://github.com/open-telemetry/opentelemetry-operator/tree/main/cmd/otel-allocator#rbac) +for more on Target Allocator RBAC configuration. + +> **NOTE:** This will be automated fully in the near future (see accompanying +> [PR](https://github.com/open-telemetry/opentelemetry-operator/pull/2787)), as +> part of version `0.100.0`. + +### Q8: Can I override the Target Allocator base image? + +Just like you can override the Collector base image in the +`OpenTelemetryCollector` CR, you can also override the Target Allocator base +image. + +Please keep in mind that +[it’s usually best to keep the Target Allocator and OTel operator versions the same](https://cloud-native.slack.com/archives/C033BJ8BASU/p1709128862949249?thread_ts=1709081221.484429&cid=C033BJ8BASU), +to avoid any compatibility issues. If do you choose to override the Target +Allocator’s base image, you can do so by adding `spec.targetAllocator.image` in +the `OpenTelemetryCollector` CR. You can also specify the number of replicas by +adding `spec.targetAllocator.replicas`. This is totally independent of whether +or not you override the TA image. + +Your code would look something like this: + +```yaml +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: otelcol + namespace: mynamespace +spec: + mode: statefulset + targetAllocator: + image: + replicas: +``` + +Where: + +- `` is a valid Target Allocator image from a container + repository. +- `` is the number of pod instances for the underlying + Target Allocator + +### Q9: If it’s not recommended that you override the Target Allocator base image, then why would you want to? + +One use case might be +[if you need to host a mirror of the Target Allocator image in your own private container registry for security purposes](https://cloud-native.slack.com/archives/C033BJ8BASU/p1713894678225579). + +If you do need to reference a Target Allocator image from a private registry, +you’ll need to use `imagePullSecrets`. For details, see +[the instructions](https://github.com/open-telemetry/opentelemetry-operator?tab=readme-ov-file#using-imagepullsecrets). +Note that you don’t need to create a `serviceAccount` for the Target Allocator, +since once is already created for you automagically if you don’t create one +yourself (see +[Q7](#q7-do-i-need-to-create-a-service-account-to-use-the-target-allocator)). + +For more info, check out the +[Target Allocator API docs](https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/api.md#opentelemetrycollectorspectargetallocator). + +### Q10: Is there a version lag between the OTel Operator auto-instrumentation and auto-instrumentation of supported languages? + +If there is a lag, it's minimal, as maintainers try to keep these up to date for +each release cycle. Keep in mind that there are breaking changes in some +semantic conventions and the team is trying to avoid breaking users' code. For +details, see this +[`#otel-operator` thread](https://cloud-native.slack.com/archives/C033BJ8BASU/p1713894678225579). + +## Final thoughts + +Hopefully this has helped to demystify the OTel Operator a bit more. There’s +definitely a lot going on, and the OTel Operator can certainly be a bit scary at +first, but understanding some of the basics will get you well on your way to +mastering this powerful tool. + +If you have any questions about the OTel Operator, I highly recommend that you +post questions on the +[#otel-operator](https://cloud-native.slack.com/archives/C033BJ8BASU) channel on +the [CNCF Slack](https://communityinviter.com/apps/cloud-native/cncf). +Maintainers and contributors are super friendly, and have always been more than +willing to answer my questions! You can also +[hit me up](https://bento.me/adrianamvillela), and I'll try my best to answer +your questions, or to direct you to folks who have the answers! diff --git a/content/en/blog/2024/otel-operator-q-and-a/mount-rainier.jpg b/content/en/blog/2024/otel-operator-q-and-a/mount-rainier.jpg new file mode 100644 index 000000000000..8230b5ce09f6 Binary files /dev/null and b/content/en/blog/2024/otel-operator-q-and-a/mount-rainier.jpg differ diff --git a/content/en/docs/collector/configuration.md b/content/en/docs/collector/configuration.md index b4feba6a7a0b..4cf07ed66e9e 100644 --- a/content/en/docs/collector/configuration.md +++ b/content/en/docs/collector/configuration.md @@ -609,10 +609,9 @@ Collector issues. It consists of two subsections: `logs` and `metrics`. The `logs` subsection lets you configure how the logs can be generated by the Collector. By default, the Collector writes its logs to `stderr` with a log level of `INFO`. You can also add static key-value pairs to all log entries with -the `initial_fields` to enrich the logging context. As per the `LogsConfig` -defined in v{{% -param vers %}} [here](https://github.com/open-telemetry/opentelemetry-collector/blob/v{{% -param vers %}}/service/telemetry/config.go), the `logs` configuration options are: +the `initial_fields` to enrich the logging context. The [`logs` configuration +options](https://github.com/open-telemetry/opentelemetry-collector/blob/v{{% +param vers %}}/service/telemetry/config.go) are: - `level`: sets the minimum enabled logging level, default `INFO`. - `development`: puts the logger in development mode, default `false`. @@ -635,17 +634,16 @@ The `metrics` subsection lets you configure how the metrics can be generated and exposed by the Collector. By default, the Collector generates basic metrics about itself and expose them for scraping at . You can expose the endpoint to a specific or even all network interfaces when -needed. As per the `MetricsConfig` defined in v{{% -param vers %}} [here](https://github.com/open-telemetry/opentelemetry-collector/blob/v{{% -param vers %}}/service/telemetry/config.go), the `metrics` configuration options -are: +needed. The [`metrics` configuration +options](https://github.com/open-telemetry/opentelemetry-collector/blob/v{{% +param vers %}}/service/telemetry/config.go) are: - `level`: the level of telemetry metrics, default `basic`. The possible values are: - - "none" indicates that no telemetry data should be collected. - - "basic" is the recommended and covers the basics of the service telemetry. - - "normal" adds some other indicators on top of basic. - - "detailed" adds dimensions and views to the previous levels. + - `none`: no telemetry is collected. + - `basic`: essential service telemetry. + - `normal`: the default level, adds standard indicators on top of basic. + - `detailed`: the most verbose level, includes dimensions and views. - `address`: the `[address]:port` formatted URL that metrics exposition should be bound to. Default `127.0.0.1:8888`. @@ -858,7 +856,7 @@ Install [`cfssl`](https://github.com/cloudflare/cfssl) and create the following Then run the following commands: -```bash +```sh cfssl genkey -initca csr.json | cfssljson -bare ca cfssl gencert -ca ca.pem -ca-key ca-key.pem csr.json | cfssljson -bare cert ``` @@ -880,14 +878,14 @@ define with this method are merged into the final configuration after all The following examples show how to override settings inside nested sections: -```shell -# The following example sets the verbosity -# level of the debug exporter to 'detailed' +```sh otelcol --set "exporters::debug::verbosity=detailed" -# The following example overrides gRPC -# settings for the OTLP receiver otelcol --set "receivers::otlp::protocols::grpc={endpoint:localhost:4317, compression: gzip}" ``` -Note tha the `--set` option doesn't support setting a key that contains a dot or -an equal sign. +{{% alert title="Important" color="warning" %}} + +The `--set` option doesn't support setting a key that contains a dot or an equal +sign. + +{{% /alert %}} diff --git a/content/en/docs/demo/feature-flags.md b/content/en/docs/demo/feature-flags.md index e41cc68e7273..f7a798f4b625 100644 --- a/content/en/docs/demo/feature-flags.md +++ b/content/en/docs/demo/feature-flags.md @@ -25,6 +25,7 @@ change the `defaultVariant` value in the config file for a given flag to "on". | `paymentServiceUnreachable` | Checkout Service | Use a bad address when calling the PaymentService to make it seem like the PaymentService is unavailable. | | `loadgeneratorFloodHomepage` | Loadgenerator | Start flooding the homepage with a huge amount of requests, configurable by changing flagd JSON on state. | | `kafkaQueueProblems` | Kafka | Overloads Kafka queue while simultaneously introducing a consumer side delay leading to a lag spike. | +| `imageSlowLoad` | Frontend | Utilizes envoy fault injection, produces a delay in loading of product images in the frontend. | ## Feature Flag Architecture diff --git a/content/en/docs/languages/java/_index.md b/content/en/docs/languages/java/_index.md index 6173a262be8a..e93d9e45532c 100644 --- a/content/en/docs/languages/java/_index.md +++ b/content/en/docs/languages/java/_index.md @@ -7,7 +7,7 @@ aliases: [/java, /java/metrics, /java/tracing] cascade: vers: instrumentation: 2.3.0 - otel: 1.37.0 + otel: 1.38.0 semconv: 1.25.0 weight: 18 --- diff --git a/content/zh/_index.md b/content/zh/_index.md new file mode 100644 index 000000000000..e1232663cb67 --- /dev/null +++ b/content/zh/_index.md @@ -0,0 +1,87 @@ +--- +title: OpenTelemetry +description: >- + 高质量、普遍适用和可移植的遥测助你实现有效的可观测 +show_banner: true +developer_note: + 下文所用的 blocks/cover 短代码将使用文件名中包含 "background" + 的图像文件作为背景图。 +--- + +
+ +{{< blocks/cover image_anchor="top" height="max" color="primary" >}} + + +![OpenTelemetry](/img/logos/opentelemetry-horizontal-color.svg) +{.otel-logo} + + +{{% param description %}} +{.display-6} + +
+ +- [了解更多](/zh/docs/what-is-opentelemetry/) +- [尝试 Demo](/zh/docs/demo/) +- [探索集成组件](/ecosystem/integrations) + +
+ + +
+ +- [开发人员](/zh/docs/getting-started/dev/) +- [运维人员](/zh/docs/getting-started/ops/) + +
+{{< /blocks/cover >}} + +{{% blocks/lead color="white" %}} + +OpenTelemetry 是各类 API、SDK 和工具形成的集合。可用于插桩、生成、采集和导出遥测数据(链路、指标和日志),帮助你分析软件的性能和行为。 + +> OpenTelemetry 在[多种编程语言](/zh/docs/languages/)均达到 **GA** 级别,普适性很高。 + +{{% /blocks/lead %}} + +{{% blocks/section color="dark" type="row" %}} + +{{% blocks/feature icon="fas fa-chart-line" title="链路、指标、日志" %}} + +从你的服务和软件中生成并采集遥测数据,然后将其转发给各种分析工具。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fas fa-magic" title="现成的插桩支持" %}} + +OpenTelemetry 与流行的库和框架集成,例如 [Spring](https://spring.io)、 +[ASP.NET Core](https://docs.microsoft.com/aspnet/core)、 +[Express](https://expressjs.com)、 [Quarkus](https://quarkus.io) 等等! +安装和集成可能只需要几行代码。 + +{{% /blocks/feature %}} + +{{% blocks/feature icon="fab fa-github" title="开源、厂商中立" %}} + +OpenTelemetry 是 100% 免费和开源的, +得到了可观测性领域[众多行业领导者](/ecosystem/vendors/)的采用和支持。 + +{{% /blocks/feature %}} + +{{% /blocks/section %}} + +{{% blocks/section color="secondary" type="cncf" %}} + +**OpenTelemetry 是一个 [CNCF][] [孵化级][]项目**。
这个项目是由 +OpenTracing 和 OpenCensus 项目合并而诞生的。 + +[![CNCF logo][]][cncf] + +[cncf]: https://cncf.io +[cncf logo]: /img/logos/cncf-white.svg +[孵化级]: https://www.cncf.io/projects/ + +{{% /blocks/section %}} diff --git a/content/zh/docs/_index.md b/content/zh/docs/_index.md new file mode 100644 index 000000000000..d256b22cd44e --- /dev/null +++ b/content/zh/docs/_index.md @@ -0,0 +1,13 @@ +--- +title: 文档 +menu: { main: { weight: 10 } } +--- + +OpenTelemetry 也被称为 OTel,是一个供应商中立的、开源的[可观测性](concepts/observability-primer/#what-is-observability)框架, +可用于插桩、生成、采集和导出[链路](/zh/docs/concepts/signals/traces/)、 +[指标](/zh/docs/concepts/signals/metrics/)和[日志](/zh/docs/concepts/signals/logs/)等遥测数据。 + +OpenTelemetry 作为一个行业标准,得到了 40 多个可观测供应商的支持, +被许多[代码库、服务和应用](/ecosystem/integrations)集成,被众多[最终用户](/ecosystem/adopters)采用。 + +![OpenTelemetry 基准架构](/img/otel-diagram.svg) diff --git a/content/zh/docs/what-is-opentelemetry.md b/content/zh/docs/what-is-opentelemetry.md new file mode 100644 index 000000000000..c0bfdc9be52c --- /dev/null +++ b/content/zh/docs/what-is-opentelemetry.md @@ -0,0 +1,91 @@ +--- +title: 什么是 OpenTelemetry? +description: 简短说明 OpenTelemetry 是什么,不是什么。 +weight: -1 +--- + +OpenTelemetry +是一个[可观测性](/zh/docs/concepts/observability-primer/#what-is-observability)框架和工具包, +旨在创建和管理遥测数据,如[链路](/zh/docs/concepts/signals/traces/)、 +[指标](/zh/docs/concepts/signals/metrics/)和[日志](/zh/docs/concepts/signals/logs/)。 +重要的是,OpenTelemetry 是供应商和工具无关的,这意味着它可以与各种可观测性后端一起使用, +包括 [Jaeger](https://www.jaegertracing.io/) 和 +[Prometheus](https://prometheus.io/) 这类开源工具以及商业化产品。 + +OpenTelemetry 不是像 Jaeger、Prometheus 或其他商业供应商那样的可观测性后端。 +OpenTelemetry 专注于遥测数据的生成、采集、管理和导出。 OpenTelemetry 的一个主要目标是, +无论应用程序或系统采用何种编程语言、基础设施或运行时环境,你都可以轻松地将其仪表化。 +重要的是,遥测数据的存储和可视化是有意留给其他工具处理的。 + +## 什么是可观测性? {#what-is-observability} + +[可观测性](/zh/docs/concepts/observability-primer/#what-is-observability)具备检查系统输出来理解系统内部状态的能力。 +在软件的上下文中,这意味着通过检查遥测数据(包括链路、指标和日志)来理解系统的内部状态。 + +要使系统可观测,必须对其进行仪表化。也就是说,代码必须发出链路、指标或日志。 +然后,仪表化的数据必须发送到可观测性后端。 + +## 为什么选择 OpenTelemetry? {#why-opentelemetry} + +随着云计算、微服务架构和日益复杂的业务需求的兴起,软件和基础设施的可观测性需求比以往任何时候都要强烈。 + +OpenTelemetry 满足可观测性的需求,并遵循两个关键原则: + +1. 你所生成的数据归属于你自己,不会被供应商锁定。 +2. 你只需要学习一套 API 和约定。 + +这两个原则的结合赋予团队和组织在当今现代计算世界中所需的灵活性。 + +如果你想了解更多信息,请查阅 OpenTelemetry +的[使命、愿景和价值观](/community/mission/)。 + +## 主要的 OpenTelemetry 组件 {#main-opentelemetry-components} + +OpenTelemetry 包括以下主要组件: + +- 适用于所有组件的[规范](/docs/specs/otel) +- 定义遥测数据形状的标准[协议](/docs/specs/otlp/) +- 为常见遥测数据类型定义标准命名方案的[语义约定](/docs/specs/semconv/) +- 定义如何生成遥测数据的 API +- 实现规范、API 和遥测数据导出的[语言 SDK](/zh/docs/languages) +- 实现常见库和框架的仪表化的[库生态系统](/ecosystem/registry) +- 可自动生成遥测数据的自动仪表化组件,无需更改代码 +- [OpenTelemetry Collector](/zh/docs/collector):接收、处理和导出遥测数据的代理 +- 各种其他工具, + 如[用于 Kubernetes 的 OpenTelemetry Operator](/zh/docs/kubernetes/operator/)、 + [OpenTelemetry Helm Charts](/zh/docs/kubernetes/helm/) 和 + [FaaS 的社区资产](/zh/docs/faas/) + +OpenTelemetry 广泛应用于许多已集成 OpenTelemetry +提供默认可观测性的[库、服务和应用](/ecosystem/integrations/)。 + +OpenTelemetry 得到众多[供应商](/ecosystem/vendors/)的支持,其中许多为 +OpenTelemetry 提供商业支持并直接为此项目做贡献。 + +## 可扩展性 {#extensibility} + +OpenTelemetry 被设计为可扩展的。一些扩展 OpenTelemetry 的例子包括: + +- 向 OpenTelemetry Collector 添加接收器以支持来自自定义源的遥测数据 +- 将自定义仪表化库加载到 SDK 中 +- 创建适用于特定用例的 SDK 或 Collector 的[分发](/zh/docs/concepts/distributions/) +- 为尚不支持 OpenTelemetry 协议(OTLP)的自定义后端创建新的导出器 +- 为非标准上下文传播格式创建自定义传播器 + +尽管大多数用户可能不需要扩展 OpenTelemetry,但此项目几乎每个层面都可以实现扩展。 + +## 历史 {#history} + +OpenTelemetry 是[云原生计算基金会 (CNCF)](https://www.cncf.io)的一个项目,是由 +OpenTracing 和 OpenCensus 项目合并而诞生的。OpenTracing 和 OpenCensus 这两个项目合并而成的。原来这两个项目都是为解决同样的问题而创建的: +缺乏一种标准的方法来为代码进行仪表化并将遥测数据发送到可观测性后端。 +由于这两个项目都无法独立解决这个问题,所以将其合并成立了 OpenTelemetry, +吸收了双方的优势,提供了统一的解决方案。 + +如果你目前正在使用 OpenTracing 或 OpenCensus, +你可以在[迁移指南](/zh/docs/migration/)中了解如何迁移到 OpenTelemetry。 + +## 接下来做什么? {#what-next} + +- 参阅[入门指南](/zh/docs/getting-started/) — 立即开始! +- 了解 [OpenTelemetry 的概念](/zh/docs/concepts/)。 diff --git a/data/ecosystem/vendors.yaml b/data/ecosystem/vendors.yaml index 0d88e748ca61..1579c7ebc4a4 100644 --- a/data/ecosystem/vendors.yaml +++ b/data/ecosystem/vendors.yaml @@ -170,8 +170,8 @@ commercial: true - name: ServiceNow Cloud Observability (Lightstep) nativeOTLP: true - url: https://github.com/lightstep?q=launcher - contact: + url: https://docs.lightstep.com/docs/about-sending-data + contact: https://github.com/cartersocha oss: false commercial: true - name: LogicMonitor diff --git a/data/registry/collector-receiver-openllmetry.yml b/data/registry/collector-receiver-openllmetry.yml new file mode 100644 index 000000000000..3dcacf135811 --- /dev/null +++ b/data/registry/collector-receiver-openllmetry.yml @@ -0,0 +1,18 @@ +# cSpell:ignore openllmetry Instana +title: OTel based Data Collector for LLM +registryType: receiver +language: java +tags: + - java + - receiver + - collector +license: MIT +description: + OTel based Data Collector for LLM is the tool or template to generate + OpenTelemetry metrics for various LLM and LLM Applications. All implementation + are based on predefined OpenTelemetry Semantic Conventions. +authors: + - name: IBM Instana +urls: + repo: https://github.com/instana/otel-dc/tree/main/llm +createdAt: 2024-05-07 diff --git a/data/registry/exporter-dotnet-geneva.yml b/data/registry/exporter-dotnet-geneva.yml index abed352e2caf..103cb8988287 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.8.0-rc.1 + version: 1.8.0-rc.2 diff --git a/data/registry/exporter-js-azure.yml b/data/registry/exporter-js-azure.yml index e7293eed8255..6bdabcd5df58 100644 --- a/data/registry/exporter-js-azure.yml +++ b/data/registry/exporter-js-azure.yml @@ -13,7 +13,7 @@ authors: package: name: '@azure/monitor-opentelemetry-exporter' registry: npm - version: 1.0.0-beta.22 + version: 1.0.0-beta.23 urls: repo: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/monitor/monitor-opentelemetry-exporter createdAt: 2021-11-01 diff --git a/data/registry/instrumentation-js-prisma.yml b/data/registry/instrumentation-js-prisma.yml index 7464d773d70e..71ba4913e18b 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.13.0 + version: 5.14.0 diff --git a/data/registry/instrumentation-ruby-grape.yml b/data/registry/instrumentation-ruby-grape.yml index e4f6ceda5380..fc28cb77d653 100644 --- a/data/registry/instrumentation-ruby-grape.yml +++ b/data/registry/instrumentation-ruby-grape.yml @@ -17,4 +17,4 @@ createdAt: 2022-10-27 package: registry: gems name: opentelemetry-instrumentation-grape - version: 0.1.7 + version: 0.1.8 diff --git a/data/registry/instrumentation-ruby-pg.yml b/data/registry/instrumentation-ruby-pg.yml index ed4df887493f..9fd5480be1f1 100644 --- a/data/registry/instrumentation-ruby-pg.yml +++ b/data/registry/instrumentation-ruby-pg.yml @@ -16,4 +16,4 @@ createdAt: 2020-11-09 package: registry: gems name: opentelemetry-instrumentation-pg - version: 0.27.2 + version: 0.27.3 diff --git a/data/registry/otel-matlab.yml b/data/registry/otel-matlab.yml new file mode 100644 index 000000000000..c38f86dad629 --- /dev/null +++ b/data/registry/otel-matlab.yml @@ -0,0 +1,16 @@ +# cSpell:ignore matlab simulink +title: OpenTelemetry-Matlab +registryType: instrumentation +language: matlab +tags: + - matlab + - simulink +license: Apache 2.0 +description: An unofficial implementation of OpenTelemetry in MATLAB. +authors: + - name: MathWorks + url: https://github.com/mathworks +urls: + repo: https://github.com/mathworks/OpenTelemetry-Matlab +createdAt: 2023-06-12 +isFirstParty: true diff --git a/hugo.yaml b/hugo.yaml index d5a54c99300a..b09c98601110 100644 --- a/hugo.yaml +++ b/hugo.yaml @@ -16,7 +16,6 @@ languages: params: description: The OpenTelemetry Project Site zh: - disabled: true languageName: 中文 (Chinese) params: description: OpenTelemetry 项目网站 @@ -52,7 +51,7 @@ outputFormats: notAlternative: true outputs: - home: [HTML, REDIRECTS] + home: [HTML] section: [HTML] params: @@ -217,6 +216,10 @@ module: - source: content/zh target: content lang: zh + - excludeFiles: specs/* + source: content/en/docs # zh missing-page fallback + target: content/docs + lang: zh - source: tmp/otel/specification target: content/docs/specs/otel - source: tmp/opamp diff --git a/layouts/partials/hooks/head-end.html b/layouts/partials/hooks/head-end.html index 3b98e62ff41c..9b65af633442 100644 --- a/layouts/partials/hooks/head-end.html +++ b/layouts/partials/hooks/head-end.html @@ -1,3 +1,11 @@ {{ with .Params.canonical_url -}} + -{{ end -}} + +{{- else -}} + + {{ $canonicalURL := .Permalink -}} + + + +{{- end -}} diff --git a/package.json b/package.json index 36bb792f499a..5d5bf845d2b0 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ ], "scripts": { "__check:links": "make --keep-going check-links", - "_build": "hugo --cleanDestinationDir -e dev -DFE --baseURL \"${DEPLOY_PRIME_URL:-/}\"", + "_build": "hugo --cleanDestinationDir -e dev -DFE --baseURL \"${DEPLOY_PRIME_URL:-http://localhost}\"", "_check:format:any": "npx prettier --check --ignore-path ''", "_check:format": "npx prettier --check .", "_check:links--md": "npx markdown-link-check --config .markdown-link-check.json *.md", @@ -83,11 +83,11 @@ "sync": "./scripts/sync-submodules.pl", "test-and-fix": "npm run seq -- check fix:dict fix:filenames", "test": "npm run check", - "update:pkg:docsy-dep": "npm install --save-dev autoprefixer@latest postcss-cli@latest", - "update:pkg:hugo": "npm install --save-dev --save-exact hugo-extended@latest", - "update:pkg:hugo+": "npm run update:pkg:hugo && npm run update:pkg:docsy-dep", - "update:pkg:netlify": "npm install --save-optional netlify-cli@latest", - "update:pkg:other": "npm install --save-dev gulp@latest", + "update:docsy-dep": "npm install --save-dev autoprefixer@latest postcss-cli@latest", + "update:hugo": "npm install --save-dev --save-exact hugo-extended@latest", + "update:hugo+": "npm run update:hugo && npm run update:docsy-dep", + "update:netlify": "npm install --save-optional netlify-cli@latest", + "update:other-pkg": "npm install --save-dev gulp@latest", "update:submodule:lang": "npm run seq -- update:submodule _get:submodule:non-lang", "update:submodule": "set -x && git submodule update --remote ${DEPTH:- --depth 1}" }, @@ -95,7 +95,7 @@ "autoprefixer": "^10.4.19", "cspell": "^8.0.0", "gulp": "^4.0.2", - "hugo-extended": "github:chalin/hugo-extended#v0.125.7", + "hugo-extended": "0.125.7", "markdown-link-check": "^3.12.1", "markdownlint": "^0.34.0", "postcss-cli": "^11.0.0", @@ -122,7 +122,7 @@ "path": "^0.12.7" }, "optionalDependencies": { - "netlify-cli": "^17.16.1" + "netlify-cli": "^17.23.5" }, "enginesComment": "Ensure that engines.node value stays consistent with the project's .nvmrc", "engines": { diff --git a/static/refcache.json b/static/refcache.json index 3f431271b931..60c272e12fa3 100644 --- a/static/refcache.json +++ b/static/refcache.json @@ -47,6 +47,14 @@ "StatusCode": 200, "LastSeen": "2024-02-23T23:30:53.006527-05:00" }, + "https://adri-v.medium.com/81d63addbf92": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:01.348993-04:00" + }, + "https://adri-v.medium.com/prometheus-opentelemetry-better-together-41dc637f2292": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:03.277893-04:00" + }, "https://agilecoffee.com/leancoffee/": { "StatusCode": 200, "LastSeen": "2024-01-18T08:05:43.542109-05:00" @@ -183,6 +191,10 @@ "StatusCode": 200, "LastSeen": "2024-01-18T08:05:49.179762-05:00" }, + "https://bento.me/adrianamvillela": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:12.426363-04:00" + }, "https://betterstack.com/docs/logs/open-telemetry/#2-setup": { "StatusCode": 200, "LastSeen": "2024-01-30T16:14:47.668996-05:00" @@ -355,6 +367,22 @@ "StatusCode": 200, "LastSeen": "2024-01-30T06:07:21.044023-05:00" }, + "https://cloud-native.slack.com/archives/C033BJ8BASU/p1709128862949249": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:12.168228-04:00" + }, + "https://cloud-native.slack.com/archives/C033BJ8BASU/p1709321896612279": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:04.608233-04:00" + }, + "https://cloud-native.slack.com/archives/C033BJ8BASU/p1709935402250859": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:09.586175-04:00" + }, + "https://cloud-native.slack.com/archives/C033BJ8BASU/p1713894678225579": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:06.117078-04:00" + }, "https://cloud-native.slack.com/archives/C03B4CWV4DA": { "StatusCode": 200, "LastSeen": "2024-01-18T08:53:40.157677-05:00" @@ -1227,6 +1255,10 @@ "StatusCode": 206, "LastSeen": "2024-04-30T15:56:23.493141+02:00" }, + "https://docs.lightstep.com/docs/about-sending-data": { + "StatusCode": 206, + "LastSeen": "2024-05-13T07:15:59.231698318Z" + }, "https://docs.linuxfoundation.org/lfx/easycla/contributors": { "StatusCode": 206, "LastSeen": "2024-01-30T16:15:11.937332-05:00" @@ -2095,6 +2127,10 @@ "StatusCode": 200, "LastSeen": "2024-01-30T06:01:12.059909-05:00" }, + "https://github.cm/open-telemetry/open-telemetry-collector": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:07.022619-04:00" + }, "https://github.com": { "StatusCode": 200, "LastSeen": "2024-01-18T19:55:56.862973-05:00" @@ -2807,6 +2843,14 @@ "StatusCode": 200, "LastSeen": "2024-01-30T16:14:42.253423-05:00" }, + "https://github.com/mathworks": { + "StatusCode": 200, + "LastSeen": "2024-05-15T14:38:18.358902245-04:00" + }, + "https://github.com/mathworks/OpenTelemetry-Matlab": { + "StatusCode": 200, + "LastSeen": "2024-05-15T14:38:17.890374388-04:00" + }, "https://github.com/metrico/otel-collector": { "StatusCode": 200, "LastSeen": "2024-01-30T16:04:05.309796-05:00" @@ -3747,10 +3791,22 @@ "StatusCode": 200, "LastSeen": "2024-01-18T19:37:11.461365-05:00" }, + "https://github.com/open-telemetry/opentelemetry-operator/issues/1906": { + "StatusCode": 200, + "LastSeen": "2024-05-13T07:25:18.846726619Z" + }, "https://github.com/open-telemetry/opentelemetry-operator/issues/902": { "StatusCode": 200, "LastSeen": "2024-01-18T20:05:35.482435-05:00" }, + "https://github.com/open-telemetry/opentelemetry-operator/pull/2430#discussion_r1420495631": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:09.014347-04:00" + }, + "https://github.com/open-telemetry/opentelemetry-operator/pull/2787": { + "StatusCode": 200, + "LastSeen": "2024-05-13T07:25:20.170057644Z" + }, "https://github.com/open-telemetry/opentelemetry-operator/pull/832": { "StatusCode": 200, "LastSeen": "2024-01-18T20:05:30.899318-05:00" @@ -4931,6 +4987,10 @@ "StatusCode": 206, "LastSeen": "2024-01-18T19:02:39.056387-05:00" }, + "https://kubernetes.io": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:03.727092-04:00" + }, "https://kubernetes.io/": { "StatusCode": 206, "LastSeen": "2024-01-18T08:52:44.68263-05:00" @@ -4943,6 +5003,14 @@ "StatusCode": 206, "LastSeen": "2024-01-18T08:53:40.07228-05:00" }, + "https://kubernetes.io/docs/concepts/configuration/secret/#using-a-secret": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:05.630302-04:00" + }, + "https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:01.910218-04:00" + }, "https://kubernetes.io/docs/concepts/extend-kubernetes/operator/": { "StatusCode": 206, "LastSeen": "2024-01-18T19:02:12.432637-05:00" @@ -5003,14 +5071,34 @@ "StatusCode": 206, "LastSeen": "2024-01-30T16:14:53.147946-05:00" }, + "https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:11.20031-04:00" + }, + "https://kubernetes.io/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:11.609121-04:00" + }, "https://kubernetes.io/docs/reference/kubectl/": { "StatusCode": 206, "LastSeen": "2024-01-30T06:02:57.628168-05:00" }, + "https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:10.691008-04:00" + }, + "https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:07.571021-04:00" + }, "https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-usage-monitoring/": { "StatusCode": 206, "LastSeen": "2024-01-30T06:01:40.735077-05:00" }, + "https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:10.120654-04:00" + }, "https://kuma.io/": { "StatusCode": 206, "LastSeen": "2024-04-30T15:56:19.177281+02:00" @@ -7747,6 +7835,10 @@ "StatusCode": 206, "LastSeen": "2024-02-26T10:53:38.643051+01:00" }, + "https://stackoverflow.com/a/56653384": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:04.058944-04:00" + }, "https://stackoverflow.com/questions/5626193/what-is-monkey-patching": { "StatusCode": 200, "LastSeen": "2024-01-18T19:07:28.672979-05:00" @@ -8083,6 +8175,10 @@ "StatusCode": 200, "LastSeen": "2024-01-18T19:56:02.154722-05:00" }, + "https://www.base64encode.org/": { + "StatusCode": 200, + "LastSeen": "2024-04-25T00:01:05.091534-04:00" + }, "https://www.bmc.com/blogs/opentracing-opencensus-openmetrics/": { "StatusCode": 200, "LastSeen": "2024-01-18T19:10:51.674944-05:00" @@ -8263,6 +8359,10 @@ "StatusCode": 206, "LastSeen": "2024-01-30T06:01:04.885071-05:00" }, + "https://www.honeycomb.io/blog/what-is-auto-instrumentation": { + "StatusCode": 206, + "LastSeen": "2024-04-25T00:01:02.263794-04:00" + }, "https://www.hyperdx.io/docs/install/opentelemetry": { "StatusCode": 206, "LastSeen": "2024-01-30T16:14:16.496047-05:00"