コード例 #1
0
        public override Task ReportAsync(CancellationToken token)
        {
            // Local log.
            this.ObserverLogger.LogInfo(message.ToString());

            // Report to Fabric.
            var healthReporter = new ObserverHealthReporter(this.ObserverLogger);
            var healthReport   = new Utilities.HealthReport
            {
                Code          = FoErrorWarningCodes.Ok,
                HealthMessage = this.message.ToString(),
                NodeName      = this.NodeName,
                Observer      = this.ObserverName,
                ReportType    = HealthReportType.Node,
                State         = HealthState.Ok,
            };

            healthReporter.ReportHealthToServiceFabric(healthReport);

            // Emit Telemetry - This will use whatever telemetry provider you have configured in FabricObserver Settings.xml.
            var telemetryData = new TelemetryData(this.FabricClientInstance, this.Token)
            {
                Code = FoErrorWarningCodes.Ok,
                HealthEventDescription = this.message.ToString(),
                HealthState            = "Ok",
                NodeName     = this.NodeName,
                ObserverName = this.ObserverName,
                Source       = ObserverConstants.FabricObserverName,
            };

            if (this.IsTelemetryProviderEnabled && this.IsObserverTelemetryEnabled)
            {
                _ = this.TelemetryClient?.ReportHealthAsync(
                    telemetryData,
                    this.Token);
            }

            // ETW.
            if (this.IsEtwEnabled)
            {
                Logger.EtwLogger?.Write(
                    ObserverConstants.FabricObserverETWEventName,
                    new
                {
                    Code = FoErrorWarningCodes.Ok,
                    HealthEventDescription = this.message.ToString(),
                    HealthState            = "Ok",
                    this.NodeName,
                    this.ObserverName,
                    Source = ObserverConstants.FabricObserverName,
                });
            }

            this.message.Clear();

            return(Task.CompletedTask);
        }
