我是 Open Telemetry 的新手,我正在尝试使用它的 C++ API 和一个发出日志的玩具示例。我正在使用 OtlpHttpLogExporter 通过 http 发送到开放遥测收集器。我将收集器配置为使用“日志记录”导出器将收集到的数据打印到控制台。当我启动收集器然后运行代码时,它成功完成,但没有打印任何内容。我错过了什么吗?你能建议我如何调试这个问题吗?
我尝试切换到 OStreamLogExporter 直接打印到控制台,而不是发送到开放遥测收集器,日志打印得很好。我还尝试向收集器发出痕迹和跨度,效果也很好。这个问题似乎专门与向收集器发送日志有关。
#include "opentelemetry/sdk/logs/simple_log_processor.h"
#include "opentelemetry/sdk/logs/logger_provider.h"
#include "opentelemetry/logs/provider.h"
#include "opentelemetry/exporters/otlp/otlp_http_log_exporter.h"
#include "opentelemetry/sdk/version/version.h"
namespace logs_sdk = opentelemetry::sdk::logs;
namespace otlp = opentelemetry::exporter::otlp;
opentelemetry::exporter::otlp::OtlpHttpLogExporterOptions logger_opts;
int main()
{
auto exporter = std::unique_ptr<logs_sdk::LogExporter>(new otlp::OtlpHttpLogExporter(logger_opts));
auto processor = std::unique_ptr<logs_sdk::LogProcessor>(
new logs_sdk::SimpleLogProcessor(std::move(exporter)));
auto provider =
std::shared_ptr<logs_sdk::LoggerProvider>(new logs_sdk::LoggerProvider(std::move(processor)));
// Get Logger
auto logger = provider->GetLogger("firstlog", "", OPENTELEMETRY_SDK_VERSION);
logger->Debug("I am the first log message.");
}
以及收集器的配置:
extensions:
health_check:
pprof:
endpoint: 0.0.0.0:1777
zpages:
endpoint: 0.0.0.0:55679
receivers:
otlp:
protocols:
grpc:
http:
opencensus:
# Collect own metrics
prometheus:
config:
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
- targets: ['0.0.0.0:8888']
jaeger:
protocols:
grpc:
thrift_binary:
thrift_compact:
thrift_http:
zipkin:
processors:
batch:
exporters:
file:
path: ./myoutput.json
logging:
logLevel: debug
prometheus:
endpoint: "prometheus:8889"
namespace: "default"
jaeger:
endpoint: "localhost:14250"
tls:
insecure: true
service:
pipelines:
logs:
receivers: [otlp]
processors: [batch]
exporters: [logging]
traces:
receivers: [otlp]
processors: [batch]
exporters: [logging]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [logging]
extensions: [health_check, pprof, zpages]
需要设置日志级别
opentelemetry::sdk::common::internal_log::GlobalLogHandler::SetLogLevel(opentelemetry::sdk::common::internal_log::LogLevel::Debug);