Skip to content

Main issue with prometheus metrics endpoint ports #51

@phoenixanand

Description

@phoenixanand

I recently deployed Arc Localnet on an AWS EC2 instance and ran into several issues that I believe affect anyone deploying on a remote Linux server (not Docker Desktop). I've documented them all and would love to contribute fixes.

Prometheus Scrape Targets Point to Wrong Ports

Problem: The default prometheus.yml targets ports 6060-6065 for validator metrics, but the actual Prometheus metrics endpoint is on port 9101 (and similar for other validators). All validator targets show health: down out of the box.

# Current - wrong
- targets: ['host.docker.internal:6060']

# Should be
- targets: ['host.docker.internal:9101']

Suggested Fix: Update prometheus.yml with the correct metrics ports that match the actual validator port mappings.


Monitoring Stack Not Started by make testnet

Problem: Grafana and Prometheus live in .quake/monitoring/compose.yaml but make testnet only starts .quake/localdev/compose.yaml. New users have no indication that monitoring needs to be started separately with a different command.
Suggested Fix: Either include monitoring in make testnet, or add a make monitoring target and document it clearly in the README.


Issues Found During Remote EC2 Deployment

1. Missing Directory Initialization Script

Problem: Docker bind mounts fail on first run because host directories don't exist.

Error: bind source path does not exist: .../blockscout/logs
Error: bind source path does not exist: .../blockscout/dets

Suggested Fix: Add a make setup or scripts/init.sh that pre-creates all required bind mount directories before make testnet.


2. Blockscout dets Directory Permission Error (Backend Crash)

Problem: The Blockscout backend crashes immediately on Linux because the ./dets/ directory doesn't have write permissions for the container user. This cascades into all PostgreSQL connections being dropped.

{file_error, "./dets/queue_storage", eacces}

Suggested Fix: Either create the directory with correct permissions in an init script, or add a user: override in the blockscout service in compose.yaml.


3. Hardcoded localhost in Frontend Environment

Problem: NEXT_PUBLIC_API_HOST=localhost and NEXT_PUBLIC_APP_HOST=localhost are hardcoded in the frontend config. This works on Docker Desktop (where localhost = the machine) but completely breaks on any remote server , the browser tries to call the user's own machine instead of the server.

# deployments/blockscout.yaml
NEXT_PUBLIC_API_HOST: localhost  # ❌ breaks on remote servers

Suggested Fix: Replace with a configurable environment variable, e.g.:

NEXT_PUBLIC_API_HOST: ${BLOCKSCOUT_HOST:-localhost}

Then document that remote deployments need to set BLOCKSCOUT_HOST=<server-ip>.


4. Monitoring Ports Bound to 127.0.0.1

Problem: Grafana is bound to 127.0.0.1:3000:3000 and cAdvisor to 127.0.0.1:8080:8080, making them inaccessible on remote servers even after opening AWS Security Group rules.
Suggested Fix: Change to 0.0.0.0:3000:3000 or document that users need to change this for remote access.


5. No Documentation for Remote/Cloud Deployment

Problem: The README and setup docs appear to assume Docker Desktop on a local machine. There is no guide for deploying on a remote Linux server (EC2, GCP, etc.).
Suggested Fix: Add a "Remote Deployment" section to the README covering:

  • Setting BLOCKSCOUT_HOST to the server's public IP
  • Running make setup before make testnet
  • Opening required ports in cloud security groups (80, 3000, 9090)
  • Starting the monitoring stack separately

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions