Citrix NetScaler (REST)
Description
This connector monitors Citrix NetScaler ADC devices. It relies on Citrix ADC 13.0 NITRO API or higher.
Enterprise Connector
This connector requires the Enterprise edition of MetricsHub.
Target
Typical platform: Citrix NetScaler
Operating system: Out-Of-Band
This connector is not available for the local host (it is applicable to remote hosts only).
Prerequisites
Leverages: Citrix ADC 13.0 NITRO API or higher
Technology and protocols: HTTP
Examples
CLI
metricshub HOSTNAME -t oob -c +CitrixNetScalerREST --https --http-port 443 -u USERNAME
metricshub.yaml
resourceGroups:
<RESOURCE_GROUP>:
resources:
<HOSTNAME-ID>:
attributes:
host.name: <HOSTNAME> # Change with actual host name
host.type: oob
connectors: [ +CitrixNetScalerREST ] # Optional, to load only this connector
protocols:
http:
https: true
port: 443 # or probably something else
username: <USERNAME> # Change with actual credentials
password: <PASSWORD> # Encrypted using metricshub-encrypt
Connector Activation Criteria
The Citrix NetScaler (REST) connector will be automatically activated, and its status will be reported as OK if all the below criteria are met:
- The HTTP Request below to the managed host succeeds:
- post
nitro/v1/config/login - Request Header:
Accept: application/json Content-Type: application/json - Request Body:
${file::httpBodyLogin} - The response header contains:
Set-Cookie(regex)
- post
Metrics
| Type | Collected Metrics | Specific Attributes |
|---|---|---|
| enclosure | hw.status{hw.type="enclosure", state="degraded|failed|ok"}hw.status{hw.type="enclosure", state="present"}system.cpu.utilizationsystem.memory.limit{system.memory.state="cached"}system.memory.utilizationsystem.memory.utilization{system.memory.state="cached"}system.network.io{network.io.direction="received"}system.network.io{network.io.direction="sent"} | idnamenumberOfCpu |
| fileSystem | system.filesystem.usage{system.filesystem.state="free"} | idname |
| filter_policy | policy.hits | idnamerequest_actionresponse_actionrule |
| http_protocol | http.client.io{protocol.version="http1", network.io.direction="received"}http.client.io{protocol.version="http1", network.io.direction="sent"}http.client.requests{protocol.version="http3", network.io.direction="received"}http.client.requests{protocol.version="http3", network.io.direction="sent"}http.server.grpc.errors{protocol.version="http2"}http.server.grpc.requests{protocol.version="http2", network.io.direction="received"}http.server.grpc.requests{protocol.version="http2", network.io.direction="sent"}http.server.io{protocol.version="http1", network.io.direction="received"}http.server.io{protocol.version="http1", network.io.direction="sent"}http.server.requests{protocol.version="http1", http.method.type="get"}http.server.requests{protocol.version="http1", http.method.type="other"}http.server.requests{protocol.version="http1", http.method.type="post"}http.server.requests{protocol.version="http1", network.io.direction="received"}http.server.requests{protocol.version="http1", network.io.direction="sent"}http.server.requests{protocol.version="http2", network.io.direction="received"}http.server.requests{protocol.version="http2", network.io.direction="sent"}http.server.requests{protocol.version="http3", network.io.direction="received"}http.server.requests{protocol.version="http3", network.io.direction="sent"} | id |
| lb_server | hw.status{hw.type="lb_server", state="degraded|failed|ok"}lb_server.connections{connection.type="backend"}lb_server.connections{connection.type="client"}lb_server.hitslb_server.io{network.io.direction="received"}lb_server.io{network.io.direction="sent"}lb_server.packets{network.io.direction="received"}lb_server.packets{network.io.direction="sent"}lb_server.queue_size{queue.type="surge"}lb_server.requests{network.io.direction="received"}lb_server.requests{network.io.direction="sent"}lb_server.vserver.spillovers | addressidnameporttype |
| lbvserver_service_binding | hw.status{hw.type="lbvserver_service_binding", state="degraded|failed|ok"} | addressidnameportserver.idservice.idtype |
| network | hw.errors{hw.type="network", direction="receive"}hw.errors{hw.type="network", direction="transmit"}hw.network.error_ratio{direction="receive"}hw.network.error_ratio{direction="transmit"}hw.network.io{direction="receive"}hw.network.io{direction="transmit"}hw.network.packets{direction="receive"}hw.network.packets{direction="transmit"}hw.network.uphw.status{hw.type="network", state="degraded|failed|ok"}hw.status{hw.type="network", state="present"} | idname |
| responder_policy | policy.hitspolicy.undefhits | idname |
| service | hw.status{hw.type="service", state="degraded|failed|ok"}service.connections{state="established"}service.current_transactionsservice.hitsservice.limitservice.queue_size{queue.type="reuse"}service.queue_size{queue.type="surge"}service.response_timeservice.transactions.io{transaction.type="request"}service.transactions.io{transaction.type="response"}service.transactions{transaction.type="request"}service.transactions{transaction.type="response"}service.utilization | addressidnameporttype |
| ssl | ssl.active_sessionsssl.cards{card.type="crypto_card"}ssl.cards{card.type="secondary_crypto_card"}ssl.cards{card.type="secondary_ssl_card"}ssl.cards{card.type="ssl_card"}ssl.encryptions{encryption.type="decrypt"}ssl.encryptions{encryption.type="encrypt"}ssl.hashes{hash.layer="back-end", hash.protocol="md5"}ssl.hashes{hash.layer="back-end", hash.protocol="sha"}ssl.hashes{hash.layer="back-end", hash.protocol="sha256"}ssl.hashes{hash.layer="back-end", hash.protocol="sha384"}ssl.hashes{hash.layer="front-end", hash.protocol="md5"}ssl.hashes{hash.layer="front-end", hash.protocol="sha"}ssl.hashes{hash.layer="front-end", hash.protocol="sha256"}ssl.hashes{hash.layer="front-end", hash.protocol="sha384"}ssl.queue_sizessl.sessions{ssl.version="dtls_v1"}ssl.sessions{ssl.version="dtls_v1.2"}ssl.sessions{ssl.version="ssl_v3"}ssl.sessions{ssl.version="tls_v1"}ssl.sessions{ssl.version="tls_v1.1"}ssl.sessions{ssl.version="tls_v1.2"}ssl.sessions{ssl.version="tls_v1.3"}ssl.transactions{ssl.version="dtls_v1"}ssl.transactions{ssl.version="dtls_v1.2"}ssl.transactions{ssl.version="ssl_v3"}ssl.transactions{ssl.version="tls_v1"}ssl.transactions{ssl.version="tls_v1.1"}ssl.transactions{ssl.version="tls_v1.2"}ssl.transactions{ssl.version="tls_v1.3"} | id |
| tcp_protocol | system.network.connections{network.connection.state="flushed", network.transport="tcp"}system.network.connections{network.connection.state="opened", network.transport="tcp", network.io.direction="received"}system.network.connections{network.connection.state="opened", network.transport="tcp", network.io.direction="sent"}system.network.connections{network.connection.state="pending", network.transport="tcp"}tcp.client.errors{network.io.direction="received", error.type="out_of_order"}tcp.client.packets{tcp.method="FIN", network.io.direction="received"}tcp.server.errors{network.io.direction="received", error.type="out_of_order"}tcp.server.io{network.io.direction="received"}tcp.server.io{network.io.direction="sent"}tcp.server.packets{tcp.method="FIN", network.io.direction="received"}tcp.server.packets{tcp.method="SYN", network.io.direction="received"}tcp.server.packets{tcp.method="all", network.io.direction="received"}tcp.server.packets{tcp.method="all", network.io.direction="sent"} | id |
| udp_protocol | udp.server.errors{error.type="limit_exceeded"}udp.server.io{network.io.direction="received"}udp.server.io{network.io.direction="sent"}udp.server.limitudp.server.packets{network.io.direction="received"}udp.server.packets{network.io.direction="sent"} | id |