YAML Configuration Structure (v0.2.0)
This document details the structure of the YAML configuration file used to set up your Ikura monitoring projects. We'll go through the different sections and fields available.
The current and only supported configuration version right now is 0.2.0
.
You can always view the raw JSON Schema definition here for technical details.
Please be aware that the Node Monitoring feature (nodes
section in the config) is currently in Beta.
- Functionality: It might not work perfectly as expected yet.
- Stability: There's a possibility it could cause issues with your project dashboard display.
- Changes: The configuration options or behavior for nodes might change in future updates based on feedback.
Use the node monitoring feature with these points in mind. RPC monitoring is stable.
Top-Level Project Fields
These fields define the overall project settings.
version
(string
, Required)- The configuration schema version. Must be exactly
"0.2.0"
. - Example:
version: 0.2.0
- The configuration schema version. Must be exactly
label
(string
, Required)- A human-readable name for your project, displayed in the Ikura UI.
- Must be between 3 and 30 characters long.
- Example:
label: My Production Ethereum Watcher
slug
(string
, Required)- A unique identifier for the project, used internally and potentially in URLs. If omitted, Ikura might generate one.
- Allowed characters: letters (
a-z
,A-Z
), numbers (0-9
), hyphen (-
), underscore (_
). - Must be between 3 and 30 characters long.
- Example:
slug: prod-eth-watcher
links
(object
, Optional)- An object containing relevant URLs for your project.
- Allowed keys:
web
,app
,docs
,github
,twitter
,discord
,telegram
. - Values should be valid URIs (e.g.,
https://...
,http://...
). - Example:
links:
web: https://myproject.com
github: https://github.com/myproject
tags
(array
ofstring
, Optional)- A list of tags (up to 10) to categorize your project.
- Each tag must be 3-25 characters long, lowercase letters (
a-z
), numbers (0-9
), and hyphens (-
) only. Tags must be unique within the list. - Example:
tags: [mainnet, ethereum, layer-1]
logo
(string
, Optional)- A URL pointing to an image file (jpg, jpeg, png, webp, svg) to be used as the project logo. Max length 200 characters.
- Example:
logo: https://myproject.com/logo.png
rpcs
(array
ofobject
, Optional)- A list of public RPC endpoints to monitor. See the RPC Endpoint section below for details on the object structure.
nodes
(object
, Optional)- A map (key-value pairs) defining private nodes to monitor. See the Node (Beta) section below for details.
Your project configuration must include at least one of the following:
- An
rpcs
list with one or more endpoints. - A
nodes
object with one or more node definitions. You can also include both.
RPC Endpoint
Defines a single public RPC endpoint to monitor within the rpcs
list.
url
(string
, Required)- The full URL of the RPC endpoint.
- Must start with
http://
,https://
,ws://
, orwss://
. Can also be a specificdrpc.org
URL format. - Example:
url: https://rpc.ankr.com/eth
label
(string
, Required)- A human-readable name for this specific RPC endpoint in the UI.
- Example:
label: Ankr Public ETH RPC
protocol
(string
, Required)- Specifies the type of API the endpoint provides. This determines which checks Ikura performs.
- Allowed values (defined in schema):
ethereum_v1
,ethereum_v2
,op_node
,subgraph
,subquery
,substrate
,starkware
,tendermint
,web
. - Example:
protocol: ethereum_v1
query_intervals
(object
, Required)- Specifies how often Ikura should query the endpoint. See Query Intervals below.
headers
(object
, Optional)- Custom HTTP headers to include when querying the endpoint.
- Supported keys:
authorization
(e.g.,Bearer ...
,Basic ...
),origin
. Values are strings. - Example:
headers:
authorization: Bearer YOUR_API_KEY
bundle
(string
, Optional)- An identifier used to group related RPC endpoints visually on the status page (e.g., different RPCs for the same network). Allowed characters:
a-z
,A-Z
,0-9
,-
,_
. - Example:
bundle: mainnet-eth-public
- An identifier used to group related RPC endpoints visually on the status page (e.g., different RPCs for the same network). Allowed characters:
bhead
(boolean
, Optional)- Stands for "Bundle Head". If
true
, this RPC endpoint might be used as the primary representative for status display when grouped in abundle
. Default isfalse
. - Example:
bhead: true
- Stands for "Bundle Head". If
chain_id
(string
, Optional)- The expected Chain ID (for EVM-compatible chains). Ikura can verify this against the ID reported by the node. Allowed characters:
a-z
,A-Z
,0-9
,-
,_
. - Generates an alert if the reported Chain ID doesn't match.
- Example:
chain_id: 1
# Ethereum Mainnet
- The expected Chain ID (for EVM-compatible chains). Ikura can verify this against the ID reported by the node. Allowed characters:
Query Intervals
Defined within an rpc
object under the query_intervals
key. Specifies check frequencies in seconds.
latest_block
(number
, Required)- How often to check the latest block number (e.g., using
eth_blockNumber
). - Value must be a multiple of 5, and the minimum allowed value is 10.
- Example:
latest_block: 15
# Check every 15 seconds
- How often to check the latest block number (e.g., using
meta
(number
, Optional)- How often to check other metadata (like sync status, peer count, etc., depending on the protocol).
- Value must be a multiple of 60, and the minimum allowed value is 60.
- Example:
meta: 300
# Check every 5 minutes
Using short intervals (like checking latest_block
every 10 seconds) can result in a high volume of requests to the RPC provider.
latest_block
@ 10s =~8,640
requests/day.meta
@ 60s =~1,440
requests/day (actual count depends on protocol specifics).
Be mindful of your RPC provider's rate limits and potential costs! Adjust intervals based on your needs and budget.
Node (Not Stable)
As mentioned at the top, Node Monitoring is in Beta. Expect potential instability or changes.
Defines a single private node to monitor. These are placed inside the top-level nodes
object, where each key is a unique identifier you choose for that node within the config file.
-
[node_key]
(string
, Map Key)- This key (e.g.,
mainnet-exec-node
in the example) is how you identify the node within this YAML file. It's used to link with the Ikura Keeper agent configuration. - Allowed characters: letters (
a-z
,A-Z
), numbers (0-9
), hyphen (-
), underscore (_
).
- This key (e.g.,
-
label
(string
, Required)- A human-readable name for this node displayed in the Ikura UI.
- Example:
label: AWS Mainnet Execution Client
-
protocol
(string
, Required)- Specifies the type of node the agent is monitoring.
- Allowed values (defined in schema):
ethereum_v1
,ethereum_v2
,op_node
. - Example:
protocol: ethereum_v2
# For a consensus client
Protocol Implementation StatusWhile the schema defines these, ensure your Ikura Keeper agent version supports the chosen protocol.
ethereum_v1
andethereum_v2
are the primary focus currently. -
bundle
(string
, Optional)- An identifier used to group related nodes (like an execution and consensus client pair for Ethereum). Provides better status overview for the bundle. Allowed characters:
a-z
,A-Z
,0-9
,-
,_
. - Example:
bundle: mainnet-validator-1
- An identifier used to group related nodes (like an execution and consensus client pair for Ethereum). Provides better status overview for the bundle. Allowed characters:
-
bhead
(boolean
, Optional)- "Bundle Head". If
true
, this node might represent the bundle's overall status. Default isfalse
. - Example:
bhead: true
- "Bundle Head". If
-
uuid
(string
formatuuid
, Optional)- A universally unique identifier (UUID) for this node. This is crucial for data continuity.
- How it works:
- If you don't provide a
uuid
, Ikura generates one when the project is first created. You'll need to copy this generated UUID into your Ikura Keeper agent config for that node. - If you do provide a
uuid
, Ikura uses it to track the node's history, even if you change its[node_key]
in the YAML later.
- If you don't provide a
- Example:
uuid: 415fd1a6-d442-4163-b2b6-dbc6d9884da1
Managing Node Identity withuuid
- Changing
[node_key]
withoutuuid
: If you change the key (e.g.,mainnet-exec-node
toprod-exec-node
) and haven't specified auuid
in your YAML, Ikura will treat it as a brand new node. You'll lose the historical data for the old key, and you'll need to update the agent config with the new generated UUID. - Keeping History: To rename a node (
[node_key]
) but keep its history, you MUST first find the generateduuid
(e.g., from the UI or previous agent config) and add it to the YAML before changing the key.
uuid
: Simple vs. Persistent- Don't care about history? Just let Ikura generate the
uuid
on creation and copy it to your agent config. Don't worry about adding it to the YAML. - Want history persistence (especially if renaming)? Make sure the correct
uuid
is present in both your project YAML and the agent config for that node.
-
block_time_ms
(number
, Optional)- Expected block time in milliseconds (minimum 10). Used for reference and uptime checks. Currently not supported yet.
- Example:
block_time_ms: 12000
# For Ethereum PoS
-
block_interval_seconds
(number
, Optional)- Expected interval between blocks in seconds (minimum 1). Used for reference and uptime checks. Currently not supported yet.
- Example:
block_interval_seconds: 2
# For Optimism/OP Stack
Examples
In the following project YAML config example the node keys are mainnet-eth-1-consensus
and mainnet-eth-1-execution
:
nodes:
mainnet-eth-1-execution:
label: AWS Mainnet ETH Execution
protocol: ethereum_v1
bundle: mainnet-eth-1
mainnet-eth-1-consensus:
label: AWS Mainnet ETH Consensus
protocol: ethereum_v1
bundle: mainnet-eth-1
The corresponding Ikura Keeper config on you server cold look like:
secret: wZz0NCZD7fGyWqrOvORB4JOx51dgYs80spgEpoTm87
nodes:
mainnet-eth-1-execution:
rpc: http://localhost:8545
id: 415fd1a6-d442-4163-b2b6-dbc6d9884da1
protocol: ethereum_v1
mainnet-eth-1-consensus:
rpc: http://localhost:9000
id: 415fd1a6-d442-4163-b2b6-dbc6d9884da1
protocol: ethereum_v2