General availability (GA) Open source

prometheus.exporter.windows

The prometheus.exporter.windows component embeds the windows_exporter which exposes a wide variety of hardware and OS metrics for Windows-based systems.

The windows_exporter itself comprises various collectors, which you can enable and disable as needed. For more information on collectors, refer to the collectors-list section.

Note

The blacklist and whitelist configuration arguments are deprecated but remain available for backwards compatibility. Use the include and exclude arguments instead.

Note

We do not recommend using this exporter with clustering enabled.

The default instance label set by this exporter is the hostname of the machine running Alloy. Alloy clustering uses consistent hashing to distribute targets across the instances. This requires the discovered targets to be the same and have the same labels across all cluster instances.

If you do need to use this component in a cluster, use a dedicated prometheus.scrape component that’s used to scrape this exporter and doesn’t have clustering enabled. Alternatively, use discovery.relabel to set the instance label to a value that is the same across all cluster instances.

Usage

Alloy
prometheus.exporter.windows "<LABEL>" {
}

Arguments

You can use the following arguments with prometheus.exporter.windows:

NameTypeDescriptionDefaultRequired
enabled_collectorslist(string)List of collectors to enable.["cpu","logical_disk","net","os","service","system"]no

enabled_collectors defines a hand-picked list of collectors to enable by default. If you set this argument, the component disables any collectors not in the list. Refer to the Collectors list for the default set.

Caution

To use any of the configuration blocks below, you must add the corresponding collector name to the enabled_collectors list. For example, to use the dns block, you must include "dns" in your enabled_collectors list. A block has no effect unless you enable its collector.

Blocks

You can use the following blocks with prometheus.exporter.windows. Each block only takes effect if you include its corresponding collector in enabled_collectors.

NameDescriptionRequired
dfsrConfigures the dfsr collector.no
dnsConfigures the dns collector.no
exchangeConfigures the exchange collector.no
filetimeConfigures the filetime collector.no
iisConfigures the iis collector.no
logical_diskConfigures the logical_disk collector.no
msclusterConfigures the mscluster collector.no
mssqlConfigures the mssql collector.no
netframeworkConfigures the netframework collector.no
netConfigures the net collector.no
networkConfigures the network collector.no
performancecounterConfigures the performancecounter collector.no
physical_diskConfigures the physical_disk collector.no
printerConfigures the printer collector.no
processConfigures the process collector.no
scheduled_taskConfigures the scheduled_task collector.no
serviceConfigures the service collector.no
smb_clientConfigures the smb_client collector.no
smbConfigures the smb collector.no
smtpConfigures the smtp collector.no
tcpConfigures the tcp collector.no
textfileConfigures the textfile collector.no
text_file(Deprecated: use textfile instead) Configures the textfile collector.no
updateConfigures the update collector.no

Caution

The text_file block is deprecated as of Alloy v1.11.0. Use the textfile block to configure the textfile collector.

Note

The msmq block is deprecated as of Alloy v1.9.0. You can still include this block in your configuration files, but it has no effect.

dfsr

NameTypeDescriptionDefaultRequired
sources_enabledlist(string)A list of DFSR Perflib sources to use.["connection","folder","volume"]no

dns

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["metrics", "wmi_stats"]no

exchange

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["ADAccessProcesses", "TransportQueues", "HttpProxy", "ActiveSync", "AvailabilityService", "OutlookWebAccess", "Autodiscover", "WorkloadManagement", "RpcClientAccess", "MapiHttpEmsmdb"]no

filetime

NameTypeDescriptionDefaultRequired
file_patternslist(string)A list of glob patterns that match files to monitor.[]no

iis

NameTypeDescriptionDefaultRequired
app_excludestringRegular expression of applications to ignore."^$"no
app_includestringRegular expression of applications to report on."^.+$"no
site_excludestringRegular expression of sites to ignore."^$"no
site_includestringRegular expression of sites to report on."^.+$"no

The component wraps user-supplied app_exclude, app_include, site_exclude, and site_include strings in a regular expression.

logical_disk

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["metrics"]no
excludestringRegular expression of volumes to exclude."^$"no
includestringRegular expression of volumes to include."^.+$"no

The collectors specified by enabled_list can include the following:

  • metrics
  • bitlocker_status

