@aztec/telemetry-client 0.0.0-test.0 → 0.0.1-commit.21caa21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dest/attributes.d.ts +24 -9
  2. package/dest/attributes.d.ts.map +1 -1
  3. package/dest/attributes.js +17 -8
  4. package/dest/bench.d.ts +4 -1
  5. package/dest/bench.d.ts.map +1 -1
  6. package/dest/bench.js +7 -0
  7. package/dest/config.d.ts +7 -2
  8. package/dest/config.d.ts.map +1 -1
  9. package/dest/config.js +29 -1
  10. package/dest/index.d.ts +2 -1
  11. package/dest/index.d.ts.map +1 -1
  12. package/dest/index.js +1 -0
  13. package/dest/l1_metrics.d.ts +17 -0
  14. package/dest/l1_metrics.d.ts.map +1 -0
  15. package/dest/l1_metrics.js +70 -0
  16. package/dest/lmdb_metrics.d.ts +4 -2
  17. package/dest/lmdb_metrics.d.ts.map +1 -1
  18. package/dest/lmdb_metrics.js +8 -0
  19. package/dest/metrics.d.ts +98 -13
  20. package/dest/metrics.d.ts.map +1 -1
  21. package/dest/metrics.js +98 -13
  22. package/dest/nodejs_metrics_monitor.d.ts +21 -0
  23. package/dest/nodejs_metrics_monitor.d.ts.map +1 -0
  24. package/dest/{event_loop_monitor.js → nodejs_metrics_monitor.js} +55 -12
  25. package/dest/noop.d.ts +4 -2
  26. package/dest/noop.d.ts.map +1 -1
  27. package/dest/noop.js +2 -0
  28. package/dest/otel.d.ts +9 -5
  29. package/dest/otel.d.ts.map +1 -1
  30. package/dest/otel.js +93 -19
  31. package/dest/otel_filter_metric_exporter.d.ts +12 -4
  32. package/dest/otel_filter_metric_exporter.d.ts.map +1 -1
  33. package/dest/otel_filter_metric_exporter.js +38 -4
  34. package/dest/otel_logger_provider.d.ts +1 -1
  35. package/dest/otel_propagation.d.ts +1 -1
  36. package/dest/otel_resource.d.ts +1 -1
  37. package/dest/otel_resource.d.ts.map +1 -1
  38. package/dest/otel_resource.js +31 -2
  39. package/dest/prom_otel_adapter.d.ts +58 -9
  40. package/dest/prom_otel_adapter.d.ts.map +1 -1
  41. package/dest/prom_otel_adapter.js +143 -43
  42. package/dest/start.d.ts +1 -1
  43. package/dest/start.js +4 -4
  44. package/dest/telemetry.d.ts +29 -12
  45. package/dest/telemetry.d.ts.map +1 -1
  46. package/dest/telemetry.js +1 -1
  47. package/dest/vendor/attributes.d.ts +1 -1
  48. package/dest/vendor/otel-pino-stream.d.ts +1 -2
  49. package/dest/vendor/otel-pino-stream.d.ts.map +1 -1
  50. package/dest/vendor/otel-pino-stream.js +2 -2
  51. package/dest/with_tracer.d.ts +1 -1
  52. package/dest/with_tracer.d.ts.map +1 -1
  53. package/dest/wrappers/fetch.d.ts +2 -2
  54. package/dest/wrappers/fetch.d.ts.map +1 -1
  55. package/dest/wrappers/fetch.js +7 -5
  56. package/dest/wrappers/index.d.ts +1 -1
  57. package/dest/wrappers/json_rpc_server.d.ts +2 -2
  58. package/dest/wrappers/json_rpc_server.d.ts.map +1 -1
  59. package/dest/wrappers/l2_block_stream.d.ts +2 -2
  60. package/dest/wrappers/l2_block_stream.d.ts.map +1 -1
  61. package/package.json +19 -15
  62. package/src/attributes.ts +29 -11
  63. package/src/bench.ts +15 -5
  64. package/src/config.ts +54 -2
  65. package/src/index.ts +1 -0
  66. package/src/l1_metrics.ts +80 -0
  67. package/src/lmdb_metrics.ts +24 -3
  68. package/src/metrics.ts +118 -12
  69. package/src/{event_loop_monitor.ts → nodejs_metrics_monitor.ts} +59 -10
  70. package/src/noop.ts +4 -1
  71. package/src/otel.ts +80 -21
  72. package/src/otel_filter_metric_exporter.ts +47 -5
  73. package/src/otel_resource.ts +40 -2
  74. package/src/prom_otel_adapter.ts +191 -59
  75. package/src/start.ts +4 -4
  76. package/src/telemetry.ts +50 -12
  77. package/src/vendor/otel-pino-stream.ts +1 -4
  78. package/src/wrappers/fetch.ts +24 -31
  79. package/src/wrappers/json_rpc_server.ts +1 -1
  80. package/src/wrappers/l2_block_stream.ts +1 -1
  81. package/dest/event_loop_monitor.d.ts +0 -18
  82. package/dest/event_loop_monitor.d.ts.map +0 -1
