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);
                }
            }
        }
Beispiel #2
0
 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));
 }
Beispiel #3
0
 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(); };
        }