The component includes volume names that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

mscluster

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["cluster","network","node","resource","resourcegroup"]no

The collectors specified by enabled_list can include the following:

  • cluster
  • network
  • node
  • resource
  • resourcegroup

For example, you can set enabled_list to ["cluster"].

mssql

NameTypeDescriptionDefaultRequired
enabled_classeslist(string)A list of MSSQL WMI classes to use.["accessmethods", "availreplica", "bufman", "databases", "dbreplica", "genstats", "info", "locks", "memmgr", "sqlerrors", "sqlstats", "transactions", "waitstats"]no

net

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["metrics", "nic_info"]no
excludestringRegular expression of NICs to exclude."^$"no
includestringRegular expression of NICs to include."^.+$"no

The collectors specified by enabled_list can include the following:

  • metrics
  • nic_info

The component includes NIC names that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

network

NameTypeDescriptionDefaultRequired
excludestringRegular expression of NICs to exclude."^$"no
includestringRegular expression of NICs to include."^.+$"no

The component includes NIC names that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

netframework

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["clrexceptions","clrinterop","clrjit","clrloading","clrlocksandthreads","clrmemory","clrremoting","clrsecurity"]no

The collectors specified by enabled_list can include the following:

  • clrexceptions
  • clrinterop
  • clrjit
  • clrloading
  • clrlocksandthreads
  • clrmemory
  • clrremoting
  • clrsecurity

For example, you can set enabled_list to ["clrjit"].

performancecounter

NameTypeDescriptionDefaultRequired
objectsstringYAML string representing the counters to monitor.""no

The objects field accepts a YAML string that satisfies the schema in the exporter’s documentation for the performancecounter collector. You can construct this directly in Alloy syntax with raw Alloy syntax strings, but the best way to configure this collector is to use a local.file component.

Alloy
local.file "counters" {
  filename = "/etc/alloy/performance_counters.yaml"
}

prometheus.exporter.windows "default" {
  ...

  performancecounter {
    objects = local.file.counters.content
  }

  ...
}

The performance_counters.yaml file should be a YAML file that represents an array of objects matching the schema in the documentation, like the example below.

YAML
# Monitor Memory performance counters
- name: memory
  object: "Memory"
  counters:
    - name: "Cache Faults/sec"
      type: "counter"  # Use 'counter' for cumulative/rate metrics
    - name: "Available Bytes"
      type: "gauge"    # Use 'gauge' for point-in-time values

# Monitor Processor performance counters
- name: processor
  object: "Processor"
  instances: ["_Total"]  # Optional: filter to specific instances
  counters:
    - name: "% Processor Time"
      type: "gauge"
    - name: "Interrupts/sec"
      type: "counter"

physical_disk

NameTypeDescriptionDefaultRequired
excludestringRegular expression of physical disk to exclude."^$"no
includestringRegular expression of physical disk to include."^.+$"no

The component wraps user-supplied exclude and include strings in a regular expression.

printer

NameTypeDescriptionDefaultRequired
excludestringRegular expression of printer to exclude."^$"no
includestringRegular expression of printer to include."^.+$"no

The component includes printers that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

process

NameTypeDescriptionDefaultRequired
counter_versionintVersion of the process collector to use.0no
enable_iis_worker_processboolEnable IIS worker process name queries.falseno
excludestringRegular expression of processes to exclude."^$"no
includestringRegular expression of processes to include."^.+$"no

The counter_version may be 0, 1, or 2.

  • A value of 1 uses the Windows Process performance counters through the registry API.
  • A value of 2 uses the Windows Process V2 performance counters through the Performance Data Helper (PDH) API. These counters are available starting in Windows 11.
  • A value of 0 checks if Process V2 counters are available and falls back to Process counters if they aren’t.

The component includes processes that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

The upstream collector warns that enable_iis_worker_process may leak memory. Use with caution.

scheduled_task

NameTypeDescriptionDefaultRequired
excludestringRegular expression of tasks to exclude."^$"no
includestringRegular expression of tasks to include."^.+$"no

The component includes tasks that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

service

NameTypeDescriptionDefaultRequired
excludestringRegular expression of services to exclude."^$"no
includestringRegular expression of services to include."^.+$"no

The component includes services that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

Note

