public MetricsCollector(IApmLogger logger, IPayloadSender payloadSender, IConfigSnapshotProvider configSnapshotProvider, params IMetricsProvider[] metricsProvider ) { _logger = logger.Scoped(nameof(MetricsCollector)); _payloadSender = payloadSender; _configSnapshotProvider = configSnapshotProvider; var currentConfigSnapshot = configSnapshotProvider.CurrentSnapshot; var interval = currentConfigSnapshot.MetricsIntervalInMilliseconds; // ReSharper disable once CompareOfFloatsByEqualityOperator if (interval == 0) { _logger.Info()?.Log("Collecting metrics is disabled - the agent won't collect metrics"); return; } MetricsProviders = new List <IMetricsProvider>(); var disabledMetrics = configSnapshotProvider.CurrentSnapshot.DisableMetrics; if (metricsProvider != null) { foreach (var item in metricsProvider) { if (item != null) { AddIfEnabled(item); } } } AddIfEnabled(new ProcessTotalCpuTimeProvider(_logger)); AddIfEnabled(new SystemTotalCpuProvider(_logger)); AddIfEnabled(new ProcessWorkingSetAndVirtualMemoryProvider(disabledMetrics)); AddIfEnabled(new FreeAndTotalMemoryProvider(disabledMetrics)); try { // We saw some Exceptions in GcMetricsProvider.ctor, so we try-catch it AddIfEnabled(new GcMetricsProvider(_logger, disabledMetrics)); } catch (Exception e) { _logger.Warning()?.LogException(e, "Failed loading {ProviderName}", nameof(GcMetricsProvider)); } AddIfEnabled(new CgroupMetricsProvider(_logger, disabledMetrics)); _logger.Info()?.Log("Collecting metrics in {interval} milliseconds interval", interval); _timer = new Timer(interval); _timer.Elapsed += (sender, args) => { CollectAllMetrics(); }; void AddIfEnabled(IMetricsProvider provider) { if (provider.IsEnabled(disabledMetrics)) { MetricsProviders.Add(provider); } } }
public Tracer( IApmLogger logger, Service service, IPayloadSender payloadSender, IConfigSnapshotProvider configProvider, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer ) { _logger = logger?.Scoped(nameof(Tracer)); _service = service; _sender = payloadSender.ThrowIfArgumentNull(nameof(payloadSender)); _configProvider = configProvider.ThrowIfArgumentNull(nameof(configProvider)); CurrentExecutionSegmentsContainer = currentExecutionSegmentsContainer.ThrowIfArgumentNull(nameof(currentExecutionSegmentsContainer)); }
public Tracer( IApmLogger logger, Service service, IPayloadSender payloadSender, IConfigSnapshotProvider configProvider, ICurrentExecutionSegmentsContainer currentExecutionSegmentsContainer, IApmServerInfo apmServerInfo, BreakdownMetricsProvider breakdownMetricsProvider ) { _logger = logger?.Scoped(nameof(Tracer)); _service = service; _sender = payloadSender.ThrowIfArgumentNull(nameof(payloadSender)); _configProvider = configProvider.ThrowIfArgumentNull(nameof(configProvider)); CurrentExecutionSegmentsContainer = currentExecutionSegmentsContainer.ThrowIfArgumentNull(nameof(currentExecutionSegmentsContainer)); DbSpanCommon = new DbSpanCommon(logger); _apmServerInfo = apmServerInfo; _breakdownMetricsProvider = breakdownMetricsProvider; }
public MetricsCollector(IApmLogger logger, IPayloadSender payloadSender, IConfigSnapshotProvider configSnapshotProvider) { _logger = logger.Scoped(nameof(MetricsCollector)); _payloadSender = payloadSender; _configSnapshotProvider = configSnapshotProvider; var currentConfigSnapshot = configSnapshotProvider.CurrentSnapshot; var interval = currentConfigSnapshot.MetricsIntervalInMilliseconds; // ReSharper disable once CompareOfFloatsByEqualityOperator if (interval == 0) { _logger.Info()?.Log("Collecting metrics is disabled - the agent won't collect metrics"); return; } MetricsProviders = new List <IMetricsProvider>(); if (!WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, ProcessTotalCpuTimeProvider.ProcessCpuTotalPct)) { MetricsProviders.Add(new ProcessTotalCpuTimeProvider(_logger)); } if (!WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, SystemTotalCpuProvider.SystemCpuTotalPct)) { MetricsProviders.Add(new SystemTotalCpuProvider(_logger)); } var collectProcessWorkingSet = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, ProcessWorkingSetAndVirtualMemoryProvider.ProcessWorkingSetMemory); var collectProcessVirtualMemory = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, ProcessWorkingSetAndVirtualMemoryProvider.ProcessVirtualMemory); if (collectProcessVirtualMemory || collectProcessWorkingSet) { MetricsProviders.Add(new ProcessWorkingSetAndVirtualMemoryProvider(collectProcessVirtualMemory, collectProcessWorkingSet)); } var collectTotalMemory = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, FreeAndTotalMemoryProvider.TotalMemory); var collectFreeMemory = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, FreeAndTotalMemoryProvider.FreeMemory); if (collectFreeMemory || collectTotalMemory) { MetricsProviders.Add(new FreeAndTotalMemoryProvider(collectFreeMemory, collectTotalMemory)); } var collectGcCount = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, GcMetricsProvider.GcCountName); var collectGen0Size = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, GcMetricsProvider.GcGen0SizeName); var collectGen1Size = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, GcMetricsProvider.GcGen1SizeName); var collectGen2Size = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, GcMetricsProvider.GcGen2SizeName); var collectGen3Size = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, GcMetricsProvider.GcGen3SizeName); if (collectGcCount || collectGen0Size || collectGen1Size || collectGen2Size || collectGen3Size) { MetricsProviders.Add(new GcMetricsProvider(_logger, collectGcCount, collectGen0Size, collectGen1Size, collectGen2Size, collectGen3Size)); } var collectCgroupMemLimitBytes = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, CgroupMetricsProvider.SystemProcessCgroupMemoryMemLimitBytes); var collectCgroupMemUsageBytes = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, CgroupMetricsProvider.SystemProcessCgroupMemoryMemUsageBytes); var collectCgroupStatsInactiveFileBytes = !WildcardMatcher.IsAnyMatch(currentConfigSnapshot.DisableMetrics, CgroupMetricsProvider.SystemProcessCgroupMemoryStatsInactiveFileBytes); if (collectCgroupMemLimitBytes || collectCgroupMemUsageBytes || collectCgroupStatsInactiveFileBytes) { MetricsProviders.Add( new CgroupMetricsProvider(_logger, collectCgroupMemLimitBytes, collectCgroupMemUsageBytes, collectCgroupStatsInactiveFileBytes)); } _logger.Info()?.Log("Collecting metrics in {interval} milliseconds interval", interval); _timer = new Timer(interval); _timer.Elapsed += (sender, args) => { CollectAllMetrics(); }; }