Skip to content

Monitoring

Couic’s statistics can be accessed in Prometheus format for monitoring purposes.

This section assumes that remote access to the Couic API has already been set up using a reverse proxy. For instructions on enabling remote access, see the Reverse Proxy section first.

Add a monitoring client

Add a new client to monitoring group:

command
couicctl clients add -n prometheus -g monitoring
output
┌─────────────┬────────────┬──────────────────────────────────────┐
│ Name        ┆ Group      ┆ Token                                │
╞═════════════╪════════════╪══════════════════════════════════════╡
│ prometheus  ┆ monitoring ┆ d6ac883a-8050-4408-bf1e-5b07e9965191 │
└─────────────┴────────────┴──────────────────────────────────────┘
For more details about client permissions see Authentication and Authorization.

Test using curl

Test using curl and couicctl token:

command
curl "https://couic.tld:2900/v1/metrics?format=prometheus" \
    -H "Authorization: Bearer d6ac883a-8050-4408-bf1e-5b07e9965191"
output
# HELP couic_drop_cidr_total Current number of CIDR dropped by couic.
# TYPE couic_drop_cidr_total gauge
couic_drop_cidr_total 3
# HELP couic_ignore_cidr_total Current number of CIDR ignored by couic.
# TYPE couic_ignore_cidr_total gauge
couic_ignore_cidr_total 0
# HELP couic_stats_rx_packets_total Current number of packets handled by XDP.
# TYPE couic_stats_rx_packets_total counter
couic_stats_rx_packets_total{action="XDP_ABORTED"} 0
couic_stats_rx_packets_total{action="XDP_DROP"} 29231
couic_stats_rx_packets_total{action="XDP_REDIRECT"} 0
couic_stats_rx_packets_total{action="XDP_PASS"} 586018
couic_stats_rx_packets_total{action="XDP_TX"} 0
# HELP couic_stats_rx_bytes_total Current number of bytes handled by XDP.
# TYPE couic_stats_rx_bytes_total counter
couic_stats_rx_bytes_total{action="XDP_ABORTED"} 0
couic_stats_rx_bytes_total{action="XDP_DROP"} 2360999
couic_stats_rx_bytes_total{action="XDP_REDIRECT"} 0
couic_stats_rx_bytes_total{action="XDP_PASS"} 46562369
couic_stats_rx_bytes_total{action="XDP_TX"} 0
# HELP couic_drop_tag_rx_packets_total Number of packets dropped per tag.
# TYPE couic_drop_tag_rx_packets_total counter
couic_drop_tag_rx_packets_total{tag="fail2ban-sshd"} 20981
# HELP couic_drop_tag_rx_bytes_total Number of bytes dropped per tag.
# TYPE couic_drop_tag_rx_bytes_total counter
couic_drop_tag_rx_bytes_total{tag="fail2ban-sshd"} 1714333
# HELP couic_ignore_tag_rx_packets_total Number of packets ignored per tag.
# TYPE couic_ignore_tag_rx_packets_total counter
# HELP couic_ignore_tag_rx_bytes_total Number of bytes ignored per tag.
# TYPE couic_ignore_tag_rx_bytes_total counter
# EOF

The /v1/metrics endpoint also supports JSON output (default):

command
curl "https://couic.tld:2900/v1/metrics" \
    -H "Authorization: Bearer d6ac883a-8050-4408-bf1e-5b07e9965191"
output
{
  "drop_cidr_count": 6,
  "ignore_cidr_count": 0,
  "xdp": {
    "XDP_REDIRECT": {
      "rx_packets": 0,
      "rx_bytes": 0
    },
    "XDP_ABORTED": {
      "rx_packets": 0,
      "rx_bytes": 0
    },
    "XDP_PASS": {
      "rx_packets": 575936,
      "rx_bytes": 45833797
    },
    "XDP_TX": {
      "rx_packets": 0,
      "rx_bytes": 0
    },
    "XDP_DROP": {
      "rx_packets": 29172,
      "rx_bytes": 2356733
    }
  },
  "drop_tags": {
    "tags": {
      "fail2ban-sshd": {
        "rx_packets": 20922,
        "rx_bytes": 1710067
      }
    }
  },
  "ignore_tags": {
    "tags": {}
  }
}

Configure Prometheus

This snippet can be used to configure Prometheus to pull the monitoring endpoint:

scrape_configs:
  - job_name: 'couic'
    scheme: https
    authorization:
      type: Bearer
      credentials: d6ac883a-8050-4408-bf1e-5b07e9965191
    metrics_path: "/v1/metrics"
    params:
      format: ["prometheus"]
    scrape_interval: 5s
    static_configs:
      - targets: ['couic.tld:2900']

Available Metrics

MetricTypeLabelsDescription
couic_drop_cidr_totalgauge-Number of CIDRs in drop list
couic_ignore_cidr_totalgauge-Number of CIDRs in ignore list
couic_stats_rx_packets_totalcounteractionPackets handled by XDP per action
couic_stats_rx_bytes_totalcounteractionBytes handled by XDP per action
couic_drop_tag_rx_packets_totalcountertagPackets dropped per tag
couic_drop_tag_rx_bytes_totalcountertagBytes dropped per tag
couic_ignore_tag_rx_packets_totalcountertagPackets ignored per tag
couic_ignore_tag_rx_bytes_totalcountertagBytes ignored per tag