[Obsolete] FabricObserver 3.1.6, ClusterObserver 2.1.5
FabricObserver 3.1.6, ClusterObserver 2.1.5 - sfpkgs with Microsoft-signed binaries. nupkgs are located in the nuget.org package gallery
Breaking Changes
- Each observer must now be individually configured to emit ETW. If you rely on ETW in your deployments, then you will need to enable ETW in both Settings.xml (ObserverManager configuration settings section, EnableETWProvider param) and on any observer you want to emit ETW in ApplicationManifest.xml (ETW section). Note that, as before, when you enable ETW (or Telemetry for that matter) on an observer, all measurements will be emitted, regardless of health state warnings/Ok clears, etc... The point of doing this is to collect both the raw resource usage data that FO creates and the health state information it produces when some specified target is doing bad things.
For plugin authors, or if you forked FO and modified observers, you must update your code to reflect these changes. You must set the EtwEnabled setting on any observer where you want to emit ETW. This is done in ApplicationManifest.xml, ETW section.
In your source code, please make the following change:
Logger.EtwLogger?.Write
Must be replaced with
ObserverLogger.LogEtw
This is because FO's Logger class has been modified to have a private EventSource logger instance and the public API is now just a function call on ObserverBase's automatically constructed (during initialization for any observer instance) ObserverLogger instance.
If you are using Telemetry (LogAnalytics or ApplicationInsights) in your plugins or in forked observer impls, you will need to make the following change:
if (IsTelemetryProviderEnabled && IsObserverTelemetryEnabled)
{
...
}
Must be changed to
if (IsTelemetryEnabled)
{
...
}
- Removed ObserverBase's HealthReportProperties and HealthReportSourceIds List members. These were never a good idea and added unnecessary complexity with little real benefit. They are gone. This means your code will not compile if you use them. If you want to supply a custom property or source id for a health report you manually generate than just do so. They are both string properties on HealthInformation. If you utilize ProcessDataReportHealth function in ObserverBase, it will automatically take care of creating the meaningful source id and a readable, useful property value for any health event it generates.
Other Important Changes
-
Fixed bug in ObserverBase.ProcessDataReportHealth function that prevented multiple warnings for a single app showing up correctly in SFX, Details view. The right events were created, however.
-
Fixed important bugs in AppObserver that some may not have hit, but you would eventually. Please update to this version ASAP.
-
New Feature: AppObserver will now monitor the service processes for all apps running on the node with a simple single configuration object in AppObserver.config.json file. See Documentation (and the current AppObserver.config.json file) for examples. This means you can supply one set of threshold settings that apply to all application services deployed to the node where an FO instance is running.
This new feature simplifies the notion of shared threshold settings and eliminates the need to duplicate the same threshold settings across the object array of application settings in the configuration JSON. Note that you can specify "overrides" for the "global" settings by simply also supplying a target specific configuration item with the same threshold type supplied (again, you can see an example of this in the documentation and new default AppObserver.config.json file). You can also supply a new appExcludeList/appIncludeList setting to filter out/in app targets. This support is not a breaking change and will have no impact on your currently-written AppObserver configurations
Example of an all-app target configuration item (note, you can supply "*" or "all" (case is not important) for the value. "*" is used below for extreme brevity (some like this), which means the configuration is for all apps currently deployed to the node):
[
{
"targetApp": "*",
"appExcludeList": "fabric:/SomeApp42",
"cpuWarningLimitPercent": 75,
"networkWarningActivePorts": 1800,
"networkWarningEphemeralPorts": 1400,
"warningOpenFileHandles": 4000
},
{
"targetApp": "fabric:/CpuStress",
"cpuWarningLimitPercent": 25
}
]
-
ObserverBase.SetHealthReportTimeToLive function has been renamed to GetHealthReportTimeToLive
-
TelemetryData member HealthEventDescription has been renamed to Description. Since ClusterObserver depends upon this type (and maintains an exact duplicate of its impl), ClusterObserver has been modified to support the renaming. Note: If you deploy ClusterObserver along with FO, you will need to deploy the latest ClusterObserver (2.1.5) in order for it to function correctly if you have deployed FO 3.1.6, which you should! Please upgrade both ASAP.
-
All of these changes are reflected in the SampleObserverPlugin project in the FO repo as well as ContainerObserver.
-
Using.md has been updated to reflect new feature in AppObserver.