Agent Configuration

The StatusRadar Agent is configured via a YAML file located at /opt/statusradar/config/agent.yaml. This guide covers all configuration options and best practices.

Configuration File Location

/opt/statusradar/config/agent.yaml

Basic Structure

api:
  url: https://api.statusradar.dev
  token: your-agent-token-here

agent:
  hostname: my-server-01
  interval: 300
  timeout: 30

plugins:
  # Plugin configurations here

API Configuration

api.url

Type: String Required: Yes Default: https://api.statusradar.dev

The StatusRadar API endpoint. Use the production endpoint unless you're running a self-hosted instance.

api:
  url: https://api.statusradar.dev

api.token

Type: String Required: Yes Default: None

Your unique agent authentication token. Get this from the Add Server page in the dashboard.

Security: Keep this token secret. Anyone with this token can send metrics to your account.

api:
  token: abc123def456ghi789jkl012mno345pqr678stu901vwx234yz

Agent Configuration

agent.hostname

Type: String Required: No Default: System hostname

Custom hostname for the server. If not specified, uses the system hostname.

agent:
  hostname: production-web-01

agent.interval

Type: Integer (seconds) Required: No Default: 300 (5 minutes)

How often the agent collects and sends metrics. Minimum: 60 seconds.

agent:
  interval: 300  # Collect every 5 minutes

Recommended values:

  • Production servers: 300 (5 minutes)
  • Development servers: 600 (10 minutes)
  • High-frequency monitoring: 60 (1 minute)

agent.timeout

Type: Integer (seconds) Required: No Default: 30

API request timeout. Increase if you have slow network connections.

agent:
  timeout: 30

Plugin Configuration

Plugins are configured under the plugins section. Each plugin has its own configuration block.

General Plugin Structure

plugins:
  plugin_name:
    enabled: true
    # Plugin-specific options

Available Plugins

Redis Plugin

Monitor Redis cache/database instances.

plugins:
  redis:
    enabled: true
    host: localhost
    port: 6379
    password: ''          # Optional: Redis password
    ssl: false            # Optional: Use SSL/TLS
    database: 0           # Optional: Database number

Required: Redis 4.0+

Metrics Collected:

  • Memory usage, fragmentation
  • Command statistics
  • Client connections
  • Keyspace statistics
  • Replication status
  • Persistence metrics

MySQL Plugin

Monitor MySQL or MariaDB database servers.

plugins:
  mysql:
    enabled: true
    host: localhost
    port: 3306
    user: monitor
    password: secret
    database: ''          # Optional: Test database

Required: MySQL 5.7+ or MariaDB 10.3+

Setup:

CREATE USER 'monitor'@'localhost' IDENTIFIED BY 'secret';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'localhost';
FLUSH PRIVILEGES;

Metrics Collected:

  • Connection statistics
  • Query performance
  • Table locks
  • InnoDB metrics
  • Replication status

PostgreSQL Plugin

Monitor PostgreSQL database servers.

plugins:
  postgresql:
    enabled: true
    host: localhost
    port: 5432
    user: postgres
    password: secret
    database: postgres
    ssl_mode: disable     # Options: disable, require, verify-ca, verify-full

Required: PostgreSQL 10+

Setup:

CREATE USER monitor WITH PASSWORD 'secret';
GRANT pg_monitor TO monitor;

Metrics Collected:

  • Connection pool statistics
  • Transaction rates
  • Lock statistics
  • Table and index statistics
  • Replication lag
  • Cache hit ratios

MongoDB Plugin

Monitor MongoDB database servers.

plugins:
  mongodb:
    enabled: true
    host: localhost
    port: 27017
    username: ''          # Optional
    password: ''          # Optional
    database: admin
    auth_source: admin    # Optional

Required: MongoDB 4.0+

Metrics Collected:

  • Operation counters
  • Connection statistics
  • Memory usage
  • Replication status
  • WiredTiger cache
  • Lock statistics

Nginx Plugin

Monitor Nginx web server.

plugins:
  nginx:
    enabled: true
    status_url: http://127.0.0.1/nginx_status

Required: Nginx with stub_status module enabled

Nginx Configuration:

server {
    listen 127.0.0.1:80;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        access_log off;
        allow 127.0.0.1;
        deny all;
    }
}

Metrics Collected:

  • Active connections
  • Requests per second
  • Reading/writing/waiting states

Apache Plugin

Monitor Apache HTTP Server.

