Nagios/Icinga monitoring plugin for Citrix NetScaler (ADC) using the NITRO REST API.
This is a complete Python rewrite of check_netscaler. All 16 check commands are implemented with comprehensive test coverage and full CI/CD integration.
Looking for the stable Perl version (v1.x)? See tags < 2.0.0 for the legacy Perl implementation.
- HTTPS is now default - Use
--no-sslfor HTTP instead of-sfor HTTPS - Environment variable support added:
NETSCALER_HOST,NETSCALER_USER,NETSCALER_PASS
Monitor your NetScaler without SNMP:
- Virtual Servers - Load balancer, VPN, GSLB, Content Switching, AAA
- Services & Service Groups - State and member quorum monitoring
- SSL Certificates - Expiration warnings
- High Availability - HA status and sync monitoring
- System Resources - CPU, memory, disk usage thresholds
- Network Interfaces - Interface status and statistics
- License Management - License expiration tracking
- NTP Synchronization - Time sync validation
- Configuration - Unsaved config detection
- Performance Data - Generic metric collection for any NITRO object
- Regex-based filtering (
--filter/--limit) - Custom performance data labels
- Flexible threshold formats
- Multiple Python versions supported (3.8-3.12)
Python >= 3.8
requests >= 2.31.0
pip install check_netscalergit clone https://github.com/slauger/check_netscaler.git
cd check_netscaler
# Install
pip install .
# For development
pip install -e ".[dev]"# Check all load balancer vServers
check_netscaler -H 192.168.1.10 -u nsroot -p nsroot -C state -o lbvserver
# Check SSL certificate expiration
check_netscaler -H 192.168.1.10 -C sslcert -w 60 -c 30
# Check CPU usage
check_netscaler -H 192.168.1.10 -C above -o system -n cpuusagepcnt -w 75 -c 90
# Check HA status
check_netscaler -H 192.168.1.10 -C hastatus
# Check NTP sync
check_netscaler -H 192.168.1.10 -C ntp -w "o=0.03" -c "o=0.05"For improved security and convenience, use environment variables instead of command-line arguments:
# Export credentials once
export NETSCALER_HOST=192.168.1.10
export NETSCALER_USER=monitoring
export NETSCALER_PASS=SecurePassword123
# Now run checks without passing credentials
check_netscaler -C state -o lbvserver
check_netscaler -C sslcert -w 60 -c 30
check_netscaler -C hastatusWhy use environment variables?
- Security: Credentials are not visible in process listings (
ps,top,/proc) - Convenience: Set once, use in multiple commands
- Best Practice: Follows patterns from other monitoring plugins (PostgreSQL, MySQL)
- Integration: Works seamlessly with Icinga 2
envattribute, Nagios/systemd environments
Command-line arguments always override environment variables if both are provided.
| Command | Description |
|---|---|
state |
vServer/service/servicegroup/server state monitoring |
above/below |
Threshold-based checks (CPU, memory, disk, etc.) |
sslcert |
SSL certificate expiration |
hastatus |
High availability status |
interfaces |
Network interface monitoring |
servicegroup |
Service group member quorum |
perfdata |
Generic performance data collection |
license |
License expiration |
ntp |
NTP synchronization status |
nsconfig |
Unsaved configuration detection |
matches/matches_not |
String matching in API responses |
staserver |
STA server availability |
hwinfo |
Hardware information |
debug |
Raw API output for troubleshooting |
- CLI Reference - Complete command-line options reference
- Command Examples - Detailed usage for every command
- Icinga 2 Integration - CheckCommand definitions
- Nagios Integration - Command and service configurations
# Run all tests
pytest tests/
# With coverage
pytest tests/ --cov=check_netscaler --cov-report=html
# Linting
ruff check check_netscaler/ tests/
# Formatting
black check_netscaler/ tests/GitHub Actions pipeline runs automatically on every push:
- Matrix testing on Python 3.8, 3.9, 3.10, 3.11, 3.12
- Linting with ruff
- Code formatting with black
- Type checking with mypy
- Comprehensive test suite with pytest
MIT License - See LICENSE
- slauger - Original author
- macampo
- Velociraptor85
- bb-ricardo
- DerInti