软件开发不仅仅是编写一段代码并运行它。围绕它的还有许多其他过程可以确保您的代码在现实世界中按预期工作。在所有这些实践中,可观察性将成为我们今天讨论的重点。

可观察性就是对您的应用程序获得更大的控制和可见性。它实际上告诉您应用程序中真正发生了什么。由于当今的大多数应用程序都采用了面向微服务的架构,因此应用程序变得复杂,有很多移动部件。因此,可观察性是构建稳健可靠系统的关键。

LogsMetricsTrace3 可观察性支柱。虽然日志和指标非常有用,但跟踪允许您遍历请求的整个过程。

有一些应用程序可以帮助您提高可观察性。但是,它们的主要问题之一是它们与供应商无关。这意味着如果你想改变你的可观察性工具,你也必须重写代码。这就是 OpenTelemetry 发挥作用的地方。

OpenTelemetry & Datadog

OpenTelemetry 为我们提供了供应商中立的 API,可帮助我们收集跟踪并将其导出到任何第 3 方应用程序。

这意味着 OpenTelemetry 将帮助您收集跟踪并将其发送到您想要的任何应用程序,只需更改配置即可。您可以将跟踪导出到 Jaeger、Datadog、Signoz 等应用程序或您使用的任何其他应用程序。

另一方面,Datadog 是云应用程序的可观察性服务。它允许您监控数据库、服务器、应用程序、工具和服务。它为您提供了多种集成选项,我们可以通过这些选项将指标、日志和跟踪数据发送到 Datadog。 OpenTelemetry 具有 Datadog 集成,可用于从我们的应用程序共享跟踪。

