Skip to content

Commit 869a79e

Browse files
committed
merge: resolve conflicts with monitoring chart (main)
Integrates monitoring chart CI, Makefile, and gitignore changes alongside cloudflare-tunnel additions.
2 parents e5e72d1 + 9748c53 commit 869a79e

File tree

7 files changed

+266
-3
lines changed

7 files changed

+266
-3
lines changed

.github/workflows/helm-ci.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,22 @@ jobs:
4444
--set traffic.enabled=true \
4545
--set dashboard.enabled=true > /dev/null
4646
47+
monitoring-lint:
48+
runs-on: ubuntu-latest
49+
steps:
50+
- uses: actions/checkout@v4
51+
- uses: azure/setup-helm@v4
52+
with:
53+
version: v3.14.0
54+
- name: Add VictoriaMetrics Helm repo
55+
run: helm repo add vm https://victoriametrics.github.io/helm-charts/ && helm repo update
56+
- name: Build dependencies
57+
run: helm dependency build helm/monitoring/
58+
- name: Lint monitoring chart
59+
run: helm lint helm/monitoring/
60+
- name: Template monitoring chart
61+
run: helm template monitoring helm/monitoring/ > /dev/null
62+
4763
tunnel-lint:
4864
runs-on: ubuntu-latest
4965
steps:
@@ -95,7 +111,7 @@ jobs:
95111
run: pip install yamllint
96112
- name: Lint YAML files
97113
run: |
98-
yamllint -d relaxed helm/disentangle/Chart.yaml helm/disentangle/values.yaml helm/disentangle/values.schema.json helm/cloudflare-tunnel/Chart.yaml helm/cloudflare-tunnel/values.yaml gitops/
114+
yamllint -d relaxed helm/disentangle/Chart.yaml helm/disentangle/values.yaml helm/disentangle/values.schema.json helm/monitoring/Chart.yaml helm/monitoring/values.yaml helm/cloudflare-tunnel/Chart.yaml helm/cloudflare-tunnel/values.yaml gitops/
99115
100116
helm-unittest:
101117
runs-on: ubuntu-latest

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Thumbs.db
1010

1111
# Helm
1212
helm/disentangle/charts/
13+
helm/monitoring/charts/
1314
helm/cloudflare-tunnel/charts/
1415
*.tgz
1516
.helm/

Makefile

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
.PHONY: help lint test test-unit test-golden test-policy test-integration test-all clean lint-tunnel template-tunnel
1+
.PHONY: help lint test test-unit test-golden test-policy test-integration test-all clean lint-monitoring template-monitoring deps-monitoring lint-tunnel template-tunnel
22

33
CHART_DIR := helm/disentangle
4+
MONITORING_CHART_DIR := helm/monitoring
45
TUNNEL_CHART_DIR := helm/cloudflare-tunnel
56
NAMESPACE := disentangle-test
67
RELEASE := test-release
@@ -10,11 +11,20 @@ help: ## Show this help
1011

1112
# === Linting ===
1213

13-
lint: lint-helm lint-tunnel lint-yaml lint-shell ## Run all linters
14+
lint: lint-helm lint-monitoring lint-tunnel lint-yaml lint-shell ## Run all linters
1415

1516
lint-helm: ## Lint Helm chart
1617
helm lint $(CHART_DIR)
1718

19+
lint-monitoring: ## Lint monitoring chart
20+
helm lint $(MONITORING_CHART_DIR)
21+
22+
template-monitoring: ## Render monitoring chart templates
23+
helm template monitoring $(MONITORING_CHART_DIR) > /dev/null
24+
25+
deps-monitoring: ## Build monitoring chart dependencies
26+
helm dependency build $(MONITORING_CHART_DIR)
27+
1828
lint-tunnel: ## Lint cloudflare-tunnel chart
1929
helm lint $(TUNNEL_CHART_DIR)
2030

helm/monitoring/.helmignore

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Patterns to ignore when building packages.
2+
# This supports shell glob matching, relative path matching, and
3+
# negation (prefixed with !). Only one pattern per line.
4+
.DS_Store
5+
# Common VCS dirs
6+
.git/
7+
.gitignore
8+
.bzr/
9+
.bzrignore
10+
.hg/
11+
.hgignore
12+
.svn/
13+
# Common backup files
14+
*.swp
15+
*.bak
16+
*.tmp
17+
*.orig
18+
*~
19+
# Various IDEs
20+
.project
21+
.idea/
22+
*.tmproj
23+
.vscode/

helm/monitoring/Chart.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
dependencies:
2+
- name: victoria-metrics-k8s-stack
3+
repository: https://victoriametrics.github.io/helm-charts/
4+
version: 0.72.4
5+
digest: sha256:ce97f0e91953a2f1776a9efe8db4afd0e8a12b174752d1cb7d2e937c9433a3d3
6+
generated: "2026-03-06T17:58:17.814692-07:00"

helm/monitoring/Chart.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
apiVersion: v2
2+
name: disentangle-monitoring
3+
description: Monitoring stack for Disentangle Network (VictoriaMetrics + Grafana)
4+
type: application
5+
version: 0.1.0
6+
appVersion: "0.1.0"
7+
license: Apache-2.0
8+
dependencies:
9+
- name: victoria-metrics-k8s-stack
10+
version: "0.72.x"
11+
repository: https://victoriametrics.github.io/helm-charts/

