У меня есть следующий класс, который регистрирует клиент mongodb в моем приложении. Недавно я пытался включить здесь выборку, однако когда я смотрю на показатели в аналитике приложений с помощью этого запроса:
dependencies
| where target == "aggregate"
| summarize sum(itemCount) by bin(timestamp, 1d)
... цифры не сильно уменьшились после локального запуска в течение 6-минутного временного интервала. (ранее было 14 862), и это сокращение может быть связано с разницей в трафике в течение двух соответствующих 6-минутных периодов.
[img]https: //i.stack.imgur.com/2bggk.png[/img]
Я осознаю, что единственное, что я могу установить, это maxTelemetryItemsPerSecond.
Как уменьшить количество телеметрии, отправляемой этим клиентским классом mongodb?
namespace CustomMongoExtensionForAzure.startup
{
public static class MongoDbTelemetryExtensions
{
public static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web);
public static IWebJobsBuilder AddMongoClientWithTelemetry(this IWebJobsBuilder builder, string connectionSettingName)
{
ArgumentNullException.ThrowIfNull(connectionSettingName);
// Read connection string from local.settings.json
var connectionString = Environment.GetEnvironmentVariable(connectionSettingName) ?? throw new InvalidOperationException("Connection string missing");
var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString);
TelemetryConfiguration configuration = TelemetryConfiguration.CreateDefault();
if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING")))
configuration.ConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING");
var chainBuilder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
chainBuilder.UseAdaptiveSampling(
maxTelemetryItemsPerSecond: 1,
excludedTypes: "Exception");
var telemetry = new TelemetryClient(configuration);
mongoClientSettings.ClusterConfigurator = config =>
{
config.Subscribe(e =>
{
telemetry.Context.Operation.Id = Activity.Current?.RootId;
telemetry.TrackDependency($"MongoDb ({e.DatabaseNamespace})", e.CommandName, null, e.Timestamp, e.Duration, true);
});
config.Subscribe(e =>
{
telemetry.Context.Operation.Id = Activity.Current?.RootId;
telemetry.TrackDependency(nameof(MongoDB), e.CommandName, null, e.Timestamp, e.Duration, false);
});
};
builder.Services
.AddSingleton(telemetry)
.AddSingleton((sp) =>
{
return new MongoClient(mongoClientSettings);
});
return builder;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/781 ... n-insights