System Status#
Get the current status and information about the FortiAnalyzer system.
✅ All code examples tested: Verified against FortiAnalyzer v7.4.8, v7.6.4, v8.0.0.
Overview#
The System Status endpoint provides comprehensive information about the FortiAnalyzer appliance, including:
System information (version, hostname, serial number)
Resource utilization (CPU, memory, disk)
Network configuration
Service status
License information
This endpoint is commonly used for:
Health monitoring and alerting
System inventory and asset management
Capacity planning
Troubleshooting connectivity issues
Endpoint Details#
Method: POST
URL: /jsonrpc
API Path: /sys/status
ADOM Support: No (system-level endpoint)
Requires Authentication: Yes
Minimum Version: 7.0.0
Prerequisites#
Active session or valid API key
Read-only or higher permissions
Request Format#
Parameters#
This endpoint does not require any parameters.
Request Example#
{
"method": "get",
"params": [{
"url": "/sys/status"
}],
"session": "{{session_id}}",
"id": 1
}
{
"result": [{
"data": {
"Admin Domain Configuration": "Enabled",
"BIOS version": "04.06.05",
"Branch Point": "2086",
"Build": "2086",
"Current Time": "Sun Nov 9 14:30:00 2024",
"Disk Usage": [
{
"name": "/",
"total": 102932480,
"used": 15439872
},
{
"name": "/data",
"total": 1948374016,
"used": 245760000
}
],
"Hostname": "FAZ-PROD-01",
"License Status": "Valid",
"Memory Usage": {
"total": 16384,
"used": 8192
},
"Model": "FortiAnalyzer-VM64",
"Serial Number": "FAZVM1234567890",
"Version": "v7.6.4-build2086 250929 (GA)"
},
"status": {
"code": 0,
"message": "OK"
},
"url": "/sys/status"
}],
"session": "kLSFZ7qT9xZc1vB3rtKlXg==",
"id": 1
}
Response Fields#
Field |
Type |
Description |
|---|---|---|
|
|
ADOM status (Enabled/Disabled) |
|
|
System BIOS version |
|
|
Software build number |
|
|
Current system time |
|
|
Array of disk partition information |
|
|
Partition mount point |
|
|
Total space in KB |
|
|
Used space in KB |
|
|
System hostname |
|
|
License validity status |
|
|
System memory information |
|
|
Total memory in MB |
|
|
Used memory in MB |
|
|
Hardware model |
|
|
System serial number |
|
|
FortiAnalyzer version string |
Error Handling#
Common Errors#
Error Code -10: Session Timeout#
Response:
{
"result": [{
"status": {
"code": -10,
"message": "Session timeout"
}
}]
}
Cause: Session has expired or is invalid
Solution:
Re-authenticate and obtain a new session ID
Use API key authentication for long-running processes
Complete Example#
Python Example#
import json
import requests
import urllib3
# Disable SSL warnings for self-signed certificates
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def load_config():
"""Load FortiAnalyzer configuration from .faz-env.json"""
with open('.faz-env.json', 'r') as f:
return json.load(f)
def login(config):
"""Establish session with FortiAnalyzer"""
url = f"https://{config['faz_host']}:{config['faz_port']}/jsonrpc"
payload = {
"method": "exec",
"params": [{
"url": "/sys/login/user",
"data": {
"user": config['username'],
"passwd": config['password']
}
}],
"session": None,
"id": 1
}
try:
response = requests.post(url, json=payload, verify=False, timeout=10)
response.raise_for_status()
result = response.json()
if result['result'][0]['status']['code'] == 0:
return result.get('session')
else:
raise Exception(f"Login failed: {result['result'][0]['status']['message']}")
except requests.exceptions.RequestException as e:
raise Exception(f"Connection error: {str(e)}")
def logout(config, session_id):
"""Terminate session with FortiAnalyzer"""
url = f"https://{config['faz_host']}:{config['faz_port']}/jsonrpc"
payload = {
"method": "exec",
"params": [{"url": "/sys/logout"}],
"session": session_id,
"id": 999
}
requests.post(url, json=payload, verify=False)
def get_system_status(session_id, config):
"""
Get FortiAnalyzer system status
Args:
session_id: Active session ID
config: Configuration dictionary
Returns:
dict: System status information
"""
url = f"https://{config['faz_host']}:{config['faz_port']}/jsonrpc"
payload = {
"method": "get",
"params": [{
"url": "/sys/status"
}],
"session": session_id,
"id": 2
}
try:
response = requests.post(url, json=payload, verify=False, timeout=30)
response.raise_for_status()
result = response.json()
if result['result'][0]['status']['code'] == 0:
return result['result'][0]['data']
else:
raise Exception(f"API error: {result['result'][0]['status']['message']}")
except requests.exceptions.RequestException as e:
raise Exception(f"Request error: {str(e)}")
def calculate_disk_usage_percent(disk_info):
"""Calculate disk usage percentage"""
if disk_info['total'] > 0:
return (disk_info['used'] / disk_info['total']) * 100
return 0
def main():
"""Main execution"""
config = load_config()
session_id = None
try:
# Login
session_id = login(config)
print("✓ Logged in successfully\n")
# Get system status
status = get_system_status(session_id, config)
# Display key information
print("="*60)
print("FortiAnalyzer System Status")
print("="*60)
print(f"Hostname: {status['Hostname']}")
print(f"Model: {status['Model']}")
print(f"Serial Number: {status['Serial Number']}")
print(f"Version: {status['Version']}")
print(f"License: {status['License Status']}")
print(f"Current Time: {status['Current Time']}")
print()
# Memory information
mem = status['Memory Usage']
mem_percent = (mem['used'] / mem['total']) * 100
print(f"Memory Usage: {mem['used']}/{mem['total']} MB ({mem_percent:.1f}%)")
print()
# Disk information
print("Disk Usage:")
for disk in status['Disk Usage']:
usage_percent = calculate_disk_usage_percent(disk)
used_gb = disk['used'] / 1024 / 1024
total_gb = disk['total'] / 1024 / 1024
print(f" {disk['name']:12} {used_gb:6.1f}/{total_gb:6.1f} GB ({usage_percent:.1f}%)")
print("\n" + "="*60)
print("\nFull Response:")
print(json.dumps(status, indent=2))
except Exception as e:
print(f"✗ Error: {str(e)}")
finally:
# Always logout
if session_id:
logout(config, session_id)
print("\n✓ Logged out")
if __name__ == "__main__":
main()
cURL Example#
#!/bin/bash
# Configuration
FAZ_HOST="faz-prod-ai.home.mystier.li"
FAZ_PORT="443"
USERNAME="admin"
PASSWORD="your_password"
# Step 1: Login
echo "Logging in..."
LOGIN_RESPONSE=$(curl -k -s -X POST "https://${FAZ_HOST}:${FAZ_PORT}/jsonrpc" \
-H "Content-Type: application/json" \
-d '{
"method": "exec",
"params": [{
"url": "/sys/login/user",
"data": {"user": "'${USERNAME}'", "passwd": "'${PASSWORD}'"}
}],
"session": null,
"id": 1
}')
SESSION_ID=$(echo $LOGIN_RESPONSE | jq -r '.session')
echo "✓ Session ID: $SESSION_ID"
echo
# Step 2: Get System Status
echo "Getting system status..."
STATUS_RESPONSE=$(curl -k -s -X POST "https://${FAZ_HOST}:${FAZ_PORT}/jsonrpc" \
-H "Content-Type: application/json" \
-d '{
"method": "get",
"params": [{"url": "/sys/status"}],
"session": "'${SESSION_ID}'",
"id": 2
}')
# Display key information
echo "System Information:"
echo "$STATUS_RESPONSE" | jq '.result[0].data | {
Hostname,
Model,
"Serial Number",
Version,
"License Status",
"Memory Usage",
"Disk Usage"
}'
# Step 3: Logout
echo
echo "Logging out..."
curl -k -s -X POST "https://${FAZ_HOST}:${FAZ_PORT}/jsonrpc" \
-H "Content-Type: application/json" \
-d '{
"method": "exec",
"params": [{"url": "/sys/logout"}],
"session": "'${SESSION_ID}'",
"id": 999
}' > /dev/null
echo "✓ Logged out"
Best Practices#
💡 Tip: Regular Monitoring
Poll this endpoint regularly (every 5-15 minutes) to monitor system health and detect issues early.
💡 Tip: Disk Space Alerts
Set up alerts when disk usage exceeds 80% to prevent log data loss and system issues.
💡 Tip: Version Tracking
Use this endpoint to maintain an inventory of FortiAnalyzer versions across your infrastructure.
⚠️ Warning: Memory Usage
Consistently high memory usage (>90%) may impact performance. Consider optimization or hardware upgrades.
Use Cases#
Use Case 1: Health Monitoring Dashboard#
Create a monitoring dashboard that polls system status every 5 minutes:
def monitor_health(config, threshold_disk=80, threshold_mem=90):
"""Monitor FortiAnalyzer health and send alerts"""
session_id = login(config)
try:
status = get_system_status(session_id, config)
# Check disk usage
for disk in status['Disk Usage']:
usage_pct = calculate_disk_usage_percent(disk)
if usage_pct > threshold_disk:
send_alert(f"Disk {disk['name']} at {usage_pct:.1f}%")
# Check memory usage
mem = status['Memory Usage']
mem_pct = (mem['used'] / mem['total']) * 100
if mem_pct > threshold_mem:
send_alert(f"Memory usage at {mem_pct:.1f}%")
finally:
logout(config, session_id)
Use Case 2: Inventory Management#
Collect system information for asset tracking:
def collect_inventory(faz_hosts):
"""Collect inventory from multiple FortiAnalyzers"""
inventory = []
for host in faz_hosts:
config = {'faz_host': host, ...}
session_id = login(config)
try:
status = get_system_status(session_id, config)
inventory.append({
'hostname': status['Hostname'],
'model': status['Model'],
'serial': status['Serial Number'],
'version': status['Version'],
'collected_at': datetime.now()
})
finally:
logout(config, session_id)
return inventory
Troubleshooting#
Issue: Disk Usage Shows 100%#
Symptoms:
/datapartition at or near 100%Log ingestion warnings
Solution:
Check log retention policies
Archive old logs
Consider storage expansion
Enable log compression
Issue: High Memory Usage#
Symptoms:
Memory usage consistently >90%
Slow API responses
GUI performance degradation
Solution:
Check for resource-intensive queries
Review scheduled report generation
Consider increasing system memory
Optimize log retention and archiving
Related Topics: monitoring, health-check, system-info, diagnostics
Last Updated: 2024-11-09
API Version: 7.6.4