helm/monitoring/values.yaml

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
# Monitoring stack values tuned for Oracle Cloud Always Free tier
2+
# 2 ARM64 nodes, 4 OCPUs + 24GB RAM each, limited block volume quota
3+
#
4+
# Total monitoring resource budget (requests):
5+
# CPU: ~400m (of 8000m available across 2 nodes)
6+
# RAM: ~576Mi (of 48Gi available across 2 nodes)
7+
8+
victoria-metrics-k8s-stack:
9+
10+
# --- VMSingle (metrics storage) ---
11+
vmsingle:
12+
enabled: true
13+
spec:
14+
retentionPeriod: "7d"
15+
replicaCount: 1
16+
extraArgs: {}
17+
# Use emptyDir instead of PVC to avoid consuming block volume quota
18+
# (OCI Always Free tier: 200Gi total, 150Gi already used by protocol nodes)
19+
storage: {}
20+
resources:
21+
requests:
22+
cpu: 100m
23+
memory: 256Mi
24+
limits:
25+
cpu: 500m
26+
memory: 1Gi
27+
securityContext:
28+
runAsNonRoot: true
29+
runAsUser: 1000
30+
runAsGroup: 1000
31+
containers:
32+
- name: vmsingle
33+
securityContext:
34+
allowPrivilegeEscalation: false
35+
capabilities:
36+
drop:
37+
- ALL
38+
readOnlyRootFilesystem: true
39+
seccompProfile:
40+
type: RuntimeDefault
41+
42+
# --- VMAgent (scrape + remote write) ---
43+
vmagent:
44+
enabled: true
45+
spec:
46+
port: "8429"
47+
selectAllByDefault: true
48+
scrapeInterval: 30s
49+
extraArgs:
50+
promscrape.streamParse: "true"
51+
promscrape.dropOriginalLabels: "true"
52+
resources:
53+
requests:
54+
cpu: 50m
55+
memory: 128Mi
56+
limits:
57+
cpu: 200m
58+
memory: 256Mi
59+
securityContext:
60+
runAsNonRoot: true
61+
runAsUser: 1000
62+
runAsGroup: 1000
63+
containers:
64+
- name: vmagent
65+
securityContext:
66+
allowPrivilegeEscalation: false
67+
capabilities:
68+
drop:
69+
- ALL
70+
readOnlyRootFilesystem: true
71+
seccompProfile:
72+
type: RuntimeDefault
73+
74+
# --- VMAlert (recording rules evaluation) ---
75+
# Kept enabled for recording rules but with minimal resources
76+
vmalert:
77+
enabled: true
78+
spec:
79+
port: "8080"
80+
selectAllByDefault: true
81+
evaluationInterval: 30s
82+
extraArgs:
83+
http.pathPrefix: "/"
84+
# Alertmanager is disabled; sink alert notifications to blackhole
85+
notifier.blackhole: "true"
86+
resources:
87+
requests:
88+
cpu: 50m
89+
memory: 64Mi
90+
limits:
91+
cpu: 200m
92+
memory: 256Mi
93+
94+
# --- Alertmanager (DISABLED - not needed for initial deployment) ---
95+
alertmanager:
96+
enabled: false
97+
98+
# --- Grafana ---
99+
grafana:
100+
enabled: true
101+
# Use emptyDir for SQLite database (no PVC needed)
102+
persistence:
103+
enabled: false
104+
resources:
105+
requests:
106+
cpu: 100m
107+
memory: 256Mi
108+
limits:
109+
cpu: 500m
110+
memory: 512Mi
111+
securityContext:
112+
runAsNonRoot: true
113+
runAsUser: 472
114+
runAsGroup: 472
115+
fsGroup: 472
116+
containerSecurityContext:
117+
allowPrivilegeEscalation: false
118+
capabilities:
119+
drop:
120+
- ALL
121+
readOnlyRootFilesystem: false
122+
seccompProfile:
123+
type: RuntimeDefault
124+
sidecar:
125+
dashboards:
126+
enabled: true
127+
label: grafana_dashboard
128+
labelValue: "1"
129+
folder: /var/lib/grafana/dashboards
130+
defaultFolderName: default
131+
provider:
132+
name: default
133+
orgid: 1
134+
datasources:
135+
enabled: true
136+
label: grafana_datasource
137+
labelValue: "1"
138+
139+
# --- Node Exporter (DaemonSet - runs on each node) ---
140+
prometheus-node-exporter:
141+
enabled: true
142+
resources:
143+
requests:
144+
cpu: 50m
145+
memory: 64Mi
146+
limits:
147+
cpu: 100m
148+
memory: 128Mi
149+
service:
150+
labels:
151+
jobLabel: node-exporter
152+
extraArgs:
153+
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/.+)($|/)
154+
- --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|erofs|sysfs|tracefs)$
155+
156+
# --- Kube State Metrics ---
157+
kube-state-metrics:
158+
enabled: true
159+
resources:
160+
requests:
161+
cpu: 100m
162+
memory: 128Mi
163+
limits:
164+
cpu: 200m
165+
memory: 256Mi
166+
167+
# --- VMAuth (not needed for single-node setup) ---
168+
vmauth:
169+
enabled: false
170+
171+
# --- VMCluster (not needed - using VMSingle) ---
172+
vmcluster:
173+
enabled: false
174+
175+
# --- Operator ---
176+
victoria-metrics-operator:
177+
enabled: true
178+
crds:
179+
plain: true
180+
cleanup:
181+
enabled: true
182+
operator:
183+
disable_prometheus_converter: false
184+
185+
# --- Default dashboards ---
186+
defaultDashboards:
187+
enabled: true
188+
defaultTimezone: utc
189+
190+
# --- Default rules (recording + alerting) ---
191+
defaultRules:
192+
create: true
193+
194+
# TODO: Add custom Grafana dashboard ConfigMaps for Disentangle-specific
195+
# metrics (P2P peers, DAG height, mining rate, RPC latency) once the
196+
# protocol node exposes a Prometheus /metrics endpoint.

0 commit comments

Comments
 (0)