Client that is run along side an Ethereum consensus client and collects canonical data via the consensus client's Beacon API. You must run your own consensus client and this cannon will connect to it via the consensus client's http server.
This cannon can output events to various sinks and it is not a hard requirement to run the Xatu server.
Cannon requires a config file.
Usage:
xatu cannon [flags]
Flags:
--config string config file (default is cannon.yaml) (default "cannon.yaml")
-h, --help help for cannon
- Ethereum consensus client with exposed http server.
- Server running with the Coordinator service enabled.
Cannon requires a single yaml
config file. An example file can be found here
Name | Type | Default | Description |
---|---|---|---|
logging | string | warn |
Log level (panic , fatal , warn , info , debug , trace ) |
metricsAddr | string | :9090 |
The address the metrics server will listen on |
pprofAddr | string | The address the pprof server will listen on. When ommited, the pprof server will not be started | |
name | string | Unique name of the cannon | |
labels | object | A key value map of labels to append to every cannon event | |
ethereum.beaconNodeAddress | string | Ethereum consensus client http server endpoint | |
ethereum.beaconNodeAddress | object | A key value map of headers | |
ethereum.overrideNetworkName | string | Override the network name | |
ethereum.blockCacheSize | int | 1000 |
The maximum number of blocks to cache |
ethereum.blockCacheTtl | string | 1h |
The maximum duration to cache blocks |
ethereum.blockPreloadWorkers | int | 5 |
The number of workers to use for preloading blocks |
ethereum.blockPreloadQueueSize | int | 5000 |
The maximum number of blocks to queue for preloading |
coordinator.address | string | The address of the Xatu server | |
coordinator.tls | bool | Server requires TLS | |
coordinator.headers | object | A key value map of headers to append to requests | |
derivers.attesterSlashing.enabled | bool | true |
Enable the attester slashing deriver |
derivers.attesterSlashing.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.blsToExecutionChange.enabled | bool | true |
Enable the BLS to execution change deriver |
derivers.blsToExecutionChange.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.deposit.enabled | bool | true |
Enable the deposit deriver |
derivers.deposit.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.withdrawal.enabled | bool | true |
Enable the withdrawal deriver |
derivers.withdrawal.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.executionTransaction.enabled | bool | true |
Enable the execution transaction deriver |
derivers.executionTransaction.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.proposerSlashing.enabled | bool | true |
Enable the proposer slashing deriver |
derivers.proposerSlashing.headSlotLag | int | 5 |
The number of slots to lag behind the head |
derivers.voluntaryExit.enabled | bool | true |
Enable the voluntary exit deriver |
derivers.voluntaryExit.headSlotLag | int | 5 |
The number of slots to lag behind the head |
ntpServer | string | pool.ntp.org |
NTP server to calculate clock drift for events |
outputs | array | List of outputs for the cannon to send data to | |
outputs[].name | string | Name of the output | |
outputs[].type | string | Type of output (xatu , http , kafka , stdout ) |
|
outputs[].config | object | Output type configuration xatu /http /kafka |
Output configuration to send cannon events to a Xatu server.
Name | Type | Default | Description |
---|---|---|---|
outputs[].config.address | string | The address of the server receiving events | |
outputs[].config.tls | bool | Server requires TLS | |
outputs[].config.headers | object | A key value map of headers to append to requests | |
outputs[].config.maxQueueSize | int | 51200 |
The maximum queue size to buffer events for delayed processing. If the queue gets full it drops the events |
outputs[].config.batchTimeout | string | 5s |
The maximum duration for constructing a batch. Processor forcefully sends available events when timeout is reached |
outputs[].config.exportTimeout | string | 30s |
The maximum duration for exporting events. If the timeout is reached, the export will be cancelled |
outputs[].config.maxExportBatchSize | int | 512 |
MaxExportBatchSize is the maximum number of events to process in a single batch. If there are more than one batch worth of events then it processes multiple batches of events one batch after the other without any delay |
Output configuration to send cannon events to a http server.
Name | Type | Default | Description |
---|---|---|---|
outputs[].config.address | string | The address of the server receiving events | |
outputs[].config.headers | object | A key value map of headers to append to requests | |
outputs[].config.maxQueueSize | int | 51200 |
The maximum queue size to buffer events for delayed processing. If the queue gets full it drops the events |
outputs[].config.batchTimeout | string | 5s |
The maximum duration for constructing a batch. Processor forcefully sends available events when timeout is reached |
outputs[].config.exportTimeout | string | 30s |
The maximum duration for exporting events. If the timeout is reached, the export will be cancelled |
outputs[].config.maxExportBatchSize | int | 512 |
MaxExportBatchSize is the maximum number of events to process in a single batch. If there are more than one batch worth of events then it processes multiple batches of events one batch after the other without any delay |
Output configuration to send sentry events to a kafka server.
Name | Type | Default | Allowed Values | Description |
---|---|---|---|---|
outputs[].config.brokers | string | Comma delimited list of brokers. Eg: localhost:19091,localhost:19092 |
||
outputs[].config.topic | string | Name of the topic. | ||
outputs[].config.flushFrequency | string | 3s |
The maximum time a single batch can wait before a flush. Producer flushes the batch when the limit is reached. | |
outputs[].config.flushMessages | int | 500 |
The maximum number of events in a single batch before a flush. Producer flushes the batch when the limit is reached. | |
outputs[].config.flushBytes | int | 1000000 |
The maximum size (in bytes) of a single batch before a flush. Producer flushes the batch when the limit is reached. | |
outputs[].config.maxRetries | int | 3 |
The maximum retries allowed for a single batch delivery. The batch would be dropped, if the producer fails to flush with-in this limit. | |
outputs[].config.compression | string | none |
none gzip snappy lz4 zstd |
Compression to use. |
outputs[].config.requiredAcks | string | leader |
none leader all |
Number of ack's required for a succesful batch delivery. |
outputs[].config.partitioning | string | none |
none random |
Paritioning to use for the distribution of messages across the partitions. |
name: xatu-cannon
coordinator:
address: http://localhost:8080
ethereum:
beaconNodeAddress: http://localhost:5052
outputs:
- name: standard-out
type: stdout
name: xatu-cannon
coordinator:
address: http://localhost:8080
ethereum:
beaconNodeAddress: http://localhost:5052
outputs:
- name: xatu-output
type: xatu
config:
address: localhost:8080
name: xatu-cannon
coordinator:
address: http://localhost:8080
ethereum:
beaconNodeAddress: http://localhost:5052
outputs:
- name: http-basic-auth
type: http
config:
address: http://localhost:8080
headers:
authorization: "Basic Someb64Value"
name: example-instance-004
ethereum:
beaconNodeAddress: http://localhost:5052
outputs:
- name: kafka-sink
type: kafka
config:
brokers: localhost:19092
topic: events
logging: "debug"
metricsAddr: ":9090"
pprofAddr: ":6060"
name: xatu-cannon
labels:
ethpandaops: rocks
ntpServer: time.google.com
coordinator:
address: http://localhost:8080
ethereum:
beaconNodeAddress: http://localhost:5052
outputs:
- name: log
type: stdout
- name: xatu-server
type: xatu
config:
address: localhost:8080
headers:
authorization: Someb64Value
maxQueueSize: 51200
batchTimeout: 5s
exportTimeout: 30s
maxExportBatchSize: 512
- name: kafka-sink
type: kafka
config:
brokers: localhost:19092
topic: events
# docker
docker run -d --name xatu-cannon -v $HOST_DIR_CHANGE_ME/config.yaml:/opt/xatu/config.yaml -p 9090:9090 -it ethpandaops/xatu:latest cannon --config /opt/xatu/config.yaml
# build
go build -o dist/xatu main.go
./dist/xatu cannon --config cannon.yaml
# dev
go run main.go cannon --config cannon.yaml