mev-boost icon indicating copy to clipboard operation
mev-boost copied to clipboard

native log-to-file functionality

Open 0xste opened this issue 3 years ago • 1 comments

Relating to https://github.com/flashbots/mev-boost/pull/294#issuecomment-1271171387

If we wanted to go down a non-integrated "sidecar" implementation for adding prometheus metrics, we could explore tailing a log file and using a grok exporter, something like: github.com/fstab/grok_exporter

Given there's no maintained docker containers for this AFAICS, i have built a docker container for this here: https://github.com/0xSte/grok-exporter https://hub.docker.com/r/0xste/grok-exporter

Got a semi-functional configuration for this, exporting the following prometheus metrics

# HELP mev_boost_genesis_fork_version_info The fork version mev boost is using
# TYPE mev_boost_genesis_fork_version_info counter
mev_boost_genesis_fork_version_info{version="0x00001020"} 1
# HELP mev_boost_http_performance_bucket The response latency for the http tier
# TYPE mev_boost_http_performance_bucket histogram
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.05"} 317
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.1"} 327
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.15"} 341
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.2"} 341
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.25"} 341
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="0.5"} 341
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="1"} 341
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="2"} 343
mev_boost_http_performance_bucket_bucket{method="GET",status="200",le="+Inf"} 346
mev_boost_http_performance_bucket_sum{method="GET",status="200"} 15.885456450000001
mev_boost_http_performance_bucket_count{method="GET",status="200"} 346
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.05"} 1663
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.1"} 2879
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.15"} 4411
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.2"} 5356
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.25"} 5518
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="0.5"} 5559
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="1"} 5562
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="2"} 5564
mev_boost_http_performance_bucket_bucket{method="POST",status="200",le="+Inf"} 5564
mev_boost_http_performance_bucket_sum{method="POST",status="200"} 556.3413647959985
mev_boost_http_performance_bucket_count{method="POST",status="200"} 5564
# HELP mev_boost_http_requests_total The the number of http requests
# TYPE mev_boost_http_requests_total counter
mev_boost_http_requests_total{method="GET",path="//eth/v1/builder/status",status="301"} 3
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/3895630/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/header/<redacted>/<redacted>/<redacted>",status="200"} 1
mev_boost_http_requests_total{method="GET",path="/eth/v1/builder/status",status="200"} 319
mev_boost_http_requests_total{method="POST",path="/eth/v1/builder/blinded_blocks",status="200"} 20
mev_boost_http_requests_total{method="POST",path="/eth/v1/builder/blinded_blocks",status="400"} 2
mev_boost_http_requests_total{method="POST",path="/eth/v1/builder/validators",status="200"} 5544
mev_boost_http_requests_total{method="POST",path="/eth/v1/builder/validators",status="502"} 4
# HELP mev_boost_logged_errors_total The the number of errors in log files
# TYPE mev_boost_logged_errors_total counter
mev_boost_logged_errors_total 40
# HELP mev_boost_logged_warning_total The the number of warnings in log files
# TYPE mev_boost_logged_warning_total counter
mev_boost_logged_warning_total 2869
# HELP mev_boost_relay_count The the number of relays registered
# TYPE mev_boost_relay_count gauge
mev_boost_relay_count 3
# HELP mev_boost_relay_info The the number of relays registered
# TYPE mev_boost_relay_info counter
mev_boost_relay_info{host="bloxroute.max-profit.builder.goerli.blxrbdn.com",pubkey="<redacted>"} 1
mev_boost_relay_info{host="builder-relay-goerli.blocknative.com",pubkey="<redacted>"} 1
mev_boost_relay_info{host="builder-relay-goerli.flashbots.net",pubkey=""} 1
# HELP mev_boost_server_info The host and port the mev boost server is running on
# TYPE mev_boost_server_info counter
mev_boost_server_info{host="0.0.0.0",port="18550"} 1
# HELP mev_boost_version_info the version of mev-boost
# TYPE mev_boost_version_info counter
mev_boost_version_info{version="0.8.2"} 1
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 0
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

Note: I've redacted metric label values which showed identifiable info & only included metrics from the grok config

0xste avatar Oct 07 '22 14:10 0xste

here's my initial configuration for this

matchers.txt partials.txt

global:
  config_version: 3
input:
  type: file
  paths:
    - ./mev.log
  readall: true
  fail_on_missing_logfile: true
imports:
  - type: grok_patterns
    dir: ./patterns
metrics:
  - type: counter
    name: mev_boost_version_info
    help: the version of mev-boost
    match: '%{mev_boost_version}'
    labels:
      version: '{{.version}}'
  - type: counter
    name: mev_boost_server_info
    help: The host and port the mev boost server is running on
    match: '%{mev_boost_server}'
    labels:
      host: '{{.host}}'
      port: '{{.port}}'
  - type: counter
    name: mev_boost_genesis_fork_version_info
    help: The fork version mev boost is using
    match: '%{mev_boost_fork_version}'
    labels:
      version: '{{.version}}'
  - type: gauge
    name: mev_boost_relay_count
    help: The the number of relays registered
    match: '%{mev_boost_relay_count}'
    value: '{{.count}}'
  - type: counter
    name: mev_boost_relay_info
    help: The the number of relays registered
    match: '%{mev_boost_relay_info}'
    labels:
      pubkey: '{{.pubkey}}'
      host: '{{.host}}'
  - type: counter
    name: mev_boost_http_requests_total
    help: The the number of http requests
    match: '%{mev_boost_http_requests}'
    labels:
      status: '{{.status}}'
      path: '{{.path}}'
      method: '{{.method}}'
  - type: histogram
    name: mev_boost_http_performance_bucket
    help: The response latency for the http tier
    match: '%{mev_boost_http_latency}'
    value: '{{.duration}}'
    buckets: [0.05, 0.1, 0.15, 0.2, 0.25, 0.5, 1, 2]
    labels:
      method: '{{.method}}'
      status: '{{.status}}'
  - type: counter
    name: mev_boost_logged_errors_total
    help: The the number of errors in log files
    match: '%{mev_boost_log_errors}'
  - type: counter
    name: mev_boost_logged_warning_total
    help: The the number of warnings in log files
    match: '%{mev_boost_log_warnings}'

server:
  port: 9144

0xste avatar Oct 07 '22 15:10 0xste