Supported telemetry types
The Windows integration supports these telemetry types:Prerequisites
The Windows integration has the following prerequisites:- Run the Collector directly on each Windows host with
mode: host. - To collect the Security channel from a Collector that runs under an account other than Local System, add that account to the Event Log Readers group.
Configure
The Windows integration runs by default on Windows hosts. It collects Critical, Error, and Warning records from the System and Application channels and the states of a default set of Windows services. Performance counter collection is off by default. To configure the Windows integration, follow these steps:-
Run the Collector in host mode. The default configuration requires no
windowsblock. For example, add the following to the Collector configuration file: -
Optional: Select the Event Log channels to collect. The
channelslist replaces the default System and Application list, so include those channels to continue collecting them. For example, to add Security to the default channels, add the following to the Collector configuration file:Set a channel’squeryto a structured XML query to replace its default severity filter. The Application entry in the preceding example shows the query syntax while retaining the default severity filter. To reduce collection volume, use a query instead of filtering records after the Collector reads them. -
Optional: Select the services to monitor. Use exact Service Control Manager
service names, including capitalization. Run
Get-Servicein PowerShell to find the service names on the host. For example, add the following to the Collector configuration file:Setincludeto[all]to monitor every installed service. This setting creates one time series per service, which can result in hundreds of time series per host. Per-user services can increase that number. -
Optional: Configure Windows performance counters. Performance counter collection
uses the Windows Performance Data Helper (PDH) and the English object and counter
names shown in Performance Monitor. For example, add the following to the Collector
configuration file:
Use
_Totalfor a bounded aggregate when an object has multiple instances. The*instance selector creates one time series for every matching instance and excludes the_Totalinstance. -
Optional: Disable the integration, or one of its capabilities, to stop collecting
from a host. For example, add the following to the Collector configuration file to
stop collecting Windows service states while continuing to collect Event Log records:
Set
enabled: falsedirectly underwindowsto disable the whole integration.
Validate
To validate the Windows integration, follow these steps:-
In Live Telemetry Analyzer, filter for
__name__=cxdot.integration.target.health cxdot.integration.name=windows. Confirm that each configured target reports1. Use thecxdot.integration.checkandcxdot.integration.targetattributes to identify the capability and target for each result. -
In Metrics Explorer, run the following query:
Confirm that the query returns a time series for the Windows Event Log service. A value of
4means the service is running. -
In Logs Explorer, filter for
cxdot.integration.name=windows. Confirm that an Error, Warning, or Critical record written after the Collector started appears with its channel, event ID, message, and provider. -
Optional: If you configured performance counters, query one of the metric names
you defined. For the preceding example, run the following query in Metrics
Explorer:
Confirm that the query returns a value from each configured Windows host.
Troubleshooting
- A channel reports health
0: Confirm the channel name and structured XML query in Event Viewer. Confirm that the Windows account running the Collector can read the channel. The Security channel requires membership in the Event Log Readers group. - A channel reports health
1, but no records appear: The integration collects only records written after the Collector starts. Without a custom query, it collects only Critical, Error, and Warning records. - A configured service has no status time series: Confirm that
services.includecontains the exact Service Control Manager service name with matching capitalization. A name that doesn’t match an installed service produces no time series. - A stopped service has healthy Service Control Manager target health: Target
health reports whether the Collector can query the Service Control Manager.
The
windows.service.statusmetric reports the state of each service. - A performance counter object reports health
0: Confirm the English object, counter, and instance names in Performance Monitor. Also confirm that each counter’smetricvalue matches a key undermetrics. If the counter was unavailable when the Collector started, restart the Collector after the counter becomes available. - A performance counter object reports health
1, but a wildcard emits no time series: The counter exists, but the object currently has no instances that match*. Configure a named instance or wait for a matching instance to exist. - The
_Totaltime series is missing from wildcard collection: The*selector excludes_Total. Add a separate performance counter entry that selects only_Totaland maps it to its own metric.
Configuration reference
Configure one Windows integration instance with the following settings. In Helm values, place these settings underconfig.integrations.windows. In a Collector configuration file, place
them under cxdot.integrations.windows.
Optional settings
-
enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
collection_intervalType:duration. Optional. Default:60s. How often the Collector reads service states and performance counters, and how often it checks target health. Event Log channels are polled onevent_logs.poll_intervalinstead. -
timeoutType:duration. Optional. Default:60s. Time limit for each service-state or performance-counter collection and each target health evaluation. Windows Event Log and Performance Data Helper (PDH) calls can’t be interrupted after they begin, so a call already in progress can outlive this timeout. A performance counter health evaluation stops before starting its next counter after the timeout. -
event_logsType:object. Optional. Settings for collecting Windows Event Log records as log telemetry. -
event_logs.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
event_logs.channelsType:array of object. Optional. Default:[{"channel":"System"},{"channel":"Application"}]. Minimum items:1. Event Log channels to collect, one collection stream per entry. The default collects the System and Application channels, filtered to Critical, Error, and Warning events. Security is deliberately not a default: its volume can be far higher, especially with logon and logoff auditing enabled, and reading it might require the account that runs the Collector to be a member of the Event Log Readers group. Add it here explicitly to collect it. -
event_logs.channels[].channelType:string. Required. Minimum length:1. Channel name as shown in Event Viewer, for example, System, Application, Security, or a provider channel such as Microsoft-Windows-Sysmon/Operational. -
event_logs.channels[].queryType:string. Optional. Minimum length:1. Structured XML event query, in the format that Event Viewer produces in the XML tab of Filter Current Log. The query replaces the default severity filter for this channel and names its own channel path, so it must repeat the channel. For example,<QueryList><Query Id="0" Path="System"><Select Path="System">*</Select></Query></QueryList>collects every System event. When unset, the channel collects Critical, Error, and Warning events. -
event_logs.channels[].exclude_providersType:array of string. Optional. Event providers to drop after reading, for a provider that’s noisy or can’t render. Prefer narrowingquery, because provider exclusion still pays the cost of reading each event. The cxdot-collector service provider is always excluded to prevent the Collector from ingesting its own error logs. -
event_logs.poll_intervalType:duration. Optional. Default:1s. How often each channel is polled for new records. Polling reads only records written since the previous poll, so a longer interval batches reads rather than dropping events. -
event_logs.max_readsType:integer. Optional. Default:100. Minimum:1. Maximum:1000. Maximum records read into memory in one batch. Each poll continues reading batches until no records remain, so this setting doesn’t cap the number of records collected per poll. -
servicesType:object. Optional. Settings for collecting Windows service states, onewindows.service.statustime series per service. -
services.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
services.includeType:array of string. Optional. Default:["CryptSvc","Dhcp","Dnscache","EventLog","LanmanServer","LanmanWorkstation","RpcSs","Schedule","WinRM"]. Minimum items:1. Exact service names (the SCM name, for example, EventLog, not the display name) whose state to collect, onewindows.service.statustime series for each service. The default is a curated set of common core Windows services. The singleton list[all]collects every installed service, one time series per service, typically a few hundred on a server, and more where per-user services add session-suffixed instances (Remote Desktop and Desktop Experience hosts). Theallmarker can’t be combined with service names. Matching is exact and case-sensitive against the name the Service Control Manager reports. A name that isn’t installed, or differs in case, produces no time series and no error. -
services.excludeType:array of string. Optional. Exact service names to drop from collection, applied afterinclude. Combine it withinclude: [all]to trim the collect-everything set. -
performance_countersType:object. Optional. Settings for reading Windows performance counters as metrics. Off by default: define the counters to read and the metrics they map to, then enable it. -
performance_counters.enabledType:boolean. Optional. Default:false. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
performance_counters.perfcountersType:array of object. Optional. Minimum items:1. The performance counter objects to read, each with its counters and, for multi-instance objects, the instances to read. Every counter reads through the Performance Data Helper (PDH) library, so names are the English names shown in Performance Monitor, for example, objectProcessor, counter% Processor Time, instance_Total. Prefer the_Totalinstance for a bounded host aggregate.*reads every instance and produces one time series per instance, so for objects such as Process or Thread it multiplies time series by the number of instances._Totalcan be listed alongside named instances, but is dropped under*because the per-instance time series already sum to it. Every counter must setmetricto the name of an entry undermetrics, which chooses the metric’s name, unit, and type. Data points read through a wildcard or a named instance carry aninstanceattribute; a lone_Totalreads as the object’s aggregate without one. -
performance_counters.perfcounters[].instancesType:array of string. Optional. For a multi-instance object, the instances to read: named instances,_Totalfor the aggregate, or*for one time series per instance.*excludes_Total. Omit for a single-instance object. -
performance_counters.perfcounters[].objectType:string. Required. Minimum length:1. Performance object to read, by its English name as shown in Performance Monitor, for example,ProcessororLogicalDisk. -
performance_counters.perfcounters[].countersType:array of object. Required. Minimum items:1. The counters to read from this object. Each entry names a counter and the metric it maps to. -
performance_counters.perfcounters[].counters[].attributesType:object. Optional. Static attributes attached to every data point this counter emits, asname: valuepairs. Use them to tell apart counters that map to the same metric. -
performance_counters.perfcounters[].counters[].nameType:string. Required. Minimum length:1. Counter name within the object, by its English name as shown in Performance Monitor, for example,% Processor Time. -
performance_counters.perfcounters[].counters[].recreate_queryType:boolean. Optional. Whether to rebuild the counter query on every read. If true, the Collector recreates the query at each collection, which picks up instances that appear after startup at the cost of reopening the counter. If false, the Collector reuses the query opened at startup. -
performance_counters.perfcounters[].counters[].metricType:string. Required. Minimum length:1. Name of the metric that this counter’s values are emitted as. Must name an entry underperformance_counters.metrics, which defines the metric’s description, unit, and type. -
performance_counters.metricsType:object. Optional. The metrics that counters can map to, keyed by metric name, each with a description, a unit (default1), and eithergauge: {}orsum: {aggregation: cumulative\|delta, monotonic: bool}. Required when the capability is enabled, because every counter’smetricmust name a key defined here. That link isn’t checked when the Collector validates its configuration: a counter that names an undefined metric stops performance counter collection at startup with a logged error, and every object’s target health reads0.

