Exemple #1
0
        public EtwListener(SentinelApiConfig sentinelApiConfig, EtwListenerConfig etwListenerConfig,
                           bool useEventIngest)
        {
            EtwListenerConfig = etwListenerConfig;
            SentinelApiConfig = sentinelApiConfig;
            UseEventIngest    = useEventIngest;

            // Initialize on the first heartbeat after the HostBuilder loads all configs
            if (syntheticCounterManager == null && SentinelApiConfig.SloMetricsConfiguration != null)
            {
                // Set up the SLO metrics logging mechanism
                var sloMetricsConfiguration = new GenevaMdmConfiguration
                {
                    MetricsNamespace = SentinelApiConfig.SloMetricsConfiguration.MetricsNamespace,
                    MetricsAccount   = SentinelApiConfig.SloMetricsConfiguration.MetricsAccount,
                    LocationId       = SentinelApiConfig.SloMetricsConfiguration.LocationId,
                    MinimumValue     = SentinelApiConfig.SloMetricsConfiguration.MinimumValue,
                    BucketSize       = SentinelApiConfig.SloMetricsConfiguration.BucketSize,
                    BucketCount      = SentinelApiConfig.SloMetricsConfiguration.BucketCount
                };

                syntheticCounterManager = new SyntheticCounterManager(sloMetricsConfiguration);
            }

            // Turn on the Provider, and listen
            InitializeEtwListener();
        }
        public SyntheticCounterManager(GenevaMdmConfiguration cfg)
        {
            MetricNamespace   = cfg.MetricsNamespace;
            MonitoringAccount =
                cfg.MetricsAccount; // not sure if it needs to the Logs Account value since currently in PPE they are the same

            // Get the location information for this "unit of deployment" - region in Azure
            LocationId = cfg.LocationId;

            // Start in-memory aggregation and publication of metrics (such as histogram calculation)
            if (!MdmMetricController.StartMetricPublication())
            {
                SIEMfxEventSource.Log.Information("IfxMetrics", "Ifx Configuration - Error - cannot publish metrics");
            }

            // Use the factory helper class to generate the synthetic metrics
            var metricFactory = new MdmMetricFactory();

            // Define the histogram bucketing configuration
            var latencyBehavior = new MdmBucketedDistributionBehavior
            {
                MinimumValue = cfg.MinimumValue,
                BucketSize   = cfg.BucketSize,
                BucketCount  = cfg.BucketCount
            };


            metricOneAgentEtwTcpNetworkBytes = metricFactory.CreateUInt64Metric(
                MdmMetricFlags.CumulativeMetricDefault,
                MonitoringAccount,
                MetricNamespace,
                "CdocOneAgentEtwTcpNetworkBytes",
                "CustomerResourceId", // Mandatory customer resource dimension
                "LocationId",         // Mandatory topology dimension
                "TimeCreated",
                "EventId",
                "ProcessName",
                "ProcessId",
                "DestinationIpAddress",
                "DestinationPort",
                "SourceIpAddress",
                "SourcePort",
                "Bytes"
                );

            metricOneAgentEtwTcpNetworkCount = metricFactory.CreateUInt64Metric(
                MdmMetricFlags.CumulativeMetricDefault,
                MonitoringAccount,
                MetricNamespace,
                "CdocOneAgentEtwTcpNetworkCount",
                "CustomerResourceId", // Mandatory customer resource dimension
                "LocationId",         // Mandatory topology dimension
                "TimeCreated",
                "EventId",
                "ProcessName",
                "ProcessId",
                "DestinationIpAddress",
                "DestinationPort",
                "SourceIpAddress",
                "SourcePort",
                "Count"
                );

            SIEMfxEventSource.Log.Information("IfxMetrics", $@"Ifx Configuration Initialized -
                MetricNamespace: {MetricNamespace}, MonitoringAccount: {MonitoringAccount}");
        }