Skip to main content

Use metrics to monitor performance

Enable the Prometheus monitoring and alerting service for Web3Signer metrics using the --metrics-enabled option.

Web3Signer provides metrics for secp256k1 and BLS12-381 key types.

Install Prometheus

To use Prometheus with Web3Signer, install the Prometheus main component. On MacOS, install with Homebrew:

brew install prometheus

Setting up and running Prometheus with Web3Signer

To configure Prometheus and run with Web3Signer:

  1. Configure Prometheus to poll Web3Signer. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file:

    Example configuration
    global:
    scrape_interval: 15s
    scrape_configs:
    - job_name: "prometheus"
    static_configs:
    - targets: ["localhost:9090"]
    - job_name: "web3signer-dev"
    scrape_timeout: 10s
    metrics_path: /metrics
    scheme: http
    static_configs:
    - targets: ["localhost:9001"]
  2. Start Teku by specifying the Web3Signer details.

  3. Start Web3Signer with the --metrics-enabled option.

    web3signer --key-store-path=/Users/me/keyFiles/ --metrics-enabled

    The HTTP, SIGNING, JVM, and PROCESS metrics categories are enabled by default. Use the --metrics-category command line option to update the available categories.

  4. In another terminal, run Prometheus specifying the prometheus.yml file:

    prometheus --config.file=prometheus.yml
  5. View the Prometheus graphical interface.

Run Prometheus with Web3Signer in push mode

The --metrics-enabled option enables Prometheus polling of Besu, but sometimes metrics are hard to poll (for example, when running inside Docker containers with varying IP addresses). To enable Besu to push metrics to a Prometheus push gateway, use the --metrics-push-enabled option.

To configure Prometheus and run with Web3Signer pushing to a push gateway:

  1. Configure Prometheus to read from a push gateway. For example, add the following YAML fragment to the scrape_configs block of the prometheus.yml file:

    - job_name: push-gateway
    metrics_path: /metrics
    scheme: http
    static_configs:
    - targets:
    - localhost:9091
  2. Start the push gateway. You can deploy the push gateway using the Docker image:

    docker pull prom/pushgateway
    docker run -d -p 9091:9091 prom/pushgateway
  3. Start Web3Signer specifying options:

  4. In another terminal, run Prometheus specifying the prometheus.yml file:

    prometheus --config.file=prometheus.yml
  5. View the Prometheus graphical interface.

View Prometheus graphical interface

  1. Open a web browser to http://localhost:9090 to view the Prometheus graphical interface.

  2. Choose Graph from the menu bar and click the Console tab below.

  3. From the Insert metric at cursor drop-down, select a metric and click Execute. The values display.

The following Web3Signer metrics are available.

HTTP API metrics:

NameDefinition
<keytype>_malformed_request_countNumber of requests received which had illegally formatted body.
<keytype>_signing_durationDuration of a signing event.
<keytype>_missing_identifier_countNumber of signing requests for which no keys were available.
signers_loaded_countTotal number of SECP256k1 and BLS12-381 keys loaded.
signing_private_key_retrieval_timeTime taken to retrieve BLS signing keys.

Eth2 Slashing protection metrics:

NameDefinition
permitted_signingsThe number of slashing checks which have reported 'safe to sign'.
prevented_signingsThe number of prevented signings due to violation of slashing conditions.

Process metrics:

NameDefinition
process_releaseThe number of the release version running.

Visualize collected data

Use Grafana to visualize the collected data. See the sample Web3Signer Grafana dashboard.