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