Citrix DaaS Monitoring
Last updated – 21 September, 2026
The Citrix DaaS Monitoring package provides visibility into the health and performance of cloud-hosted Citrix Virtual Apps and Desktops environments.
These LogicModules use the Citrix DaaS REST API to collect delivery group, machine catalog, machine, application, session, licensing, zone, and hypervisor metrics through the Citrix Cloud API.
Citrix DaaS data is collected using OAuth 2.0 client credential authentication with a Citrix Cloud service principal.
For more information on vender APIs, see About Citrix DaaS REST API and Get started with Citrix Cloud APIs from Citrix.
As of April 2026, LogicMonitor’s Citrix DaaS package is compatible with Citrix DaaS environments available through the Citrix Cloud DaaS REST API.
Requirements for Citrix DaaS Monitoring
To use Citrix DaaS Monitoring, you need the following:
- Outbound HTTPS access from the Collector to
api.cloud.com - The
LogicMonitor_Collector_SnippetsDataSource imported into the portal. - A Citrix Cloud service principal with read access to Citrix DaaS site, delivery group, machine catalog, machine, application, session, zone, licensing, health, and hypervisor data
- OAuth 2.0 client credentials configured for API access
For more information, see Citrix Daas Integration from Citrix.
Add Citrix DaaS Resources into Monitoring
You can add Citrix DaaS resources into monitoring using one of the following methods:
- Enhanced Script NetScan (recommended)
- Manually add resources
For more information on NetScans, see NetScan Overview.
Warning: To avoid overages, verify that you have sufficient LogicMonitor licenses before running the NetScan. In addition, test your NetScan filters to ensure that you do not inadvertently add Citrix DaaS resources that you do not want to monitor.
Using the Enhanced Script NetScan to Add Citrix DaaS Resources
- In LogicMonitor, navigate to Modules > Exchange > locate and install the Citrix DaaS module package.
- Navigate to Resources > Add > Advanced NetScan.
- Enter a name for the NetScan (for example, Citrix Daas Resources).
- Select the Collector to run the NetScan.
- Select “Enhanced Script NetScan” from the Method dropdown menu.
- In the Enhanced Script section, select Device Credentials > Use custom credentials for this scan.
- Add the following properties to provide the NetScan with the required Citrix DaaS credentials to control how resources are organized:
Property Description Required? citrix.daas.customer.idCitrix Cloud customer ID Yes citrix.daas.client.idCitrix Cloud service principal client ID Yes citrix.daas.client.secret.passCitrix Cloud service principal client secret Yes citrix.daas.api.urlAPI base URL, defaults to https://api.cloud.com/cvad/manageNo citrix.daas.oauth.urlOAuth endpoint override No citrix.daas.group.nameResource group for discovered resources, defaults to Citrix DaaSNo citrix.daas.onboard.credentialsAdds credentials to discovered resources, defaults to trueNo - In the Filters section, use the following filter properties to omit specific resources from discovery.These filters behave the same way as Active Discovery filters.
The resource-level properties are automatically discovered and can be filtered.
Available filter operations include Equal, NotEqual, GreaterThan, GreaterEqual, LessThan, LessEqual, Contain, NotContain, Exist, NotExist, RegexMatch, and RegexNotMatch.Property Value citrix.daas.hypervisor.idHypervisor connection ID citrix.daas.hypervisor.uidHypervisor connection UID citrix.daas.hypervisor.nameHypervisor connection name citrix.daas.hypervisor.addressPreferred hypervisor hostname or address citrix.daas.hypervisor.zoneHypervisor Zone
Recommendation: Start with a specific filter that discovers only a subset of resources you want to monitor. Then incrementally modify the filter operations or values to onboard additional resources as needed.
Warning: If you do not configure filters, the NetScan attempts to add all discovered Citrix DaaS resources as discrete LogicMonitor resources.
- Select Embed a Groovy script and embed the provided script.
Warning: Do not edit the script. Edited Enhanced Script NetScans are not supported. If the LogicMonitor-provided script is edited, LogicMonitor Support can require you to overwrite your edits with the supported script if problems arise.
/*******************************************************************************
* © 2007-2026 - LogicMonitor, Inc. All rights reserved.
******************************************************************************/
import com.santaba.agent.groovy.utils.GroovyScriptHelper as GSH
import com.logicmonitor.mod.Snippets
def debug = false
// Set props object based on whether or not we are running inside a netscan or debug console
def props
try {
hostProps.get("system.hostname")
props = hostProps
debug = true // set debug to true so that we can ensure we do not print sensitive properties
}
catch (MissingPropertyException) {
props = netscanProps
}
def customerId = props.get("citrix.daas.customer.id")
def clientId = props.get("citrix.daas.client.id")
def clientSecret = props.get("citrix.daas.client.secret.pass")
def rootFolder = props.get("citrix.daas.group.name", props.get("citrix.daas.folder.name", "Citrix DaaS"))
def onboardCreds = props.get("citrix.daas.onboard.credentials", "true").toBoolean()
def includeHypervisors = props.get("discover.hypervisors", props.get("discover.hypervisor", "true")).toBoolean()
def loader = GSH.getInstance(GroovySystem.version).getScript("Snippets", Snippets.getLoader()).withBinding(getBinding())
def emit = loader.load("lm.emit", "1")
def lmDebug = loader.load("lm.debug", "1").debugSnippetFactory(out, debug, false, "${customerId}::citrix-daas-api")
def cache = loader.load("lm.cache", "0").cacheSnippetFactory(lmDebug, "${customerId}::citrix-daas-api")
def http = loader.load("proto.http", "0").httpSnippetFactory(props)
def api = loader.load("citrix.daas", "0").create(props, lmDebug, cache, http)
def resources = []
def sites = api.getData("cvad/manage/me")?.Customers?.find { it?.Id == customerId }?.Sites
sites?.each { site ->
def siteName = site.Name?.trim() ?: site.Id
if (!site.Id || !siteName) {
lmDebug.LMDebugPrint("Skipping Citrix DaaS site with missing ID or name: ${site}")
return
}
def siteHostname = siteName.toLowerCase()
.replaceAll(/[^a-z0-9.-]+/, "-")
.replaceAll(/\.+/, ".")
.replaceAll(/^[.-]+|[.-]+$/, "")
.replaceAll(/(\.invalid)?$/, ".invalid")
def sitePropsToEmit = ["citrix.daas.customer.id" : customerId,
"citrix.daas.site.id" : site.Id,
"citrix.daas.site.name" : emit.sanitizePropertyValue(siteName),
"citrix.daas.resource.type": "site",
"system.categories" : "CitrixDaaSSite,NoPing"]
if (onboardCreds) {
sitePropsToEmit["citrix.daas.client.id"] = clientId
sitePropsToEmit["citrix.daas.client.secret.pass"] = clientSecret
}
resources.add(["hostname" : siteHostname,
"displayname": siteName,
"hostProps" : sitePropsToEmit,
"groupName" : [rootFolder]])
if (!includeHypervisors)
return
def hypervisors = api.getAllPages("cvad/manage/Hypervisors", site.Id)
hypervisors?.each { hypervisor ->
def hypervisorName = hypervisor.Name ?: hypervisor.Id
if (!hypervisor.Id || !hypervisorName) {
lmDebug.LMDebugPrint("Skipping Citrix DaaS hypervisor with missing ID or name: ${hypervisor}")
return
}
def hypervisorAddress = hypervisor.Addresses?.find { it }?.trim()
def hypervisorHostname = hypervisorAddress?.replaceFirst(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//, "")
?.tokenize("/:")?.find()
if (!hypervisorHostname) {
def syntheticId = hypervisor.Id.toLowerCase()
.replaceAll(/[^a-z0-9.-]+/, "-")
.replaceAll(/^-|-$/, "")
hypervisorHostname = "citrix-daas-hypervisor-${syntheticId}.local"
}
def hypervisorProps = ["citrix.daas.resource.type" : "hypervisor",
"citrix.daas.customer.id" : customerId,
"citrix.daas.site.id" : site.Id,
"citrix.daas.site.name" : emit.sanitizePropertyValue(siteName),
"citrix.daas.hypervisor.id" : hypervisor.Id,
"citrix.daas.hypervisor.uid" : hypervisor.Uid,
"citrix.daas.hypervisor.name" : emit.sanitizePropertyValue(hypervisorName),
"citrix.daas.hypervisor.address" : hypervisorAddress,
"citrix.daas.hypervisor.connection_type" : hypervisor.ConnectionType,
"citrix.daas.hypervisor.plugin_id" : hypervisor.PluginId,
"citrix.daas.hypervisor.state" : hypervisor.State,
"citrix.daas.hypervisor.zone" : emit.sanitizePropertyValue(hypervisor.Zone?.Name),
"system.categories" : "CitrixDaaSHypervisor"]
if (onboardCreds) {
hypervisorProps["citrix.daas.client.id"] = clientId
hypervisorProps["citrix.daas.client.secret.pass"] = clientSecret
}
resources.add(["hostname" : hypervisorHostname,
"displayname": hypervisorName,
"hostProps" : hypervisorProps,
"groupName" : ["${rootFolder}/Hypervisors"]])
}
}
if (!resources)
throw new Exception("No Citrix DaaS sites with IDs were returned from /me. Verify service principal permissions.")
emit.resource(resources, debug)
return 0- In the Schedule section, select Run this NetScan on a schedule. For dynamic environments, you can schedule the NetScan to run as frequently as hourly.
- Select Save or Save & Run
After running the NetScan, review the history for the number of resources added or for error messages if the NetScan does not create any resources.
Manually Adding Citrix DaaS Resources
- Create a Citrix DaaS Resource Group.
For more information, see Adding Resource Groups. - Add the resources to your Citrix DaaS Resource Group using a Network Resource Group with the following property:
Property Description Required? citrix.daas.site.idCitrix DaaS site ID Yes - Add or verify that the following properties are set on the resources or in your resources group:Note: The Citrix DaaS monitoring package uses the
addCategory_Citrix_DaaSPropertySource to assign Citrix DaaS categories and properties to discovered resources. Site resources receive theCitrixDaaSSiteandNoPingcategories. When hypervisor discovery is enabled, hypervisor resources receive the CitrixDaaSHypervisor category.
Property Description Required? citrix.daas.customer.idCitrix Cloud customer ID Yes citrix.daas.client.idCitrix Cloud service principal client ID Yes citrix.daas.client.secret.passCitrix Cloud service principal client secret Yes citrix.daas.site.idCitrix DaaS site ID Yes citrix.daas.api.urlAPI base URL; defaults to https://api.cloud.com/cvad/manageNo citrix.daas.oauth.urlOAuth endpoint override No citrix.daas.onboard.credentialsAdds credentials to discovered resources; defaults to trueNo
For more information on setting properties, see Resource and Instance Properties.
Import Logic Modules
Import all LogicModules included in the Citrix DaaS Monitoring Package from LM Exchange.
If these LogicModules are already present, ensure they are updated to the most recent versions. After import, discovery and data collection begin automatically.
Note: The Citrix_DaaS_API DataSource and other Citrix DaaS DataSources must run on the same Collector to share cached API data.
Troubleshooting
Use the following table to help diagnose and resolve common issues encountered when deploying or operating the Citrix DaaS Monitoring package:
| Issue | Resolution |
|---|---|
| API Connectivity Issues | Verify Collector connectivity to api.cloud.com and confirm API endpoint accessibility. |
| Authentication Failures | Verify Citrix DaaS properties and Citrix Cloud service principal permissions. |
| Observer Data Collection Issues | Ensure Citrix_DaaS_API runs on the same Collector as cache-backed DataSources. |
| Resource Categorization Issues | Verify resources receive the expected Citrix DaaS categories. |
| Cached Data Behavior | Cached values can continue displaying until cache entries expire. |
| Debugging | For Collector and script troubleshooting guidance, see Collector Debug Facility. |
LogicModules in Package
LogicMonitor’s package for Citirx DaaS consists of the following LogicModules. For full coverage, import the following LogicModules into your platform:
| Display Name | Type | Description |
|---|---|---|
| Citrix DaaS API | DataSource | Observer module for Citrix DaaS REST API data. |
| Citrix DaaS Application Usage | DataSource | Monitors session usage for Citrix DaaS published applications. |
| Citrix DaaS Applications | DataSource | Monitors Citrix DaaS application publication state. |
| Citrix DaaS Cloud Connectors | DataSource | Monitors machine distribution and health by Citrix DaaS Cloud Connector. |
| Citrix DaaS Connection Failure Trends | DataSource | Monitors current Citrix DaaS connection and launch failure categories. |
| Citrix DaaS Delivery Groups | DataSource | Monitors Citrix DaaS delivery group availability and health. |
| Citrix DaaS Hypervisor Machines | DataSource | Monitors Citrix DaaS machines hosted by a hypervisor connection resource. |
| Citrix DaaS Hypervisor Overview | DataSource | Monitors health and entitlement status for a Citrix DaaS hypervisor connection resource. |
| Citrix DaaS Hypervisors | DataSource | Monitors Citrix DaaS hypervisor connection health and hosted machine counts from the site resource. |
| Citrix DaaS Machine Catalogs | DataSource | Monitors Citrix DaaS machine catalog capacity and health. |
| Citrix DaaS Session Performance | DataSource | Monitors Citrix DaaS current session state and recent session trend performance. |
| Citrix DaaS Site Summary | DataSource | Monitors Citrix DaaS site-wide inventory and health counts. |
| Citrix DaaS Zones | DataSource | Monitors Citrix DaaS zone health and resource counts. |
Citrix_DaaS_Topology | TopologySource | Maps Citrix DaaS site, hypervisor connection, and hosted machine relationships. |
addCategory_Citrix_DaaS | PropertySource | Sets Citrix DaaS site or hypervisor categories and refreshed Citrix DaaS properties. |
addERI_Citrix_DaaS | PropertySource | Sets Citrix DaaS External Resource IDs (ERIs) for site and hypervisor connection resources. |
When setting static datapoint thresholds on the various metrics tracked by this package’s DataSources, LogicMonitor follows the technology owner’s best practice KPI recommendations.
Recommendation: If necessary, adjust these predefined thresholds to meet the unique needs of your environment. For more information on tuning datapoint thresholds, see Static Thresholds for Datapoints.


