-
Notifications
You must be signed in to change notification settings - Fork 0
Clustering
Argus supports single-process and clustered (multi-process) deployments. The
cluster label keeps them apart and is the only thing you must set per process.
One AutoShardedBot, one Argus, one endpoint exposing all shards. cluster_id
optional (defaults to default).
Argus(bot)Run one Argus per process, each with a distinct cluster_id and port:
Argus(bot, cluster_id="0", port=9191) # process 0, shards 0..n
Argus(bot, cluster_id="1", port=9192) # process 1, shards n+1..mState gauges carry the distinct cluster label; every counter and the duration
histogram carry it too, so per-cluster breakdowns work directly:
sum by (cluster) (rate(discord_interactions_total[5m]))
sum by (cluster) (discord_guilds)
Counter rates aggregate across the fleet by simply dropping the by (cluster).
List every process; do not also set a cluster target label, or Prometheus
renames Argus's own cluster label to exported_cluster to avoid the clash:
scrape_configs:
- job_name: argus
static_configs:
- targets:
- "host.docker.internal:9191"
- "host.docker.internal:9192"examples/clustered_bot.py shows the per-process pattern driven by env vars
(CLUSTER_ID, ARGUS_PORT, SHARD_IDS, SHARD_COUNT).
discord_shard_latency_seconds{shard} and discord_shard_up{shard} are
per-shard; shard ids are globally unique across a clustered deploy (each process
owns a disjoint range), so they need no cluster qualifier to disambiguate.