package/src/attributes.ts CHANGED
@@ -14,34 +14,35 @@
14
14
  * @see {@link https://opentelemetry.io/docs/specs/semconv/general/attribute-naming/}
15
15
  */
16
16
 
17
+ /** The host of an HTTP request */
18
+ export const HTTP_REQUEST_HOST = 'http.header.request.host';
19
+ export const HTTP_RESPONSE_STATUS_CODE = 'http.response.status_code';
20
+
17
21
  /** The Aztec network identifier */
18
22
  export const NETWORK_NAME = 'aztec.network_name';
19
23
 
24
+ export const AZTEC_NODE_ROLE = 'aztec.node_role';
25
+ export const AZTEC_ROLLUP_VERSION = 'aztec.rollup_version';
26
+ export const AZTEC_ROLLUP_ADDRESS = 'aztec.rollup_address';
27
+ export const AZTEC_REGISTRY_ADDRESS = 'aztec.registry_address';
28
+
20
29
  /**
21
30
  * The name of the protocol circuit being run (e.g. public-kernel-setup or base-rollup)
22
31
  * @see {@link @aztec/stdlib/stats:CircuitName}
23
32
  */
24
33
  export const PROTOCOL_CIRCUIT_NAME = 'aztec.circuit.protocol_circuit_name';
25
34
 
26
- /**
27
- * The type of protocol circuit being run: server or client
28
- */
29
- export const PROTOCOL_CIRCUIT_TYPE = 'aztec.circuit.protocol_circuit_type';
30
-
31
35
  /**
32
36
  * For an app circuit, the contract:function being run (e.g. Token:transfer)
33
37
  */
34
38
  export const APP_CIRCUIT_NAME = 'aztec.circuit.app_circuit_name';
35
39
 
36
- /**
37
- * The type of app circuit being run: server or client
38
- */
39
- export const APP_CIRCUIT_TYPE = 'aztec.circuit.app_circuit_type';
40
-
41
40
  /** The block archive */
42
41
  export const BLOCK_ARCHIVE = 'aztec.block.archive';
43
42
  /** The block number */
44
43
  export const BLOCK_NUMBER = 'aztec.block.number';
44
+ /** The L2 block hash */
45
+ export const BLOCK_HASH = 'aztec.block.hash';
45
46
  /** The slot number */
46
47
  export const SLOT_NUMBER = 'aztec.slot.number';
47
48
  /** The parent's block number */
@@ -70,6 +71,8 @@ export const ERROR_TYPE = 'aztec.error_type';
70
71
  export const L1_TX_TYPE = 'aztec.l1.tx_type';
71
72
  /** The L1 address of the entity that sent a transaction to L1 */
72
73
  export const L1_SENDER = 'aztec.l1.sender';
74
+ /** The L1 address receiving rewards */
75
+ export const COINBASE = 'aztec.coinbase';
73
76
  /** The phase of the transaction */
74
77
  export const TX_PHASE_NAME = 'aztec.tx.phase_name';
75
78
  /** The reason for disconnecting a peer */
@@ -78,16 +81,20 @@ export const P2P_GOODBYE_REASON = 'aztec.p2p.goodbye.reason';
78
81
  export const PROVING_JOB_TYPE = 'aztec.proving.job_type';
79
82
  /** The proving job id */
80
83
  export const PROVING_JOB_ID = 'aztec.proving.job_id';
81
-
84
+ /** Merkle tree name */
82
85
  export const MERKLE_TREE_NAME = 'aztec.merkle_tree.name';
83
86
  /** The prover-id in a root rollup proof. */
84
87
  export const ROLLUP_PROVER_ID = 'aztec.rollup.prover_id';
85
88
  /** Whether the proof submission was timed out (delayed more than 20 min) */
86
89
  export const PROOF_TIMED_OUT = 'aztec.proof.timed_out';
90
+ /** Status of the validator (eg proposer, in-committee, none) */
91
+ export const VALIDATOR_STATUS = 'aztec.validator_status';
87
92
 
88
93
  export const P2P_ID = 'aztec.p2p.id';
89
94
  export const P2P_REQ_RESP_PROTOCOL = 'aztec.p2p.req_resp.protocol';
90
95
  export const P2P_REQ_RESP_BATCH_REQUESTS_COUNT = 'aztec.p2p.req_resp.batch_requests_count';
96
+ /** The state of a peer (Healthy, Disconnect, Banned) */
97
+ export const P2P_PEER_SCORE_STATE = 'aztec.p2p.peer_score_state';
91
98
  export const POOL_NAME = 'aztec.pool.name';
92
99
 
93
100
  export const SEQUENCER_STATE = 'aztec.sequencer.state';
@@ -96,6 +103,7 @@ export const SIMULATOR_PHASE = 'aztec.simulator.phase';
96
103
  export const TARGET_ADDRESS = 'aztec.address.target';
97
104
  export const SENDER_ADDRESS = 'aztec.address.sender';
98
105
  export const MANA_USED = 'aztec.mana.used';
106
+ export const TOTAL_INSTRUCTIONS = 'aztec.total_instructions';
99
107
 
100
108
  /** Whether a sync process is the initial run, which is usually slower than iterative ones. */
101
109
  export const INITIAL_SYNC = 'aztec.initial_sync';
@@ -113,3 +121,13 @@ export const GAS_DIMENSION = 'aztec.gas_dimension';
113
121
  export const WORLD_STATE_REQUEST_TYPE = 'aztec.world_state_request';
114
122
 
115
123
  export const NODEJS_EVENT_LOOP_STATE = 'nodejs.eventloop.state';
124
+
125
+ export const TOPIC_NAME = 'aztec.gossip.topic_name';
126
+
127
+ export const TX_COLLECTION_METHOD = 'aztec.tx_collection.method';
128
+
129
+ /** Scope of L1 transaction (sequencer, prover, or other) */
130
+ export const L1_TX_SCOPE = 'aztec.l1_tx.scope';
131
+
132
+ /** Generic error type attribute */
133
+ export const IS_COMMITTEE_MEMBER = 'aztec.is_committee_member';
package/src/bench.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+
1
3
  import type { BatchObservableCallback, Context, MetricOptions, Observable, ValueType } from '@opentelemetry/api';
2
4
 
3
5
  import { NoopTracer } from './noop.js';
@@ -29,6 +31,14 @@ export type BenchmarkMetricsType = {
29
31
  export class BenchmarkTelemetryClient implements TelemetryClient {
30
32
  private meters: InMemoryPlainMeter[] = [];
31
33
 
34
+ constructor() {
35
+ const log = createLogger('telemetry:client');
36
+ log.info(`Using benchmark telemetry client`);
37
+ }
38
+
39
+ setExportedPublicTelemetry(_prefixes: string[]): void {}
40
+ setPublicTelemetryCollectFrom(_roles: string[]): void {}
41
+
32
42
  getMeter(name: string): Meter {
33
43
  const meter = new InMemoryPlainMeter(name);
34
44
  this.meters.push(meter);
@@ -69,23 +79,23 @@ class InMemoryPlainMeter implements Meter {
69
79
  this.metrics.forEach(metric => metric.clear());
70
80
  }
71
81
 
72
- createGauge(name: MetricsType, options?: MetricOptions | undefined): Gauge {
82
+ createGauge(name: MetricsType, options?: MetricOptions): Gauge {
73
83
  return this.createMetric('gauge', name, options);
74
84
  }
75
85
 
76
- createObservableGauge(name: MetricsType, options?: MetricOptions | undefined): ObservableGauge {
86
+ createObservableGauge(name: MetricsType, options?: MetricOptions): ObservableGauge {
77
87
  return this.createMetric('gauge', name, options);
78
88
  }
79
89
 
80
- createHistogram(name: MetricsType, options?: MetricOptions | undefined): Histogram {
90
+ createHistogram(name: MetricsType, options?: MetricOptions): Histogram {
81
91
  return this.createMetric('histogram', name, options);
82
92
  }
83
93
 
84
- createUpDownCounter(name: MetricsType, options?: MetricOptions | undefined): UpDownCounter {
94
+ createUpDownCounter(name: MetricsType, options?: MetricOptions): UpDownCounter {
85
95
  return this.createMetric('counter', name, options);
86
96
  }
87
97
 
88
- createObservableUpDownCounter(name: MetricsType, options?: MetricOptions | undefined): ObservableUpDownCounter {
98
+ createObservableUpDownCounter(name: MetricsType, options?: MetricOptions): ObservableUpDownCounter {
89
99
  return this.createMetric('counter', name, options);
90
100
  }
91
101
 
package/src/config.ts CHANGED
@@ -1,12 +1,17 @@
1
- import { type ConfigMappingsType, getConfigFromMappings } from '@aztec/foundation/config';
1
+ import { type ConfigMappingsType, booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
2
2
 
3
3
  export interface TelemetryClientConfig {
4
4
  metricsCollectorUrl?: URL;
5
+ publicMetricsCollectorUrl?: URL;
6
+ publicIncludeMetrics: string[];
7
+ publicMetricsOptOut: boolean;
8
+ publicMetricsCollectFrom: string[];
5
9
  tracesCollectorUrl?: URL;
6
10
  logsCollectorUrl?: URL;
7
11
  otelCollectIntervalMs: number;
8
12
  otelExportTimeoutMs: number;
9
- otelExcludeMetrics?: string[];
13
+ otelExcludeMetrics: string[];
14
+ otelIncludeMetrics: string[];
10
15
  }
11
16
 
12
17
  export const telemetryClientConfigMappings: ConfigMappingsType<TelemetryClientConfig> = {
@@ -49,6 +54,53 @@ export const telemetryClientConfigMappings: ConfigMappingsType<TelemetryClientCo
49
54
  : [],
50
55
  defaultValue: [],
51
56
  },
57
+ otelIncludeMetrics: {
58
+ env: 'OTEL_INCLUDE_METRICS',
59
+ description: 'A list of metric prefixes to include in export (ignored if OTEL_EXCLUDE_METRICS is set)',
60
+ parseEnv: (val: string) =>
61
+ val
62
+ ? val
63
+ .split(',')
64
+ .map(s => s.trim())
65
+ .filter(s => s.length > 0)
66
+ : [],
67
+ defaultValue: [],
68
+ },
69
+
70
+ publicMetricsCollectorUrl: {
71
+ env: 'PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT',
72
+ description: 'A URL to publish a subset of metrics for public consumption',
73
+ parseEnv: (val: string) => val && new URL(val),
74
+ },
75
+ publicMetricsCollectFrom: {
76
+ env: 'PUBLIC_OTEL_COLLECT_FROM',
77
+ description: 'The role types to collect metrics from',
78
+ parseEnv: (val: string) =>
79
+ val
80
+ ? val
81
+ .split(',')
82
+ .map(s => s.trim())
83
+ .filter(s => s.length > 0)
84
+ : [],
85
+ defaultValue: [],
86
+ },
87
+ publicIncludeMetrics: {
88
+ env: 'PUBLIC_OTEL_INCLUDE_METRICS',
89
+ description: 'A list of metric prefixes to publicly export',
90
+ parseEnv: (val: string) =>
91
+ val
92
+ ? val
93
+ .split(',')
94
+ .map(s => s.trim())
95
+ .filter(s => s.length > 0)
96
+ : [],
97
+ defaultValue: [],
98
+ },
99
+ publicMetricsOptOut: {
100
+ env: 'PUBLIC_OTEL_OPT_OUT',
101
+ description: 'Whether to opt out of sharing optional telemetry',
102
+ ...booleanConfigHelper(true),
103
+ },
52
104
  };
53
105
 
54
106
  export function getConfigEnvVars(): TelemetryClientConfig {
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ export * as Attributes from './attributes.js';
4
4
  export * from './with_tracer.js';
5
5
  export * from './prom_otel_adapter.js';
6
6
  export * from './lmdb_metrics.js';
7
+ export * from './l1_metrics.js';
7
8
  export * from './wrappers/index.js';
8
9
  export * from './start.js';
9
10
  export * from './otel_propagation.js';
@@ -0,0 +1,80 @@
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
2
+
3
+ import { type Chain, type FallbackTransport, type Hex, type HttpTransport, type PublicClient, formatEther } from 'viem';
4
+
5
+ import { L1_SENDER } from './attributes.js';
6
+ import { L1_BALANCE_ETH, L1_BLOB_BASE_FEE_WEI, L1_BLOCK_HEIGHT, L1_GAS_PRICE_WEI } from './metrics.js';
7
+ import { type BatchObservableResult, type Meter, type ObservableGauge, ValueType } from './telemetry.js';
8
+
9
+ export class L1Metrics {
10
+ private l1BlockHeight: ObservableGauge;
11
+ private l1BalanceEth: ObservableGauge;
12
+ private gasPriceWei: ObservableGauge;
13
+ private blobBaseFeeWei: ObservableGauge;
14
+ private addresses: Hex[];
15
+
16
+ constructor(
17
+ private meter: Meter,
18
+ private client: PublicClient<FallbackTransport<HttpTransport[]>, Chain>,
19
+ addresses: EthAddress[],
20
+ ) {
21
+ this.l1BlockHeight = meter.createObservableGauge(L1_BLOCK_HEIGHT, {
22
+ description: 'The latest L1 block seen',
23
+ valueType: ValueType.INT,
24
+ });
25
+ this.l1BalanceEth = meter.createObservableGauge(L1_BALANCE_ETH, {
26
+ description: 'Eth balance of an address',
27
+ unit: 'eth',
28
+ valueType: ValueType.DOUBLE,
29
+ });
30
+ this.gasPriceWei = meter.createObservableGauge(L1_GAS_PRICE_WEI, {
31
+ description: 'L1 gas price',
32
+ unit: 'wei',
33
+ valueType: ValueType.DOUBLE,
34
+ });
35
+ this.blobBaseFeeWei = meter.createObservableGauge(L1_BLOB_BASE_FEE_WEI, {
36
+ description: 'L1 blob fee',
37
+ unit: 'wei',
38
+ valueType: ValueType.DOUBLE,
39
+ });
40
+
41
+ this.addresses = addresses.map(addr => addr.toString());
42
+ }
43
+
44
+ start() {
45
+ this.meter.addBatchObservableCallback(this.observe, [this.l1BalanceEth, this.l1BlockHeight]);
46
+ }
47
+
48
+ stop() {
49
+ this.meter.removeBatchObservableCallback(this.observe, [this.l1BalanceEth, this.l1BlockHeight]);
50
+ }
51
+
52
+ private observe = async (observer: BatchObservableResult) => {
53
+ const blockNumber = await this.client.getBlockNumber();
54
+ const ethBalances = await Promise.all(
55
+ this.addresses.map(address =>
56
+ this.client.getBalance({
57
+ address,
58
+ blockNumber,
59
+ }),
60
+ ),
61
+ );
62
+
63
+ const gasPrice = await this.client.getGasPrice();
64
+ const blobFee = await this.client.getBlobBaseFee();
65
+
66
+ observer.observe(this.l1BlockHeight, Number(blockNumber));
67
+ observer.observe(this.gasPriceWei, Number(gasPrice));
68
+ observer.observe(this.blobBaseFeeWei, Number(blobFee));
69
+
70
+ for (let i = 0; i < ethBalances.length; i++) {
71
+ const wei = ethBalances[i];
72
+ const address = this.addresses[i];
73
+ const eth = parseFloat(formatEther(wei, 'wei'));
74
+
75
+ observer.observe(this.l1BalanceEth, eth, {
76
+ [L1_SENDER]: address,
77
+ });
78
+ }
79
+ };
80
+ }
@@ -7,19 +7,34 @@ import {
7
7
  ValueType,
8
8
  } from './telemetry.js';
9
9
 
10
- export type LmdbStatsCallback = () => Promise<{ mappingSize: number; numItems: number; actualSize: number }>;
10
+ export type LmdbStatsCallback = () => Promise<{
11
+ mappingSize: number;
12
+ physicalFileSize: number;
13
+ numItems: number;
14
+ actualSize: number;
15
+ }>;
11
16
 
12
17
  export class LmdbMetrics {
13
18
  private dbMapSize: ObservableGauge;
19
+ private dbPhysicalFileSize: ObservableGauge;
14
20
  private dbUsedSize: ObservableGauge;
15
21
  private dbNumItems: ObservableGauge;
16
22
 
17
- constructor(meter: Meter, private attributes?: AttributesType, private getStats?: LmdbStatsCallback) {
23
+ constructor(
24
+ meter: Meter,
25
+ private attributes?: AttributesType,
26
+ private getStats?: LmdbStatsCallback,
27
+ ) {
18
28
  this.dbMapSize = meter.createObservableGauge(Metrics.DB_MAP_SIZE, {
19
29
  description: 'LMDB Map Size',
20
30
  valueType: ValueType.INT,
21
31
  unit: 'By',
22
32
  });
33
+ this.dbPhysicalFileSize = meter.createObservableGauge(Metrics.DB_PHYSICAL_FILE_SIZE, {
34
+ description: 'LMDB Physical File Size',
35
+ valueType: ValueType.INT,
36
+ unit: 'By',
37
+ });
23
38
  this.dbUsedSize = meter.createObservableGauge(Metrics.DB_USED_SIZE, {
24
39
  description: 'LMDB Used Size',
25
40
  valueType: ValueType.INT,
@@ -30,7 +45,12 @@ export class LmdbMetrics {
30
45
  valueType: ValueType.INT,
31
46
  });
32
47
 
33
- meter.addBatchObservableCallback(this.recordDBMetrics, [this.dbMapSize, this.dbUsedSize, this.dbNumItems]);
48
+ meter.addBatchObservableCallback(this.recordDBMetrics, [
49
+ this.dbMapSize,
50
+ this.dbPhysicalFileSize,
51
+ this.dbUsedSize,
52
+ this.dbNumItems,
53
+ ]);
34
54
  }
35
55
 
36
56
  private recordDBMetrics = async (observable: BatchObservableResult) => {
@@ -39,6 +59,7 @@ export class LmdbMetrics {
39
59
  }
40
60
  const metrics = await this.getStats();
41
61
  observable.observe(this.dbMapSize, metrics.mappingSize, this.attributes);
62
+ observable.observe(this.dbPhysicalFileSize, metrics.physicalFileSize, this.attributes);
42
63
  observable.observe(this.dbNumItems, metrics.numItems, this.attributes);
43
64
  observable.observe(this.dbUsedSize, metrics.actualSize, this.attributes);
44
65
  };
package/src/metrics.ts CHANGED
@@ -6,9 +6,15 @@
6
6
  * @see {@link https://opentelemetry.io/docs/specs/semconv/general/metrics/ | OpenTelemetry Metrics} for naming conventions.
7
7
  */
8
8
 
9
+ export const BLOB_SINK_STORE_REQUESTS = 'aztec.blob_sink.store_request_count';
10
+ export const BLOB_SINK_RETRIEVE_REQUESTS = 'aztec.blob_sink.retrieve_request_count';
9
11
  export const BLOB_SINK_OBJECTS_IN_BLOB_STORE = 'aztec.blob_sink.objects_in_blob_store';
10
12
  export const BLOB_SINK_BLOB_SIZE = 'aztec.blob_sink.blob_size';
11
13
 
14
+ export const BLOB_SINK_ARCHIVE_BLOB_REQUEST_COUNT = 'aztec.blob_sink.archive.block_request_count';
15
+ export const BLOB_SINK_ARCHIVE_BLOCK_REQUEST_COUNT = 'aztec.blob_sink.archive.blob_request_count';
16
+ export const BLOB_SINK_ARCHIVE_BLOB_COUNT = 'aztec.blob_sink.archive.blob_count';
17
+
12
18
  /** How long it takes to simulate a circuit */
13
19
  export const CIRCUIT_SIMULATION_DURATION = 'aztec.circuit.simulation.duration';
14
20
  export const CIRCUIT_SIMULATION_INPUT_SIZE = 'aztec.circuit.simulation.input_size';
@@ -28,34 +34,59 @@ export const CIRCUIT_SIZE = 'aztec.circuit.size';
28
34
 
29
35
  export const MEMPOOL_TX_COUNT = 'aztec.mempool.tx_count';
30
36
  export const MEMPOOL_TX_SIZE = 'aztec.mempool.tx_size';
37
+ export const MEMPOOL_TX_ADDED_COUNT = 'aztec.mempool.tx_added_count';
31
38
  export const DB_NUM_ITEMS = 'aztec.db.num_items';
32
39
  export const DB_MAP_SIZE = 'aztec.db.map_size';
40
+ export const DB_PHYSICAL_FILE_SIZE = 'aztec.db.physical_file_size';
33
41
  export const DB_USED_SIZE = 'aztec.db.used_size';
34
42
 
35
43
  export const MEMPOOL_ATTESTATIONS_COUNT = 'aztec.mempool.attestations_count';
36
44
  export const MEMPOOL_ATTESTATIONS_SIZE = 'aztec.mempool.attestations_size';
45
+ export const MEMPOOL_ATTESTATIONS_ADDED_COUNT = 'aztec.mempool.attestations_added_count';
37
46
 
38
- export const ARCHIVER_SYNC_DURATION = 'aztec.archiver.sync_duration';
39
- export const ARCHIVER_L1_BLOCKS_SYNCED = 'aztec.archiver.l1_blocks_synced';
40
47
  export const ARCHIVER_L1_BLOCK_HEIGHT = 'aztec.archiver.l1_block_height';
41
48
  export const ARCHIVER_BLOCK_HEIGHT = 'aztec.archiver.block_height';
42
- export const ARCHIVER_TX_COUNT = 'aztec.archiver.tx_count';
43
49
  export const ARCHIVER_ROLLUP_PROOF_DELAY = 'aztec.archiver.rollup_proof_delay';
44
50
  export const ARCHIVER_ROLLUP_PROOF_COUNT = 'aztec.archiver.rollup_proof_count';
51
+
52
+ export const ARCHIVER_MANA_PER_BLOCK = 'aztec.archiver.block.mana_count';
53
+ export const ARCHIVER_TXS_PER_BLOCK = 'aztec.archiver.block.tx_count';
54
+ export const ARCHIVER_SYNC_PER_BLOCK = 'aztec.archiver.block.sync_per_item_duration';
55
+ export const ARCHIVER_SYNC_BLOCK_COUNT = 'aztec.archiver.block.sync_count';
56
+
57
+ export const ARCHIVER_SYNC_PER_MESSAGE = 'aztec.archiver.message.sync_per_item_duration';
58
+ export const ARCHIVER_SYNC_MESSAGE_COUNT = 'aztec.archiver.message.sync_count';
59
+
60
+ export const ARCHIVER_PRUNE_DURATION = 'aztec.archiver.prune_duration';
45
61
  export const ARCHIVER_PRUNE_COUNT = 'aztec.archiver.prune_count';
46
62
 
63
+ export const ARCHIVER_TOTAL_TXS = 'aztec.archiver.tx_count';
64
+
47
65
  export const NODE_RECEIVE_TX_DURATION = 'aztec.node.receive_tx.duration';
48
66
  export const NODE_RECEIVE_TX_COUNT = 'aztec.node.receive_tx.count';
49
67
 
68
+ export const NODE_SNAPSHOT_DURATION = 'aztec.node.snapshot_duration';
69
+ export const NODE_SNAPSHOT_ERROR_COUNT = 'aztec.node.snapshot_error_count';
70
+
50
71
  export const SEQUENCER_STATE_TRANSITION_BUFFER_DURATION = 'aztec.sequencer.state_transition_buffer.duration';
51
72
  export const SEQUENCER_BLOCK_BUILD_DURATION = 'aztec.sequencer.block.build_duration';
52
73
  export const SEQUENCER_BLOCK_BUILD_MANA_PER_SECOND = 'aztec.sequencer.block.build_mana_per_second';
53
74
  export const SEQUENCER_BLOCK_COUNT = 'aztec.sequencer.block.count';
54
- export const SEQUENCER_CURRENT_STATE = 'aztec.sequencer.current.state';
55
- export const SEQUENCER_CURRENT_BLOCK_NUMBER = 'aztec.sequencer.current.block_number';
56
- export const SEQUENCER_CURRENT_BLOCK_SIZE = 'aztec.sequencer.current.block_size';
57
- export const SEQUENCER_TIME_TO_COLLECT_ATTESTATIONS = 'aztec.sequencer.time_to_collect_attestations';
58
- export const SEQUENCER_BLOCK_BUILD_INSERTION_TIME = 'aztec.sequencer.block_builder_tree_insertion_duration';
75
+ export const SEQUENCER_CURRENT_BLOCK_REWARDS = 'aztec.sequencer.current_block_rewards';
76
+ export const SEQUENCER_SLOT_COUNT = 'aztec.sequencer.slot.total_count';
77
+ export const SEQUENCER_FILLED_SLOT_COUNT = 'aztec.sequencer.slot.filled_count';
78
+
79
+ export const SEQUENCER_COLLECTED_ATTESTATIONS_COUNT = 'aztec.sequencer.attestations.collected_count';
80
+ export const SEQUENCER_REQUIRED_ATTESTATIONS_COUNT = 'aztec.sequencer.attestations.required_count';
81
+ export const SEQUENCER_COLLECT_ATTESTATIONS_DURATION = 'aztec.sequencer.attestations.collect_duration';
82
+ export const SEQUENCER_COLLECT_ATTESTATIONS_TIME_ALLOWANCE = 'aztec.sequencer.attestations.collect_allowance';
83
+
84
+ export const SEQUENCER_BLOCK_PROPOSAL_FAILED_COUNT = 'aztec.sequencer.block.proposal_failed_count';
85
+ export const SEQUENCER_BLOCK_PROPOSAL_SUCCESS_COUNT = 'aztec.sequencer.block.proposal_success_count';
86
+ export const SEQUENCER_BLOCK_PROPOSAL_PRECHECK_FAILED_COUNT = 'aztec.sequencer.block.proposal_precheck_failed_count';
87
+ export const SEQUENCER_SLASHING_ATTEMPTS_COUNT = 'aztec.sequencer.slashing.attempts_count';
88
+
89
+ export const VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT = 'aztec.validator.invalid_attestation_received_count';
59
90
 
60
91
  export const L1_PUBLISHER_GAS_PRICE = 'aztec.l1_publisher.gas_price';
61
92
  export const L1_PUBLISHER_TX_COUNT = 'aztec.l1_publisher.tx_count';
@@ -70,15 +101,51 @@ export const L1_PUBLISHER_BLOB_INCLUSION_BLOCKS = 'aztec.l1_publisher.blob_inclu
70
101
  export const L1_PUBLISHER_BLOB_TX_SUCCESS = 'aztec.l1_publisher.blob_tx_success';
71
102
  export const L1_PUBLISHER_BLOB_TX_FAILURE = 'aztec.l1_publisher.blob_tx_failure';
72
103
  export const L1_PUBLISHER_BALANCE = 'aztec.l1_publisher.balance';
104
+ export const L1_PUBLISHER_TX_TOTAL_FEE = 'aztec.l1_publisher.tx_total_fee';
105
+
106
+ export const L1_BLOCK_HEIGHT = 'aztec.l1.block_height';
107
+ export const L1_BALANCE_ETH = 'aztec.l1.balance';
108
+ export const L1_GAS_PRICE_WEI = 'aztec.l1.gas_price';
109
+ export const L1_BLOB_BASE_FEE_WEI = 'aztec.l1.blob_base_fee';
110
+
111
+ export const L1_TX_MINED_DURATION = 'aztec.l1_tx.mined_duration';
112
+ export const L1_TX_MINED_COUNT = 'aztec.l1_tx.mined_count';
113
+ export const L1_TX_REVERTED_COUNT = 'aztec.l1_tx.reverted_count';
114
+ export const L1_TX_CANCELLED_COUNT = 'aztec.l1_tx.cancelled_count';
115
+ export const L1_TX_NOT_MINED_COUNT = 'aztec.l1_tx.not_mined_count';
116
+ export const L1_TX_ATTEMPTS_UNTIL_MINED = 'aztec.l1_tx.attempts_until_mined';
117
+ export const L1_TX_MAX_PRIORITY_FEE = 'aztec.l1_tx.max_priority_fee';
118
+ export const L1_TX_MAX_FEE = 'aztec.l1_tx.max_fee';
119
+ export const L1_TX_BLOB_FEE = 'aztec.l1_tx.blob_fee';
73
120
 
74
121
  export const PEER_MANAGER_GOODBYES_SENT = 'aztec.peer_manager.goodbyes_sent';
75
122
  export const PEER_MANAGER_GOODBYES_RECEIVED = 'aztec.peer_manager.goodbyes_received';
123
+ export const PEER_MANAGER_PEER_COUNT = 'aztec.peer_manager.peer_count';
124
+ export const PEER_MANAGER_LOW_SCORE_DISCONNECTS = 'aztec.peer_manager.low_score_disconnects';
125
+ export const P2P_PEER_STATE_COUNT = 'aztec.p2p.peer_state_count';
76
126
 
77
127
  export const P2P_REQ_RESP_SENT_REQUESTS = 'aztec.p2p.req_resp.sent_requests';
78
128
  export const P2P_REQ_RESP_RECEIVED_REQUESTS = 'aztec.p2p.req_resp.received_requests';
79
129
  export const P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS = 'aztec.p2p.req_resp.failed_outbound_requests';
80
130
  export const P2P_REQ_RESP_FAILED_INBOUND_REQUESTS = 'aztec.p2p.req_resp.failed_inbound_requests';
81
131
 
132
+ export const P2P_GOSSIP_MESSAGE_VALIDATION_DURATION = 'aztec.p2p.gossip.message_validation_duration';
133
+ export const P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT = 'aztec.p2p.gossip.message_validation_count';
134
+ export const P2P_GOSSIP_MESSAGE_LATENCY = 'aztec.p2p.gossip.message_latency';
135
+ export const P2P_GOSSIP_TX_RECEIVED_COUNT = 'aztec.p2p.gossip.tx_received_count';
136
+
137
+ export const P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN = 'aztec.p2p.gossip.agg_message_latency_min';
138
+ export const P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX = 'aztec.p2p.gossip.agg_message_latency_max';
139
+ export const P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50 = 'aztec.p2p.gossip.agg_message_latency_p50';
140
+ export const P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90 = 'aztec.p2p.gossip.agg_message_latency_p90';
141
+ export const P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG = 'aztec.p2p.gossip.agg_message_latency_avg';
142
+
143
+ export const P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN = 'aztec.p2p.gossip.agg_message_validation_duration_min';
144
+ export const P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX = 'aztec.p2p.gossip.agg_message_validation_duration_max';
145
+ export const P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50 = 'aztec.p2p.gossip.agg_message_validation_duration_p50';
146
+ export const P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90 = 'aztec.p2p.gossip.agg_message_validation_duration_p90';
147
+ export const P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG = 'aztec.p2p.gossip.agg_message_validation_duration_avg';
148
+
82
149
  export const PUBLIC_PROCESSOR_TX_DURATION = 'aztec.public_processor.tx_duration';
83
150
  export const PUBLIC_PROCESSOR_TX_COUNT = 'aztec.public_processor.tx_count';
84
151
  export const PUBLIC_PROCESSOR_TX_PHASE_COUNT = 'aztec.public_processor.tx_phase_count';
@@ -91,15 +158,21 @@ export const PUBLIC_PROCESSOR_TOTAL_GAS_HISTOGRAM = 'aztec.public_processor.tota
91
158
  export const PUBLIC_PROCESSOR_GAS_RATE = 'aztec.public_processor.gas_rate';
92
159
  export const PUBLIC_PROCESSOR_TREE_INSERTION = 'aztec.public_processor.tree_insertion';
93
160
 
161
+ export const PUBLIC_EXECUTOR_PREFIX = 'aztec.public_executor.';
94
162
  export const PUBLIC_EXECUTOR_SIMULATION_COUNT = 'aztec.public_executor.simulation_count';
95
163
  export const PUBLIC_EXECUTOR_SIMULATION_DURATION = 'aztec.public_executor.simulation_duration';
96
164
  export const PUBLIC_EXECUTOR_SIMULATION_MANA_PER_SECOND = 'aztec.public_executor.simulation_mana_per_second';
97
- export const PUBLIC_EXECUTION_SIMULATION_BYTECODE_SIZE = 'aztec.public_executor.simulation_bytecode_size';
98
- export const PUBLIC_EXECUTION_PRIVATE_EFFECTS_INSERTION = 'aztec.public_executor.private_effects_insertion';
165
+ export const PUBLIC_EXECUTOR_SIMULATION_MANA_USED = 'aztec.public_executor.simulation_mana_used';
166
+ export const PUBLIC_EXECUTOR_SIMULATION_TOTAL_INSTRUCTIONS = 'aztec.public_executor.simulation_total_instructions';
167
+ export const PUBLIC_EXECUTOR_TX_HASHING = 'aztec.public_executor.tx_hashing';
168
+ export const PUBLIC_EXECUTOR_PRIVATE_EFFECTS_INSERTION = 'aztec.public_executor.private_effects_insertion';
169
+ export const PUBLIC_EXECUTOR_SIMULATION_BYTECODE_SIZE = 'aztec.public_executor.simulation_bytecode_size';
99
170
 
100
171
  export const PROVING_ORCHESTRATOR_BASE_ROLLUP_INPUTS_DURATION =
101
172
  'aztec.proving_orchestrator.base_rollup.inputs_duration';
102
173
 
174
+ export const PROVING_ORCHESTRATOR_AVM_FALLBACK_COUNT = 'aztec.proving_orchestrator.avm.fallback_count';
175
+
103
176
  export const PROVING_QUEUE_JOB_SIZE = 'aztec.proving_queue.job_size';
104
177
  export const PROVING_QUEUE_SIZE = 'aztec.proving_queue.size';
105
178
  export const PROVING_QUEUE_TOTAL_JOBS = 'aztec.proving_queue.enqueued_jobs_count';
@@ -121,15 +194,18 @@ export const PROVER_NODE_EXECUTION_DURATION = 'aztec.prover_node.execution.durat
121
194
  export const PROVER_NODE_JOB_DURATION = 'aztec.prover_node.job_duration';
122
195
  export const PROVER_NODE_JOB_BLOCKS = 'aztec.prover_node.job_blocks';
123
196
  export const PROVER_NODE_JOB_TRANSACTIONS = 'aztec.prover_node.job_transactions';
197
+ export const PROVER_NODE_REWARDS_TOTAL = 'aztec.prover_node.rewards_total';
198
+ export const PROVER_NODE_REWARDS_PER_EPOCH = 'aztec.prover_node.rewards_per_epoch';
124
199
 
125
200
  export const WORLD_STATE_FORK_DURATION = 'aztec.world_state.fork.duration';
126
201
  export const WORLD_STATE_SYNC_DURATION = 'aztec.world_state.sync.duration';
127
202
  export const WORLD_STATE_MERKLE_TREE_SIZE = 'aztec.world_state.merkle_tree_size';
128
203
  export const WORLD_STATE_DB_SIZE = 'aztec.world_state.db_size';
129
204
  export const WORLD_STATE_DB_MAP_SIZE = 'aztec.world_state.db_map_size';
205
+ export const WORLD_STATE_DB_PHYSICAL_SIZE = 'aztec.world_state.db_physical_size';
130
206
  export const WORLD_STATE_TREE_SIZE = 'aztec.world_state.tree_size';
131
- export const WORLD_STATE_UNFINALISED_HEIGHT = 'aztec.world_state.unfinalised_height';
132
- export const WORLD_STATE_FINALISED_HEIGHT = 'aztec.world_state.finalised_height';
207
+ export const WORLD_STATE_UNFINALIZED_HEIGHT = 'aztec.world_state.unfinalized_height';
208
+ export const WORLD_STATE_FINALIZED_HEIGHT = 'aztec.world_state.finalized_height';
133
209
  export const WORLD_STATE_OLDEST_BLOCK = 'aztec.world_state.oldest_block';
134
210
  export const WORLD_STATE_DB_USED_SIZE = 'aztec.world_state.db_used_size';
135
211
  export const WORLD_STATE_DB_NUM_ITEMS = 'aztec.world_state.db_num_items';
@@ -139,7 +215,13 @@ export const WORLD_STATE_CRITICAL_ERROR_COUNT = 'aztec.world_state.critical_erro
139
215
  export const PROOF_VERIFIER_COUNT = 'aztec.proof_verifier.count';
140
216
 
141
217
  export const VALIDATOR_RE_EXECUTION_TIME = 'aztec.validator.re_execution_time';
218
+ export const VALIDATOR_RE_EXECUTION_MANA = 'aztec.validator.re_execution_mana';
219
+ export const VALIDATOR_RE_EXECUTION_TX_COUNT = 'aztec.validator.re_execution_tx_count';
220
+
142
221
  export const VALIDATOR_FAILED_REEXECUTION_COUNT = 'aztec.validator.failed_reexecution_count';
222
+ export const VALIDATOR_ATTESTATION_SUCCESS_COUNT = 'aztec.validator.attestation_success_count';
223
+ export const VALIDATOR_ATTESTATION_FAILED_BAD_PROPOSAL_COUNT = 'aztec.validator.attestation_failed_bad_proposal_count';
224
+ export const VALIDATOR_ATTESTATION_FAILED_NODE_ISSUE_COUNT = 'aztec.validator.attestation_failed_node_issue_count';
143
225
 
144
226
  export const NODEJS_EVENT_LOOP_DELAY_MIN = 'nodejs.eventloop.delay.min';
145
227
  export const NODEJS_EVENT_LOOP_DELAY_MEAN = 'nodejs.eventloop.delay.mean';
@@ -151,3 +233,27 @@ export const NODEJS_EVENT_LOOP_DELAY_P99 = 'nodejs.eventloop.delay.p99';
151
233
 
152
234
  export const NODEJS_EVENT_LOOP_UTILIZATION = 'nodejs.eventloop.utilization';
153
235
  export const NODEJS_EVENT_LOOP_TIME = 'nodejs.eventloop.time';
236
+
237
+ export const NODEJS_MEMORY_HEAP_USAGE = 'nodejs.memory.v8_heap.usage';
238
+ export const NODEJS_MEMORY_HEAP_TOTAL = 'nodejs.memory.v8_heap.total';
239
+ export const NODEJS_MEMORY_NATIVE_USAGE = 'nodejs.memory.native.usage';
240
+ export const NODEJS_MEMORY_BUFFER_USAGE = 'nodejs.memory.array_buffer.usage';
241
+
242
+ export const TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT = 'aztec.tx_collector.txs_from_proposal_count';
243
+ export const TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT = 'aztec.tx_collector.txs_from_mempool_count';
244
+ export const TX_PROVIDER_TXS_FROM_P2P_COUNT = 'aztec.tx_collector.txs_from_p2p_count';
245
+ export const TX_PROVIDER_MISSING_TXS_COUNT = 'aztec.tx_collector.missing_txs_count';
246
+
247
+ export const TX_COLLECTOR_COUNT = 'aztec.tx_collector.tx_count';
248
+ export const TX_COLLECTOR_DURATION_PER_REQUEST = 'aztec.tx_collector.duration_per_request';
249
+ export const TX_COLLECTOR_DURATION_PER_TX = 'aztec.tx_collector.duration_per_tx';
250
+
251
+ export const IVC_VERIFIER_TIME = 'aztec.ivc_verifier.time';
252
+ export const IVC_VERIFIER_TOTAL_TIME = 'aztec.ivc_verifier.total_time';
253
+ export const IVC_VERIFIER_FAILURE_COUNT = 'aztec.ivc_verifier.failure_count';
254
+
255
+ export const IVC_VERIFIER_AGG_DURATION_MIN = 'aztec.ivc_verifier.agg_duration_min';
256
+ export const IVC_VERIFIER_AGG_DURATION_MAX = 'aztec.ivc_verifier.agg_duration_max';
257
+ export const IVC_VERIFIER_AGG_DURATION_P50 = 'aztec.ivc_verifier.agg_duration_p50';
258
+ export const IVC_VERIFIER_AGG_DURATION_P90 = 'aztec.ivc_verifier.agg_duration_p90';
259
+ export const IVC_VERIFIER_AGG_DURATION_AVG = 'aztec.ivc_verifier.agg_duration_avg';