opentelemetry-collector 配置prometheus
一、修改otelcol-config.yaml
nano /root/otelcol-config.yaml
============================================================
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
exporters:
debug:
verbosity: detailed
otlp/jaeger: # Jaeger supports OTLP directly
endpoint: 192.168.31.161:4317
tls:
insecure: true
otlphttp/prometheus: # the PRW exporter, to ingest metrics to backend
endpoint: http://192.168.31.160:9090/api/v1/otlp
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
exporters: [otlp/jaeger]
metrics:
receivers: [otlp]
exporters: [otlphttp/prometheus]
logs:
receivers: [otlp]
exporters: [debug]
============================================================
特别注意红色的字,地址不要写错了:
http://192.168.31.160:9090/api/v1/otlp otlphttp/prometheus: # the PRW exporter, to ingest metrics to backend
endpoint: http://192.168.31.160:9090/api/v1/otlp
二、项目引用依赖
<ItemGroup>
<PackageReference Include="OpenTelemetry.Exporter.Console" Version="1.11.0" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.0" />
<PackageReference Include="OpenTelemetry.Exporter.Prometheus.AspNetCore" Version="1.11.0-beta.1" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" Version="1.11.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.10.1" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" Version="1.10.0" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" Version="1.10.0" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.18" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
Program.cs
using OpenTelemetry.Exporter;
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
var builder = WebApplication.CreateBuilder(args);
#region OpenTelemetry
var serviceName = "demoA";
var serviceVersion = "1.0.0";
builder.Services.AddOpenTelemetry()
.ConfigureResource(resource => resource.AddService(
serviceName: serviceName,
serviceVersion: serviceVersion))
.WithTracing(tracing => tracing
.AddSource(serviceName)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://192.168.31.160:4318/v1/traces");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}))
.WithMetrics(metrics => metrics
.AddMeter(serviceName)
.AddRuntimeInstrumentation()
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddPrometheusExporter()
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://192.168.31.160:4318/v1/metrics");
//http://192.168.31.160:4318/v1/metrics
//直接写入prometheus:http://192.168.31.160:9090/api/v1/otlp/v1/metrics
options.Protocol = OtlpExportProtocol.HttpProtobuf;
})
);
builder.Logging.AddOpenTelemetry(options => options
.SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(
serviceName: serviceName,
serviceVersion: serviceVersion))
.AddOtlpExporter(options =>
{
options.Endpoint = new Uri("http://192.168.31.160:4318/v1/logs");
options.Protocol = OtlpExportProtocol.HttpProtobuf;
}));
#endregion
// Add services to the container.
builder.Services.AddHttpClient();
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.UseOpenTelemetryPrometheusScrapingEndpoint();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseAuthorization();
app.MapControllers();
app.Run();
三、运行效果