%SYS.Monitor.SAM.Abstract
Class %SYS.Monitor.SAM.Abstract Extends %SYS.Monitor.AbstractSensor
Abstract class to provide Sensor metrics for the SAM (System Alerting and Monitoring) application and Prometheus API. All classes which define SAM metrics should inherit from this class. Users may inherit from this class to create application metrics. The application classes may then be registered using SYS.Monitor.SAM.Config.AddApplicationClass(), and they will be added to the system metrics.
Note that this will be called directly by the SAM REST service, and not by the System Monitor. The main SAM polling API will call GetSensors(), which should create the array of:
SAMValues(key)=value or SAMValues(key,item)=value.
Users may call SetSensor(Sensor, Value, Item) or directly set ..SAMValues for each metric.
All 'values' MUST BE NUMERIC values to be used for SAM and/or Prometheus.
Since this will be called directly by the SAM REST service, users should be careful to not introduce any hangs, pauses, or any coding excesses here, as this may be called at intervals of only a few seconds.
Parameters
PRODUCT
Parameter PRODUCT = "unknown";
Fill in the Product name here, which will be appended to all metric names. This should be a short, lower-case prefix to indicate the company or application. InterSystems IRIS will use "iris" for system metrics.
Properties
SAMValues
Property SAMValues As %String [ Internal, MultiDimensional ];
Local array to hold all Sensor values, in the format SAMValues(key,item)=value.
For use by SAM and Prometheus, the 'value' must be numeric.
SAMInfo
Property SAMInfo As %String [ Internal, MultiDimensional ];
Local array to hold all Sensor info values, in the format SAMinfo(metric,token)=value. Tokens ("HELP", "TYPE" and "UNIT") are used to create Prometheus comment lines, with information about the individual Sensors.
Methods
SetSensor
Method SetSensor(Sensor As %String, Value As %String, Item As %String = "") As %Integer [ Final ]
Override Dashboard sensors which are persistent, and System sensors which get passed to Subscribers. Just store all Sensors in the local SAMValues array.
SetSensorLabels
Method SetSensorLabels(Sensor As %String, Value As %String, ByRef Labels As %String = "") As %Integer [ Final ]
Extension of SetSensor which allows for multiple Prometheus 'labels' for a metric.
Labels are passed as an array of label/value pairs, e.g. for a database metric we might use
Labels("id")="USER"
Labels("dir")="c:\\intersystems\\iris\\mgr\\user"
By convention, metrics with a single label value use the "id" key. So, for consistency, multiple labels should always include an "id" label which identifies that metric instance. Other labels can be used to add further information about the metric.
SetSensorInfo
Method SetSensorInfo(Sensor As %String, Help As %String = "", Type As %String = "", Unit As %String = "") As %Integer [ Final ]
Add informational data (Help, Type and Unit) describing a Sensor (i.e. Metric) Valid values for 'Type' are (counter, gauge, histogram, summary, or untyped)