[![OpenTelemetry & Datadog 在 Fission]中的可观察性(https://res.cloudinary.com/practicaldev/image/fetch/s--y0gqfMgo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/myqp1iwv5srsj78kvb65.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--y0gqfMgo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https:/ /dev-to-uploads.s3.amazonaws.com/uploads/articles/myqp1iwv5srsj78kvb65.png)

将 OpenTelemetry 和 Datadog 与 Fission 集成以增强跟踪

现在我们对可观察性、OpenTelemetry 和 Datadog 有了基本的了解,让我们尝试整合它们!在今天的博文中,我将向您展示我们如何将 OpenTelemetry 和 Datadog 与 Fission 函数集成以增强跟踪。此示例将向您展示如何在 Fission 函数中创建自定义跟踪,然后使用 OpenTelemetry 将它们发送到 Datadog。示例代码是用 Python 编写的,并使用 OpenTelemetry SDK 和 *Datadog * 和 裂变

[我们应用程序的架构](https://res.cloudinary.com/practicaldev/image/fetch/s--fBXCw7Tm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/461982l9rjgkql5vi3ro.png)

先决条件

作为开发人员,您已经知道如果不设置环境就无法开始编码。因此,让我们看看使用 OpenTelemetry 和 Fission 向 Datadog 发送跟踪所需的先决条件。此应用程序的完整源代码可在此OpenTelemetry Datadog 示例 Repo中找到。

所以让我们开始吧!

裂变

您可以参考这篇Fission 安装指南在 Kubernetes 集群上安装 Fission。

您还需要将Fission配置为OpenTelemetry以启用收集跟踪所需的 OpenTelemetry Collector。您可以使用以下 yaml 代码来完成配置。

export FISSION_NAMESPACE=fission
helm install --namespace $FISSION_NAMESPACE \
fission fission-charts/fission-all \
--set openTelemetry.otlpCollectorEndpoint="otel-collector.opentelemetry-operator-system.svc:4317" \
--set openTelemetry.otlpInsecure=true \
--set openTelemetry.tracesSampler="parentbased_traceidratio" \
--set openTelemetry.tracesSamplingRate="1"

进入全屏模式 退出全屏模式

OpenTelemetry 配置

要将我们的跟踪从 OpenTelemetry 发送到 Datadog,我们首先需要使用OpenTelemetry Collector来帮助收集跟踪。它将在内部与OpenTelemetry Processor共享跟踪,该跟踪最终将与OpenTelemetry Exporter共享,最终将跟踪发送到 Datadog。

为了管理所有这些,OpenTelemetry 为我们提供了一个OpenTelemetry Operator。操作符可用于配置和维护 OpenTelemetry Collector 实例以及处理其配置更改。但是,要在现有集群中使用算子,我们需要添加一个cert-manager

您可以使用以下命令将cert-manager添加到现有集群并安装 OpenTelemetry Operator:

# cert-manager
kubectl apply -f https://github.com/jetstack/cert-manager/releases/latest/download/cert-manager.yaml

# open telemetry operator
kubectl apply -f https://github.com/open-telemetry/opentelemetry-operator/releases/latest/download/opentelemetry-operator.yaml

进入全屏模式 退出全屏模式

OpenTelemetry Collector是一个与供应商无关的代理,可以发送和接收指标,以不同格式跟踪不同工具。为了配合Fission功能使用,我们需要修改OpenTelemetry Collector配置如下。

在 exporters 下添加Datadog并确保在以下 yaml 配置中更新您的API KEY

...
...
apiVersion: v1
kind: ConfigMap
metadata:
  name: otel-collector-conf
  labels:
    app: opentelemetry
    component: otel-collector-conf
data:
  otel-collector-config: |
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    processors:
      batch:
        timeout: 10s
      k8sattributes:
    extensions:
      health_check: {}
      zpages: {}
    exporters:
      datadog:
        api:
          key: <YOUR_API_KEY>
    service:
      telemetry:
        logs:
          level: "DEBUG"
      extensions: [health_check, zpages]
      pipelines:
        metrics/2:
          receivers: [otlp]
          processors: [batch, k8sattributes]
          exporters: [datadog]
        traces/2:
          receivers: [otlp]
          processors: [batch, k8sattributes]
          exporters: [datadog]```
{% endraw %}

...
...
{% raw %}

进入全屏模式 退出全屏模式

注:OpenTelemetry正常工作需要申请的完整yaml配置可以在optel-config.yaml文件中找到。

使用命令kubectl apply -f optel-config.yaml应用配置。

数据狗

由于我们将在此示例中使用 Datadog,因此我们需要有一个 Datadog 帐户。他们提供多种定价计划,但免费套餐对于这个例子来说已经足够了。

您可以通过访问DatadogHQ注册试用帐户。

拥有帐户后,您需要生成API KEY来验证您的应用程序以与 Datadog 共享跟踪数据。

为此,请导航至Personal Settings -> Security -> Application Keys

单击New Key并生成一个密钥。

记下稍后将使用的API KEY

环境设置

现在我们已经具备使用 OpenTelemetry & Fission 向 Datadog 发送跟踪的所有先决条件,让我们设置运行 Fission 函数所需的环境。

搭建自定义Python环境

用于 Python 的OpenTelemetrySDK 要求 Python 环境中存在某些 C 库和外部 linux 内核头文件,以便OpenTelemetry正常工作。请参考Fisson Python Environment并按照步骤创建自定义镜像。

在这种情况下,我们需要 linux-headers。

为此,您需要更新Dockerfile并将所需的库附加到RUN命令中。

它应该看起来像这样:RUN apk add --update --no-cache gcc python3-dev build-base libev-dev libffi-dev bash linux-headers

为我们的自定义 Python 环境构建 docker 映像。 (将用户名替换为您在 Docker Hub 上的实际用户名。)


 dockerfile
docker build -t username/python-opentelemetry:latest --build-arg PY_BASE_IMG=3.7-alpine -f Dockerfile .


进入全屏模式 退出全屏模式

将 docker 镜像推送到 Docker Hub 注册表:


 dockerfile
docker push username/python-opentelemetry:latest


进入全屏模式 退出全屏模式

步数

创建裂变环境:


bash
fission env create --name pythonoptel --image username/python-opentelemetry --builder fission/python-builder:latest


进入全屏模式 退出全屏模式

创建源包。

要创建源包,您需要压缩源文件夹。

执行以下命令以生成 zip 存档:


bash
./package.sh


进入全屏模式 退出全屏模式

在创建 zip 之前确保 build.sh 文件是可执行的。使用chmod +x build.sh 更新权限

zip 存档准备好后,执行以下命令来创建包。


bash
fission package create --name fissionoptel-pkg --sourcearchive sample.zip --env pythonoptel --buildcmd "./build.sh"


进入全屏模式 退出全屏模式

注意:包创建过程可能需要很长时间,尤其是在构建grpcio时,请耐心等待。

您可以使用stern查看进度。

在新的终端窗口中,执行stern '.*' -n fission-builder查看包创建状态。

使用上面创建的包创建 Fission 函数:


bash
fission fn create --name optel --pkg fissionoptel-pkg --entrypoint "sample.main"


进入全屏模式 退出全屏模式

有了这个,我们的自定义 Python 环境和我们的 Fission 函数就准备好了。

提示:你也可以创建Fission Spec的所有命令。

规范生成命令


bash
fission spec init
fission env create --name pythonoptel --image atulinfracloud/python-opentelemetry  --builder fission/python-builder:latest --spec
fission package create --name fissionoptel-pkg --sourcearchive sample.zip --env pythonoptel --buildcmd "./build.sh" --spec
fission fn create --name optel --pkg fissionoptel-pkg --entrypoint "sample.main" --spec


进入全屏模式 退出全屏模式

应用规格


bash
fission spec apply # Ensure you run package.sh first


进入全屏模式 退出全屏模式

应用规范后,将创建此应用程序的所有资源。

查看Datadog上的痕迹

要查看 Datadog 上的跟踪记录,请登录您的 Datadog 仪表板并导航到APM -> Services页面。

使用fission fn test --name optel命令执行该函数并等待捕获跟踪。

捕获后,您将在服务列表下看到fission-routerfission-executorfission-fetcher和我们的fission-sample-service服务。

单击页面顶部的Traces选项以查看跟踪。在这里,您将在列表中看到迹线fission-routerfission-executorfission-sample-servicefission-fetcher

[查看 Datadog上的跟踪记录](https://res.cloudinary.com/practicaldev/image/fetch/s--4uYKHQUQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev- to-uploads.s3.amazonaws.com/uploads/articles/pqtlgrytac7q5fpptpiz.png)

单击迹线将进一步展开并显示迹线的详细信息以及跨度。在窗格底部,您可以获得有关跨度、请求类型、执行时间等的更多详细信息。

结论

到目前为止,您已经了解了 Fission 如何与 OpenTelemetry 集成,以及如何将自定义跟踪发送到 Datadog

您现在将能够构建类似的现实生活应用程序,您可以在其中部署 Fission 以及 OpenTelemetry 和您选择的跟踪后端。开发和测试很好,但是您的应用程序是可观察的吗?完成本教程后,您的答案应该是“是”!

如果您对此有任何问题或需要澄清,请随时与作者联系。

想要更多?

更多示例可以在 GitHub](https://github.com/fission/examples/)上的这个[示例目录中找到。

本文首发于裂变博客

Logo

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!

更多推荐