コード例 #2
0
        public override Task ReportAsync(CancellationToken token)
        {
            // Local log.
            ObserverLogger.LogInfo(message.ToString());

            /* Report to Fabric */

            // These values will be preserved across observer runs and are useful for clearing warnings
            // by reporting Ok health state health events with the same property and sourceid values
            // as the error/warning health events when FO is safely taken down (e.g., app is being uninstalled,
            // safe restart of fabric node it's running on, etc.).
            HealthReportProperties.Add("SomePropertyName");
            HealthReportSourceIds.Add($"{ObserverName}_SomethingUniqueToThisReport");

            var healthReporter = new ObserverHealthReporter(ObserverLogger);
            var healthReport   = new Utilities.HealthReport
            {
                Code          = FOErrorWarningCodes.Ok,
                HealthMessage = this.message.ToString(),
                NodeName      = NodeName,
                Observer      = ObserverName,
                Property      = HealthReportProperties[^ 1],
コード例 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ObserverBase"/> class.
        /// </summary>
        protected ObserverBase()
        {
            ObserverName             = GetType().Name;
            ConfigurationSectionName = ObserverName + "Configuration";
            FabricClientInstance     = ObserverManager.FabricClientInstance;

            if (IsTelemetryProviderEnabled)
            {
                TelemetryClient = ObserverManager.TelemetryClient;
            }

            FabricServiceContext     = ObserverManager.FabricServiceContext;
            NodeName                 = FabricServiceContext.NodeContext.NodeName;
            NodeType                 = FabricServiceContext.NodeContext.NodeType;
            ConfigurationSectionName = ObserverName + "Configuration";

            // Observer Logger setup.
            string logFolderBasePath;
            string observerLogPath = GetSettingParameterValue(
                ObserverConstants.ObserverManagerConfigurationSectionName,
                ObserverConstants.ObserverLogPathParameter);

            if (!string.IsNullOrEmpty(observerLogPath))
            {
                logFolderBasePath = observerLogPath;
            }
            else
            {
                string logFolderBase = Path.Combine(Environment.CurrentDirectory, "observer_logs");
                logFolderBasePath = logFolderBase;
            }

            ObserverLogger = new Logger(ObserverName, logFolderBasePath);

            if (string.IsNullOrEmpty(this.dumpsPath))
            {
                SetDefaultSfDumpPath();
            }

            // DataLogger setup
            if (bool.TryParse(
                    GetSettingParameterValue(
                        ConfigurationSectionName,
                        ObserverConstants.EnableLongRunningCsvLogging),
                    out bool enableDataLogging))
            {
                if (enableDataLogging)
                {
                    CsvFileLogger = new DataTableFileLogger
                    {
                        EnableCsvLogging = enableDataLogging,
                    };

                    string dataLogPath = GetSettingParameterValue(
                        ObserverConstants.ObserverManagerConfigurationSectionName,
                        ObserverConstants.DataLogPathParameter);

                    if (!string.IsNullOrEmpty(dataLogPath))
                    {
                        CsvFileLogger.DataLogFolderPath = dataLogPath;
                    }
                    else
                    {
                        CsvFileLogger.DataLogFolderPath = Path.Combine(Environment.CurrentDirectory, "observer_data_logs");
                    }
                }
            }

            if (string.IsNullOrEmpty(this.dumpsPath))
            {
                SetDefaultSfDumpPath();
            }

            if (!IsTestRun)
            {
                ConfigurationSettings = new Utilities.ConfigSettings(
                    FabricServiceContext.CodePackageActivationContext.GetConfigurationPackageObject("Config").Settings,
                    ConfigurationSectionName);

                EnableVerboseLogging                = ConfigurationSettings.EnableVerboseLogging;
                IsEnabled                           = ConfigurationSettings.IsEnabled;
                IsObserverTelemetryEnabled          = ConfigurationSettings.IsObserverTelemetryEnabled;
                MonitorDuration                     = ConfigurationSettings.MonitorDuration;
                RunInterval                         = ConfigurationSettings.RunInterval;
                ObserverLogger.EnableVerboseLogging = EnableVerboseLogging;
                DataCapacity                        = ConfigurationSettings.DataCapacity;
                UseCircularBuffer                   = ConfigurationSettings.UseCircularBuffer;
            }

            HealthReporter = new ObserverHealthReporter(ObserverLogger);
        }
コード例 #4
0
        public override Task ReportAsync(CancellationToken token)
        {
            // Local log.
            ObserverLogger.LogInfo(message.ToString());

            /* Report to Fabric */

            // These values will be preserved across observer runs and are useful for clearing warnings
            // by reporting Ok health state health events with the same property and sourceid values
            // as the error/warning health events when FO is safely taken down (e.g., app is being uninstalled,
            // safe restart of fabric node it's running on, etc.).
            HealthReportProperties.Add("SomePropertyName");
            HealthReportSourceIds.Add($"{ObserverName}_SomethingUniqueToThisReport");

            var healthReporter = new ObserverHealthReporter(ObserverLogger, FabricClientInstance);
            var healthReport   = new Utilities.HealthReport
            {
                Code          = FOErrorWarningCodes.Ok,
                HealthMessage = this.message.ToString(),
                NodeName      = NodeName,
                Observer      = ObserverName,
                Property      = HealthReportProperties[HealthReportProperties.Count - 1],
                ReportType    = HealthReportType.Node,
                State         = HealthState.Ok,
            };

            healthReporter.ReportHealthToServiceFabric(healthReport);

            // Emit Telemetry - This will use whatever telemetry provider you have configured in FabricObserver Settings.xml.
            var telemetryData = new TelemetryData(FabricClientInstance, Token)
            {
                Code = FOErrorWarningCodes.Ok,
                HealthEventDescription = this.message.ToString(),
                HealthState            = "Ok",
                NodeName     = NodeName,
                ObserverName = ObserverName,
                Source       = ObserverConstants.FabricObserverName,
            };

            if (IsTelemetryProviderEnabled && IsObserverTelemetryEnabled)
            {
                _ = TelemetryClient?.ReportHealthAsync(
                    telemetryData,
                    Token);
            }

            // ETW.
            if (IsEtwEnabled)
            {
                Logger.EtwLogger?.Write(
                    ObserverConstants.FabricObserverETWEventName,
                    new
                {
                    Code = FOErrorWarningCodes.Ok,
                    HealthEventDescription = this.message.ToString(),
                    HealthState            = "Ok",
                    NodeName,
                    ObserverName,
                    Source = ObserverConstants.FabricObserverName,
                });
            }

            this.message.Clear();

            return(Task.CompletedTask);
        }