Add Oracle Aggregator and CCIP Integration
- Introduced Aggregator.sol for Chainlink-compatible oracle functionality, including round-based updates and access control. - Added OracleWithCCIP.sol to extend Aggregator with CCIP cross-chain messaging capabilities. - Created .gitmodules to include OpenZeppelin contracts as a submodule. - Developed a comprehensive deployment guide in NEXT_STEPS_COMPLETE_GUIDE.md for Phase 2 and smart contract deployment. - Implemented Vite configuration for the orchestration portal, supporting both Vue and React frameworks. - Added server-side logic for the Multi-Cloud Orchestration Portal, including API endpoints for environment management and monitoring. - Created scripts for resource import and usage validation across non-US regions. - Added tests for CCIP error handling and integration to ensure robust functionality. - Included various new files and directories for the orchestration portal and deployment scripts.
This commit is contained in:
150
terraform/multi-cloud/modules/observability/main.tf
Normal file
150
terraform/multi-cloud/modules/observability/main.tf
Normal file
@@ -0,0 +1,150 @@
|
||||
# Observability Module
|
||||
# Provides unified logging, metrics, and tracing across all environments
|
||||
|
||||
locals {
|
||||
environments = var.environments
|
||||
global_config = var.global_config
|
||||
clusters = var.clusters
|
||||
|
||||
# Extract observability config
|
||||
obs_config = try(local.global_config, {})
|
||||
logging_config = try(local.obs_config.logging, {})
|
||||
metrics_config = try(local.obs_config.metrics, {})
|
||||
tracing_config = try(local.obs_config.tracing, {})
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# LOGGING CONFIGURATION
|
||||
# ============================================
|
||||
# Generate logging configuration per environment
|
||||
resource "local_file" "logging_config" {
|
||||
for_each = local.clusters
|
||||
|
||||
filename = "${path.module}/../../../../config/observability/logging-${each.key}.yaml"
|
||||
content = yamlencode({
|
||||
cluster = each.key
|
||||
provider = try(local.logging_config.provider, "loki")
|
||||
endpoint = try(local.logging_config.central_endpoint, "")
|
||||
config = {
|
||||
loki = {
|
||||
url = try(local.logging_config.central_endpoint, "http://loki:3100")
|
||||
labels = {
|
||||
cluster = each.key
|
||||
provider = try(local.environments[each.key].provider, "unknown")
|
||||
}
|
||||
}
|
||||
elasticsearch = {
|
||||
url = try(local.logging_config.central_endpoint, "")
|
||||
index = "besu-network-${each.key}"
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# METRICS CONFIGURATION
|
||||
# ============================================
|
||||
# Generate Prometheus/metrics configuration
|
||||
resource "local_file" "metrics_config" {
|
||||
for_each = local.clusters
|
||||
|
||||
filename = "${path.module}/../../../../config/observability/metrics-${each.key}.yaml"
|
||||
content = yamlencode({
|
||||
cluster = each.key
|
||||
provider = try(local.metrics_config.provider, "prometheus")
|
||||
endpoint = try(local.metrics_config.central_endpoint, "")
|
||||
scrape_configs = [
|
||||
{
|
||||
job_name = "besu-validators"
|
||||
kubernetes_sd_configs = [{
|
||||
role = "pod"
|
||||
}]
|
||||
relabel_configs = [{
|
||||
source_labels = ["__meta_kubernetes_pod_label_role"]
|
||||
action = "keep"
|
||||
regex = "validator"
|
||||
}]
|
||||
},
|
||||
{
|
||||
job_name = "besu-rpc"
|
||||
kubernetes_sd_configs = [{
|
||||
role = "pod"
|
||||
}]
|
||||
relabel_configs = [{
|
||||
source_labels = ["__meta_kubernetes_pod_label_role"]
|
||||
action = "keep"
|
||||
regex = "rpc"
|
||||
}]
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# TRACING CONFIGURATION
|
||||
# ============================================
|
||||
# Generate tracing configuration
|
||||
resource "local_file" "tracing_config" {
|
||||
for_each = local.clusters
|
||||
|
||||
filename = "${path.module}/../../../../config/observability/tracing-${each.key}.yaml"
|
||||
content = yamlencode({
|
||||
cluster = each.key
|
||||
provider = try(local.tracing_config.provider, "jaeger")
|
||||
endpoint = try(local.tracing_config.central_endpoint, "")
|
||||
config = {
|
||||
jaeger = {
|
||||
agent_host = try(split(":", local.tracing_config.central_endpoint)[0], "jaeger")
|
||||
agent_port = try(split(":", local.tracing_config.central_endpoint)[1], "6831")
|
||||
}
|
||||
zipkin = {
|
||||
url = try(local.tracing_config.central_endpoint, "http://zipkin:9411")
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
# ============================================
|
||||
# GRAFANA DASHBOARDS
|
||||
# ============================================
|
||||
# Generate Grafana dashboard configuration
|
||||
resource "local_file" "grafana_dashboards" {
|
||||
filename = "${path.module}/../../../../config/observability/grafana-dashboards.yaml"
|
||||
content = yamlencode({
|
||||
dashboards = {
|
||||
for name, cluster in local.clusters : name => {
|
||||
title = "Besu Network - ${name}"
|
||||
panels = [
|
||||
{
|
||||
title = "Block Production Rate"
|
||||
targets = [
|
||||
{
|
||||
expr = "rate(besu_blockchain_blocks_added_total[5m])"
|
||||
legendFormat = "{{cluster}}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title = "Validator Health"
|
||||
targets = [
|
||||
{
|
||||
expr = "besu_validator_health"
|
||||
legendFormat = "{{validator}}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title = "RPC Requests"
|
||||
targets = [
|
||||
{
|
||||
expr = "rate(besu_rpc_requests_total[5m])"
|
||||
legendFormat = "{{method}}"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
27
terraform/multi-cloud/modules/observability/variables.tf
Normal file
27
terraform/multi-cloud/modules/observability/variables.tf
Normal file
@@ -0,0 +1,27 @@
|
||||
# Variables for Observability Module
|
||||
|
||||
variable "environments" {
|
||||
description = "Map of all environments"
|
||||
type = map(any)
|
||||
}
|
||||
|
||||
variable "global_config" {
|
||||
description = "Global observability configuration"
|
||||
type = map(any)
|
||||
default = {}
|
||||
}
|
||||
|
||||
variable "clusters" {
|
||||
description = "Map of clusters for observability"
|
||||
type = map(object({
|
||||
endpoint = string
|
||||
kubeconfig = string
|
||||
}))
|
||||
}
|
||||
|
||||
variable "tags" {
|
||||
description = "Tags to apply to resources"
|
||||
type = map(string)
|
||||
default = {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user