The use_api, where_clause, and enable_v2_collector attributes are deprecated as of Alloy v1.9.0. You can still include these attributes in your configuration files, but they have no effect.

smb

NameTypeDescriptionDefaultRequired
enabled_listlist(string)Deprecated (no-op), a list of collectors to use.[]no

The collectors specified by enabled_list can include the following:

  • ServerShares

For example, you can set enabled_list to ["ServerShares"].

smb_client

NameTypeDescriptionDefaultRequired
enabled_listlist(string)Deprecated (no-op), a list of collectors to use.[]no

The collectors specified by enabled_list can include the following:

  • ClientShares

For example, you can set enabled_list to ["ClientShares"].

smtp

NameTypeDescriptionDefaultRequired
excludestringRegular expression of virtual servers to ignore."^$"no
includestringRegular expression of virtual servers to include."^.+$"no

The component includes server names that match the regular expression specified by include and don’t match the regular expression specified by exclude.

The component wraps user-supplied exclude and include strings in a regular expression.

tcp

NameTypeDescriptionDefaultRequired
enabled_listlist(string)A list of collectors to use.["metrics","connections_state"]no

The collectors specified by enabled_list can include the following:

  • connections_state
  • metrics

For example, you can set enabled_list to ["metrics"].

textfile

NameTypeDescriptionDefaultRequired
directorieslist(string)The list of directories containing files to ingest.see belowno
text_file_directorystringDeprecated. The directory containing files to ingest.no

By default, directories contains the textfile_inputs directory in the Alloy installation directory. For example, if you install Alloy in C:\Program Files\GrafanaLabs\Alloy\, the default is ["C:\Program Files\GrafanaLabs\Alloy\textfile_inputs"].

The deprecated text_file_directory attribute accepts a comma-separated string of directories. If you set both text_file_directory and directories, the component combines them into a single list.

For backwards compatibility, you can also use the deprecated text_file block to configure the textfile collector. If you configure both blocks, the component combines the distinct directory values from each.

The component only reads files with the .prom extension inside the specified directories.

Note

The .prom files must end with an empty line feed for the component to recognize and read them.

text_file (Deprecated: use textfile instead)

NameTypeDescriptionDefaultRequired
directorieslist(string)The list of directories containing files to ingest.see belowno
text_file_directorystringDeprecated. The directory containing files to ingest.no

This block is deprecated. Use the textfile block instead.

By default, directories contains the textfile_inputs directory in the Alloy installation directory. For example, if you install Alloy in C:\Program Files\GrafanaLabs\Alloy\, the default is ["C:\Program Files\GrafanaLabs\Alloy\textfile_inputs"].

The deprecated text_file_directory attribute accepts a comma-separated string of directories. If you set both text_file_directory and directories, the component combines them into a single list.

If you configure both text_file and textfile blocks, the component combines the distinct directory values from each.

The component only reads files with the .prom extension inside the specified directories.

Note

The .prom files must end with an empty line feed for the component to recognize and read them.

update

NameTypeDescriptionDefaultRequired
onlineboolWhether to search for updates online.falseno
scrape_intervaldurationHow frequently to scrape Windows Update information.6hno

Exported fields

The following fields are exported and can be referenced by other components.

NameTypeDescription
targetslist(map(string))The targets that can be used to collect exporter metrics.

For example, the targets can either be passed to a discovery.relabel component to rewrite the targets’ label sets or to a prometheus.scrape component that collects the exposed metrics.

The exported targets use the configured in-memory traffic address specified by the run command.

Component health

prometheus.exporter.windows reports as unhealthy only when you provide an invalid configuration. In those cases, exported fields retain their last healthy values.

Debug information

prometheus.exporter.windows doesn’t expose any component-specific debug information.

Debug metrics

prometheus.exporter.windows doesn’t expose any component-specific debug metrics.

Wrap regular expression strings

Some collector blocks such as scheduled_task accept a regular expression as a string argument. prometheus.exporter.windows prefixes some regular expression string arguments with ^(?: and suffixes them with )$. For example, if a user sets an exclude argument to ".*", Alloy sets it to "^(?:.*)$".

To find out if the component wraps a particular regular expression argument, refer to the collector block documentation.

Note