plugins:
  apache:
    enabled: true
    status_url: http://127.0.0.1/server-status?auto

Required: Apache with mod_status enabled

Apache Configuration:

<Location "/server-status">
    SetHandler server-status
    Require ip 127.0.0.1
</Location>

Metrics Collected:

  • Worker statistics
  • Request rate
  • Bytes transferred
  • CPU load
  • Idle/busy workers

PHP-FPM Plugin

Monitor PHP-FPM process manager.

plugins:
  php_fpm:
    enabled: true
    status_url: http://127.0.0.1:8080/status?json

Required: PHP-FPM with status page enabled

PHP-FPM Configuration:

; /etc/php/8.2/fpm/pool.d/www.conf
pm.status_path = /status

Nginx Configuration:

location ~ ^/(status|ping)$ {
    access_log off;
    allow 127.0.0.1;
    deny all;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Metrics Collected:

  • Active processes
  • Idle processes
  • Total processes
  • Slow requests
  • Listen queue

Memcached Plugin

Monitor Memcached cache server.

plugins:
  memcached:
    enabled: true
    host: localhost
    port: 11211

Required: Memcached 1.4+

Metrics Collected:

  • Cache hits/misses
  • Memory usage
  • Current connections
  • Items stored
  • Evictions
  • Get/set operations

RabbitMQ Plugin

Monitor RabbitMQ message broker.

plugins:
  rabbitmq:
    enabled: true
    host: localhost
    port: 15672           # Management API port
    username: guest
    password: guest
    protocol: http        # Options: http, https

Required: RabbitMQ 3.8+ with management plugin

Setup:

rabbitmq-plugins enable rabbitmq_management

Metrics Collected:

  • Queue statistics
  • Message rates
  • Consumer counts
  • Node memory
  • Disk usage
  • Connection counts

Docker Plugin

Monitor Docker containers and resources.

plugins:
  docker:
    enabled: true
    socket: /var/run/docker.sock

Required: Docker 20.10+

Permissions:

# Add statusradar user to docker group
usermod -aG docker root

Metrics Collected:

  • Container count (running/stopped)
  • CPU usage per container
  • Memory usage per container
  • Network I/O
  • Block I/O
  • Container states

Elasticsearch Plugin

Monitor Elasticsearch search engine.

plugins:
  elasticsearch:
    enabled: true
    host: localhost
    port: 9200
    protocol: http        # Options: http, https
    username: ''          # Optional: For auth
    password: ''          # Optional: For auth

Required: Elasticsearch 7.0+

Metrics Collected:

  • Cluster health
  • Node statistics
  • Index statistics
  • JVM metrics
  • Thread pool
  • Query performance

Meilisearch Plugin

Monitor Meilisearch search engine.

plugins:
  meilisearch:
    enabled: true
    host: localhost
    port: 7700
    protocol: http
    api_key: ''           # Optional: Master key

Required: Meilisearch 1.0+ with metrics enabled

Meilisearch Startup:

meilisearch --experimental-enable-metrics
# Or set environment variable
export MEILI_EXPERIMENTAL_ENABLE_METRICS=true

Metrics Collected:

  • HTTP request count
  • Response times
  • Database size
  • Index count
  • Document count
  • Search queue size

Varnish Plugin

Monitor Varnish HTTP cache.

plugins:
  varnish:
    enabled: true
    varnishstat_path: /usr/bin/varnishstat  # Optional

Required: Varnish 6.0+

Permissions:

# Ensure agent can read varnish stats
usermod -aG varnish root

Metrics Collected:

  • Cache hits/misses
  • Backend connections
  • Client connections
  • Object statistics
  • Thread statistics

HAProxy Plugin

Monitor HAProxy load balancer.

plugins:
  haproxy:
    enabled: true
    stats_url: http://localhost:8081/stats;csv
    username: ''          # Optional: Stats auth
    password: ''          # Optional: Stats auth

Required: HAProxy 2.0+

HAProxy Configuration:

listen stats
    bind *:8081
    stats enable
    stats uri /stats
    stats refresh 30s

Metrics Collected:

  • Frontend/backend statistics
  • Session rates
  • Queue lengths
  • Response times
  • Server status

VictoriaMetrics Plugin

Monitor VictoriaMetrics time-series database.

plugins:
  victoriametrics:
    enabled: true
    url: http://localhost:8428

Required: VictoriaMetrics 1.80+

Metrics Collected:

  • Active series
  • Ingestion rate
  • Query performance
  • Storage size
  • Memory usage
  • Uptime

Environment Variables

All configuration options can be overridden using environment variables:

# API Configuration
export STATUSRADAR_API_URL="https://api.statusradar.dev"
export STATUSRADAR_TOKEN="your-token-here"

# Agent Configuration
export STATUSRADAR_HOSTNAME="custom-hostname"
export STATUSRADAR_INTERVAL="300"
export STATUSRADAR_TIMEOUT="30"

# Plugin-specific
export REDIS_HOST="localhost"
export REDIS_PORT="6379"
export REDIS_PASSWORD="secret"

export MYSQL_HOST="localhost"
export MYSQL_PORT="3306"
export MYSQL_USER="monitor"
export MYSQL_PASSWORD="secret"

export POSTGRESQL_HOST="localhost"
export POSTGRESQL_PORT="5432"
export POSTGRESQL_USER="postgres"
export POSTGRESQL_PASSWORD="secret"
export POSTGRESQL_DATABASE="postgres"

export NGINX_STATUS_URL="http://127.0.0.1/nginx_status"
export APACHE_STATUS_URL="http://127.0.0.1/server-status?auto"
export PHP_FPM_STATUS_URL="http://127.0.0.1:8080/status?json"

export MEMCACHED_HOST="localhost"
export MEMCACHED_PORT="11211"

export MONGODB_HOST="localhost"
export MONGODB_PORT="27017"

export RABBITMQ_HOST="localhost"
export RABBITMQ_PORT="15672"
export RABBITMQ_USERNAME="guest"
export RABBITMQ_PASSWORD="guest"

export DOCKER_SOCKET="/var/run/docker.sock"

Configuration Examples

Minimal Configuration

api:
  url: https://api.statusradar.dev
  token: your-token-here

agent:
  interval: 300

Production Web Server

api:
  url: https://api.statusradar.dev
  token: your-token-here

agent:
  hostname: production-web-01
  interval: 300
  timeout: 30

plugins:
  nginx:
    enabled: true
    status_url: http://127.0.0.1/nginx_status

  php_fpm:
    enabled: true
    status_url: http://127.0.0.1:9000/status?json

  redis:
    enabled: true
    host: localhost
    port: 6379

  mysql:
    enabled: true
    host: localhost
    port: 3306
    user: monitor
    password: secret

Database Server

api:
  url: https://api.statusradar.dev
  token: your-token-here

agent:
  hostname: production-db-01
  interval: 300

plugins:
  postgresql:
    enabled: true
    host: localhost
    port: 5432
    user: monitor
    password: secret
    database: postgres

  redis:
    enabled: true
    host: localhost
    port: 6379

Container Host

api:
  url: https://api.statusradar.dev
  token: your-token-here

agent:
  hostname: docker-host-01
  interval: 300

plugins:
  docker:
    enabled: true
    socket: /var/run/docker.sock

  nginx:
    enabled: true
    status_url: http://127.0.0.1/nginx_status

Best Practices

Security

  1. Protect Configuration File:

    chmod 600 /opt/statusradar/config/agent.yaml
    chown root:root /opt/statusradar/config/agent.yaml
  2. Use Read-Only Database Users:

    • Create dedicated monitoring users with minimal permissions
    • Never use root/admin accounts
  3. Restrict Plugin Access:

    • Use localhost/127.0.0.1 for local services
    • Configure firewalls for remote services
    • Use SSL/TLS when available

Performance

  1. Adjust Collection Interval:

    • Production: 300 seconds (5 minutes)
    • Development: 600 seconds (10 minutes)
    • Don't go below 60 seconds unless necessary
  2. Enable Only Needed Plugins:

    • Disable unused plugins to reduce overhead
    • Each plugin adds ~5-10MB RAM
  3. Monitor Agent Resources:

    systemctl status statusradar-agent
    journalctl -u statusradar-agent -f

Reliability

  1. Test Configuration:

    # Test before restarting
    python3 /opt/statusradar/statusradar-agent.py --test
  2. Use Systemd:

    • Agent restarts automatically on failure
    • Starts on boot
    • Proper logging
  3. Monitor Agent Health:

    • Check dashboard for last update time
    • Set up alerts for agent offline

Reloading Configuration

After changing the configuration, restart the agent:

sudo systemctl restart statusradar-agent

Check if changes applied:

sudo journalctl -u statusradar-agent -n 50 --no-pager

Next Steps