我在一家初创公司工作,我们最近将工作负载迁移到使用 Kubernetes,特别是我们在 EKS (AWS) 的集群内运行。
我目前正在尝试在我们的集群上实现可观察性堆栈。我在单独的 EC2 实例上运行 Signoz(用于测试,并且因为我们的集群使用其 Helm Chart 不支持的小型机器)。
在集群中,我正在运行 Open Telemetry Operator,并已成功在部署模式下部署 Collector,并验证它是否能够连接到 Signoz 实例。但是,当我尝试自动检测我的应用程序时,如果不使用 sidecar,我将无法做到这一点。
我的上述元素的清单文件如下。
apiVersion: v1
kind: Namespace
metadata:
name: opentelemetry
labels:
name: opentelemetry
---
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: otel-collector
namespace: opentelemetry
spec:
config: |
receivers:
otlp:
protocols:
grpc:
http:
processors:
memory_limiter:
check_interval: 1s
limit_percentage: 75
spike_limit_percentage: 15
batch:
send_batch_size: 10000
timeout: 10s
exporters:
otlp:
endpoint: obs.stg.company.domain:4317
tls:
insecure: true
logging:
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp, logging]
metrics:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [otlp, logging]
logs:
receivers: [otlp]
processors: []
exporters: [otlp, logging]
---
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
name: my-instrumentation
namespace: opentelemetry
spec:
exporter:
endpoint: http://otel-collector-collector.opentelemetry.svc.cluster.local:4317
propagators:
- tracecontext
- baggage
- b3
sampler:
type: parentbased_traceidratio
argument: "0.25"
dotnet:
nodejs:
当我将注释
instrumentation.opentelemetry.io/inject-dotnet=opentelemetry/auto-instrumentation
应用于应用程序的部署,甚至命名空间,并删除 pod(因此重新创建它)时,我可以看到 dotnet 自动检测的 init 容器运行没有问题,但是无论是在 Collector 上还是在 Signoz 中,我都没有收到任何跟踪、指标或日志。
如果我在 sidecar 模式下创建另一个收集器(如下所示),将检测指向该收集器,并将注释
sidecar.opentelemetry.io/inject=sidecar
应用于命名空间,则一切正常。
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
name: sidecar
namespace: application
spec:
mode: sidecar
config: |
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
exporters:
logging:
otlp:
endpoint: "http://otel-collector-collector.opentelemetry.svc.cluster.local:4317"
tls:
insecure: true
service:
telemetry:
logs:
level: "debug"
pipelines:
traces:
receivers: [otlp]
processors: []
exporters: [logging, otlp]
我尝试在没有 sidecar 的情况下做到这一点的原因是,正如我之前所说,我们有一个相当小的集群,并且希望将开销保持在最低限度。
因此,我想首先了解我是否应该担心 Sidecar,它们的开销是否与不使用它们有明显不同。
其次,我想了解我的配置出了什么问题,因为我相信我遵循了 Signoz 文档中的所有说明。
感谢你们提供的任何帮助。
您的问题得到答案了吗?端口 4318 对我来说也不起作用。