The wrapping may change the behaviour of your regular expression. For example, the e.* regular expression would normally match both the “service” and “email” strings. However, ^(?:e.*)$ would only match “email”.

Collectors list

The following table lists the available collectors in windows_exporter. Some collectors only work on specific operating systems. If you enable a collector that the host OS doesn’t support, it has no effect.

You can enable a subset of collectors to limit the amount of metrics that the prometheus.exporter.windows component exposes, or disable collectors that are expensive to run.

NameDescriptionEnabled by default
adActive Directory Domain Services
adcsActive Directory Certificate Services
adfsActive Directory Federation Services
cacheCache metrics
cpuCPU usageYes
cpu_infoCPU Information
containerContainer metrics
dfsrDFSR metrics
dhcpDHCP Server
dnsDNS Server
exchangeExchange metrics
filetimeFile modification time metrics
fsrmquotaMicrosoft File Server Resource Manager (FSRM) Quotas collector
gpuGPU usage and memory consumption
hypervHyper-V hosts
iisIIS sites and applications
logical_diskLogical disks, disk I/OYes
memoryMemory usage metrics
msclusterMSCluster metrics
msmqMSMQ queues
mssqlSQL Server Performance Objects metrics
netframework.NET Framework metrics
netNetwork interface I/OYes
osOS metrics (memory, processes, users)Yes
pagefilePagefile metrics
performancecounterPerformance Counter metrics
physical_diskPhysical disks
printerPrinter metrics
processPer-process metrics
remote_fxRemoteFX protocol (RDP) metrics
scheduled_taskScheduled Tasks metrics
serviceService state metricsYes
smbSMB Server shares
smb_clientSMB Client shares
smtpIIS SMTP Server
systemSystem callsYes
tcpTCP connections
timeWindows Time Service
thermalzoneThermal information
terminal_servicesTerminal services (RDS)
textfileRead Prometheus metrics from a text file
udpUDP connections
updateWindows Update service metrics
vmwarePerformance counters installed by the VMware Guest agent

Refer to the linked documentation on each collector for more information on reported metrics, configuration settings and usage examples.

Caution

Certain collectors cause Alloy to crash if you use them without the required infrastructure. These include but aren’t limited to mscluster, VMware, nps, dns, msmq, ad, hyperv, and scheduled_task.

The cs and logon collectors are deprecated and removed from the exporter. You can still configure these collectors, but they have no effect.

Example

The following example uses a prometheus.scrape component to collect metrics from prometheus.exporter.windows:

Alloy
prometheus.exporter.windows "default" { }

// Configure a prometheus.scrape component to collect windows metrics.
prometheus.scrape "example" {
  targets    = prometheus.exporter.windows.default.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

prometheus.remote_write "demo" {
  endpoint {
    url = "<PROMETHEUS_REMOTE_WRITE_URL>"

    basic_auth {
      username = "<USERNAME>"
      password = "<PASSWORD>"
    }
  }
}

The following example shows you how to enable additional collectors and configure them:

Alloy
prometheus.exporter.windows "advanced" {
  // Enable additional collectors beyond the default set
  enabled_collectors = [
    "cpu", "logical_disk", "net", "os", "service", "system",  // defaults
    "dns", "iis", "process", "scheduled_task"                 // additional
  ]

  // Configure DNS collector settings
  dns {
    enabled_list = ["metrics", "wmi_stats"]
  }

  // Configure IIS collector settings
  iis {
    site_include = "^(Default Web Site|Production)$"
    app_exclude  = "^$"
  }

  // Configure process collector settings
  process {
    include = "^(chrome|firefox|notepad).*"
    exclude = "^$"
  }
}

prometheus.scrape "advanced_example" {
  targets    = prometheus.exporter.windows.advanced.targets
  forward_to = [prometheus.remote_write.demo.receiver]
}

Replace the following:

  • <PROMETHEUS_REMOTE_WRITE_URL>: The URL of the Prometheus remote_write compatible server to send metrics to.
  • <USERNAME>: The username to use for authentication to the remote_write API.
  • <PASSWORD>: The password to use for authentication to the remote_write API.

Compatible components

prometheus.exporter.windows has exports that can be consumed by the following components:

Note

Connecting some components may not be sensible or components may require further configuration to make the connection work correctly. Refer to the linked documentation for more details.