当前位置: 首页 > 知识库问答 >
问题:

无法将跟踪导出到Kubernetes上的OpenTelemetry Collector

韦鸣
2023-03-14

我正在使用opentelemetry ruby otlp exporter进行自动检测:https://github.com/open-telemetry/opentelemetry-ruby/tree/main/exporter/otlp

otel收集器作为守护程序集安装:https://github.com/open-telemetry/opentelemetry-helm-charts/tree/main/charts/opentelemetry-collector

我正在尝试让OpenTelemata收集器从Rails应用程序收集跟踪。两者都在同一个集群中运行,但在不同的命名空间中。

我们已在应用程序中启用自动检测,但rails日志当前显示以下错误:

E,[2022-04-05T22:37:47.838197#6]ERROR--:开放遥测错误:无法导出499跨度

我在应用程序中设置了以下环境变量:

OTEL_LOG_LEVEL=debug
OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318

我无法确认应用程序是否可以与此端口上的收集器吊舱通信。从rails/ruby应用程序中卷曲此地址将返回“拒绝连接”。然而,我能够卷曲http://

从豆荚内部:

# curl http://localhost:4318/
curl: (7) Failed to connect to localhost port 4318: Connection refused

# curl http://10.1.0.66:4318/
404 page not found

此头盔图表创建了一个守护程序,但没有运行任何服务。是否需要启用某些设置才能使其正常工作?

我确认otel收集器正在集群中的每个节点上运行,并且守护程序集将HostPort设置为4318。

共有2个答案

杜焕
2023-03-14

正确的解决方案是使用Kubernetes向下API获取节点IP地址,这将允许您将跟踪直接导出到同一节点内的守护程序pod:

  containers:
  - name: my-app
    image: my-image
    env:
    - name: HOST_IP
      valueFrom:
        fieldRef:
          fieldPath: status.hostIP
    - name: OTEL_EXPORTER_OTLP_ENDPOINT
      value: http://$(HOST_IP):4318

请注意,使用部署的服务作为endpoint(

漆雕和雅
2023-03-14

此设置存在问题:

OTEL_EXPORTER_OTLP_ENDPOINT=http://0.0.0.0:4318

把你的吊舱想象成一个脱光的主机。Localhost或pod的0.0.0.0,并且您的pod中没有部署收集器。

您需要使用收集器中的地址。我检查了共享存储库中可用的示例,对于代理和独立仅独立,您还有一个服务类型的k8s资源。

这样,您就可以使用完整的服务名称(带命名空间)来配置环境变量
此外,环境变量现在被称为OTEL\u EXPORTER\u OTLP\u TRACES\u ENDPOINT,因此您需要这样的内容:

OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=<service-name>.<namespace>.svc.cluster.local:<service-port>
 类似资料:
  • 我正在尝试使用python应用程序(基于django)进行测试,以便能够将事务跟踪推送到Elastic APM,稍后可以使用OpenDistro Elastic中的跟踪分析工具查看。 我试过以下方法 方法1: 然后,在文件中,我添加了以下代码,以直接将跟踪发送到弹性APM。 运行代码时,出现以下错误: 方法2: 由于方法1不起作用,我尝试在两者之间使用OpenTelemetry Collector

  • 问题内容: 我的Python库刚刚将其主模块名称从更改为。对于向后兼容,仍然存在,但是将其导入会引发一些警告。现在,似乎仍然有一些示例程序从旧模块导入,但不是直接导入。 我想找到错误的陈述。有没有什么工具可以让我跟踪导入并找到罪魁祸首而无需费力看所有代码? 问题答案: 使用以下命令启动python解释器: 然后只是grep您的旧模块。

  • 我有两个用于rest API和X射线守护进程的docker容器启动并运行。在我的本地中,API成功地将跟踪发送到X射线守护进程。但无法在Docker中实现。 null

  • 在执行右键单击项目时收到以下消息 - [1/7/2018 6:48:54 AM]发生了ScriptHost错误[1/7/2018 6:47:54 AM]执行的HTTP请求:{[1/8/2018 6.48:54 AM]Microsoft.Azure.WebJobs.Host:错误索引方法“TestFilesIngestJobs.RunScheduleAync”。Microsoft.Azure.Web

  • 如何将堆栈跟踪打印到logcat? 当应用程序在Eclipse中运行并且应用程序崩溃时,我会在logcat窗口中收到一系列消息,如“致命异常:main”,并打印堆栈跟踪。但是,当我从命令行使用adb logcat命令时,我没有看到任何这些消息?我看到的只是一条信息,上面写着一个例子。应用程序已经死了。 如何使用adb logcat命令获得Eclipse logcat窗口中显示的相同堆栈跟踪? 编辑

  • 跟踪行为控制着 Entity Framework Core 是否会在其变更跟踪器里维持实体实例的信息。如果实体是被跟踪的,任何检测到的该实体的变更都将在 SaveChanges() 时持久化到数据库中。Entity Framework Core 还会对已跟踪的、之前已加载到 DbContext 实例中的查询和实体进行相互的导航属性装配。 提示 你可以在 GitHub 上查阅当前文章涉及的代码样例。