Skip to main content

Monitoring Tools

Tools for monitoring and analyzing Fediverse instances.

Instance Directories​

FediDB​

Fediverse statistics and analytics.

PropertyValue
Websitefedidb.org
FeaturesStats, software tracking
DataUser counts, posts, growth

Fediverse Observer​

Network statistics.

PropertyValue
Websitefediverse.observer
FeaturesUptime, user counts
CoverageMajor platforms

instances.social​

Mastodon instance directory.

PropertyValue
Websiteinstances.social
FeaturesDiscovery, filtering
FocusMastodon instances

Server Monitoring​

UptimeRobot​

Basic uptime monitoring.

PropertyValue
Websiteuptimerobot.com
Free tier50 monitors
ChecksHTTP, keyword

Setup for Fediverse:

Monitor: HTTP(s)
URL: https://your-instance.example/api/v1/instance
Keyword: "uri"

Prometheus + Grafana​

Advanced metrics collection.

Mastodon metrics:

# prometheus.yml
scrape_configs:
- job_name: 'mastodon'
static_configs:
- targets: ['localhost:9090']

Key metrics:

  • Active users
  • Queue depth
  • Response times
  • Error rates

Health Checks​

Endpoint monitoring:

# Check instance health
curl -s https://instance.example/api/v1/instance | jq '.stats'

# Check Sidekiq (Mastodon)
curl -s https://instance.example/api/v1/instance | jq '.stats.status'

Federation Monitoring​

Federation Status​

Check federation health:

# Test outgoing federation
curl -X POST https://your-instance.example/api/v1/statuses \
-H "Authorization: Bearer $TOKEN" \
-d "status=Federation test $(date)"

# Monitor delivery queue (Mastodon)
RAILS_ENV=production bundle exec rails mastodon:stats

Blocked Instances​

Track moderation actions:

# Get domain blocks
curl https://instance.example/api/v1/instance/domain_blocks

Queue Monitoring​

Sidekiq (Ruby platforms)​

# Check queue status
require 'sidekiq/api'

stats = Sidekiq::Stats.new
puts "Processed: #{stats.processed}"
puts "Failed: #{stats.failed}"
puts "Queued: #{stats.enqueued}"

Oban (Elixir platforms)​

# Pleroma/Akkoma queue status
Oban.stats()

Log Analysis​

Common Patterns​

Signature failures:

grep "signature" /var/log/mastodon/web.log | grep -i "fail\|error"

Federation errors:

grep "delivery" /var/log/mastodon/sidekiq.log | grep "error"

Log Aggregation​

Using Loki + Grafana:

# promtail config
scrape_configs:
- job_name: mastodon
static_configs:
- targets:
- localhost
labels:
job: mastodon
__path__: /var/log/mastodon/*.log

Performance Tools​

Database Monitoring​

PostgreSQL queries:

-- Active connections
SELECT count(*) FROM pg_stat_activity;

-- Long-running queries
SELECT pid, now() - pg_stat_activity.query_start AS duration, query
FROM pg_stat_activity
WHERE state = 'active' AND now() - pg_stat_activity.query_start > interval '5 seconds';

-- Table sizes
SELECT relname, pg_size_pretty(pg_total_relation_size(relid))
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC;

Redis Monitoring​

# Memory usage
redis-cli INFO memory

# Key count
redis-cli DBSIZE

# Slow log
redis-cli SLOWLOG GET 10

Alerting​

PagerDuty / Opsgenie​

Set up alerts for:

  • Instance down
  • High error rate
  • Queue backup
  • Database issues

Example Alert Rules​

# Prometheus alert rules
groups:
- name: fediverse
rules:
- alert: InstanceDown
expr: up{job="mastodon"} == 0
for: 5m
annotations:
summary: "Instance is down"

- alert: QueueBacklog
expr: sidekiq_queue_size > 10000
for: 10m
annotations:
summary: "Sidekiq queue is backing up"

Dashboard Example​

Grafana dashboard panels:

PanelQueryPurpose
Active Usersmastodon_active_usersUser engagement
Posts/hourrate(mastodon_statuses_total[1h])Activity
Response Timehttp_request_duration_secondsPerformance
Queue Depthsidekiq_queue_sizeProcessing
Error Raterate(http_requests_total{status=~"5.."}[5m])Reliability

See Also​