instrumentation.ts
import {
AzureMonitorLogExporter,
AzureMonitorMetricExporter,
AzureMonitorTraceExporter,
} from '@azure/monitor-opentelemetry-exporter';
import { metrics } from '@opentelemetry/api';
import { logs } from '@opentelemetry/api-logs';
import { Resource } from '@opentelemetry/resources';
import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
import { PeriodicExportingMetricReader, MeterProvider } from '@opentelemetry/sdk-metrics';
import { BatchSpanProcessor, NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
const resource = new Resource({
[ATTR_SERVICE_NAME]: 'Azure Container App',
});
// Monitors
const azureExporter = new AzureMonitorTraceExporter({
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
});
const provider = new NodeTracerProvider({
resource: resource,
spanProcessors: [new BatchSpanProcessor(azureExporter)],
});
provider.register();
// Metrics
const azureMetricExporter = new AzureMonitorMetricExporter({
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
});
const azureMetricReader = new PeriodicExportingMetricReader({ exporter: azureMetricExporter });
const meterProvider = new MeterProvider({
resource: resource,
readers: [azureMetricReader],
});
metrics.setGlobalMeterProvider(meterProvider);
// Logs
const azureLogExporter = new AzureMonitorLogExporter({
connectionString: process.env.APPLICATIONINSIGHTS_CONNECTION_STRING,
});
const logRecordProcessor = new BatchLogRecordProcessor(azureLogExporter);
const loggerProvider = new LoggerProvider({ resource: resource });
loggerProvider.addLogRecordProcessor(logRecordProcessor);
logs.setGlobalLoggerProvider(loggerProvider);
这效果很好,除了“实时指标”功能,该功能在Azure.
中列为
Not available: couldn't connect to your application
。
我尝试了什么?
我试图使用
@azure/monitor-opentelemetry
软件包,而实时指标也无法正常工作。我还将跨度导出到Axiom,据我所知,该软件包是专门用于Azure的,因此会导致“重复寄存器”错误。另外,根据使用情况根本不起作用或导致节点模块错误。
我试图在没有运气的情况下使用this建议的问题/答案@opentelemetry/exporter-node-metrics
I在Azure文档中发现了这一表,这似乎暗示无法将指标从容器应用程序发送到App Insights,但是该文档的其他部分似乎说确实可以这样做。因此,也许它不起作用的原因是因为它不可能吗?
,重新定时摄入
和默认情况下的.NET应用程序。
相同的方式,实时指标尚未以本地支持。 plowing批处理间隔有助于应用程序见解更快地摄入数据,然后允许在live live量表中显示。
NodeMetricExporter
import { ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node';
const provider = new NodeTracerProvider({ resource });
// Reduce span processor interval to improve near-real-time data transfer
const spanProcessor = new BatchSpanProcessor(azureExporter, {
maxQueueSize: 100,
scheduledDelayMillis: 500, // Reduce delay from default 5000ms
});
provider.addSpanProcessor(spanProcessor);
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter())); // For debugging
provider.register();