monero
This commit is contained in:
85
apps/miner/grafana-dashboard-configmap.yaml
Normal file
85
apps/miner/grafana-dashboard-configmap.yaml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: xmrig-grafana-dashboard
|
||||||
|
namespace: miner
|
||||||
|
labels:
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
data:
|
||||||
|
xmrig-mining.json: |
|
||||||
|
{
|
||||||
|
"title": "XMRig Mining",
|
||||||
|
"uid": "xmrig-mining",
|
||||||
|
"schemaVersion": 39,
|
||||||
|
"time": { "from": "now-6h", "to": "now" },
|
||||||
|
"refresh": "30s",
|
||||||
|
"templating": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"name": "datasource",
|
||||||
|
"type": "datasource",
|
||||||
|
"query": "prometheus",
|
||||||
|
"current": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"title": "Hashrate (10s avg)",
|
||||||
|
"type": "timeseries",
|
||||||
|
"datasource": { "type": "prometheus", "uid": "${datasource}" },
|
||||||
|
"gridPos": { "h": 8, "w": 24, "x": 0, "y": 0 },
|
||||||
|
"fieldConfig": { "defaults": { "unit": "Hz" }, "overrides": [] },
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "xmrig_hashrate_10s",
|
||||||
|
"legendFormat": "{{miner}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"title": "Shares Good",
|
||||||
|
"type": "stat",
|
||||||
|
"datasource": { "type": "prometheus", "uid": "${datasource}" },
|
||||||
|
"gridPos": { "h": 6, "w": 8, "x": 0, "y": 8 },
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "xmrig_shares_good",
|
||||||
|
"legendFormat": "{{miner}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"title": "Shares Total",
|
||||||
|
"type": "stat",
|
||||||
|
"datasource": { "type": "prometheus", "uid": "${datasource}" },
|
||||||
|
"gridPos": { "h": 6, "w": 8, "x": 8, "y": 8 },
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "xmrig_shares_total",
|
||||||
|
"legendFormat": "{{miner}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"title": "Miner Up",
|
||||||
|
"type": "stat",
|
||||||
|
"datasource": { "type": "prometheus", "uid": "${datasource}" },
|
||||||
|
"gridPos": { "h": 6, "w": 8, "x": 16, "y": 8 },
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"expr": "xmrig_up",
|
||||||
|
"legendFormat": "{{miner}}",
|
||||||
|
"refId": "A"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
18
apps/miner/servicemonitor.yaml
Normal file
18
apps/miner/servicemonitor.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: xmrig-exporter
|
||||||
|
namespace: miner
|
||||||
|
labels:
|
||||||
|
release: prometheus-stack
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: xmrig-exporter
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- miner
|
||||||
|
endpoints:
|
||||||
|
- port: metrics
|
||||||
|
path: /metrics
|
||||||
|
interval: 30s
|
||||||
61
apps/miner/xmrig-exporter-configmap.yaml
Normal file
61
apps/miner/xmrig-exporter-configmap.yaml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: xmrig-exporter-script
|
||||||
|
namespace: miner
|
||||||
|
data:
|
||||||
|
exporter.py: |
|
||||||
|
import json
|
||||||
|
import urllib.request
|
||||||
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||||
|
|
||||||
|
TARGETS = {
|
||||||
|
"xmrig-monero": "http://xmrig-monero-api.miner.svc.cluster.local:16000/2/summary",
|
||||||
|
"xmrig-monero-solo": "http://xmrig-monero-solo-api.miner.svc.cluster.local:16000/2/summary",
|
||||||
|
}
|
||||||
|
|
||||||
|
def fetch_metrics():
|
||||||
|
lines = [
|
||||||
|
"# HELP xmrig_hashrate_10s Current hashrate over 10s window",
|
||||||
|
"# TYPE xmrig_hashrate_10s gauge",
|
||||||
|
"# HELP xmrig_shares_good Accepted shares",
|
||||||
|
"# TYPE xmrig_shares_good counter",
|
||||||
|
"# HELP xmrig_shares_total Total shares submitted",
|
||||||
|
"# TYPE xmrig_shares_total counter",
|
||||||
|
"# HELP xmrig_up Whether the xmrig HTTP API was reachable",
|
||||||
|
"# TYPE xmrig_up gauge",
|
||||||
|
]
|
||||||
|
for name, url in TARGETS.items():
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(url, timeout=5) as resp:
|
||||||
|
data = json.loads(resp.read())
|
||||||
|
hashrate = data.get("hashrate", {}).get("total", [0]) or [0]
|
||||||
|
hashrate_10s = hashrate[0] or 0
|
||||||
|
good = data.get("results", {}).get("shares_good", 0)
|
||||||
|
total = data.get("results", {}).get("shares_total", 0)
|
||||||
|
lines.append(f'xmrig_hashrate_10s{{miner="{name}"}} {hashrate_10s}')
|
||||||
|
lines.append(f'xmrig_shares_good{{miner="{name}"}} {good}')
|
||||||
|
lines.append(f'xmrig_shares_total{{miner="{name}"}} {total}')
|
||||||
|
lines.append(f'xmrig_up{{miner="{name}"}} 1')
|
||||||
|
except Exception:
|
||||||
|
lines.append(f'xmrig_up{{miner="{name}"}} 0')
|
||||||
|
return "\n".join(lines) + "\n"
|
||||||
|
|
||||||
|
class Handler(BaseHTTPRequestHandler):
|
||||||
|
def do_GET(self):
|
||||||
|
if self.path == "/metrics":
|
||||||
|
body = fetch_metrics().encode()
|
||||||
|
self.send_response(200)
|
||||||
|
self.send_header("Content-Type", "text/plain; version=0.0.4")
|
||||||
|
self.send_header("Content-Length", str(len(body)))
|
||||||
|
self.end_headers()
|
||||||
|
self.wfile.write(body)
|
||||||
|
else:
|
||||||
|
self.send_response(404)
|
||||||
|
self.end_headers()
|
||||||
|
|
||||||
|
def log_message(self, format, *args):
|
||||||
|
pass
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
HTTPServer(("0.0.0.0", 9200), Handler).serve_forever()
|
||||||
52
apps/miner/xmrig-exporter.yaml
Normal file
52
apps/miner/xmrig-exporter.yaml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: xmrig-exporter
|
||||||
|
namespace: miner
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: xmrig-exporter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: xmrig-exporter
|
||||||
|
spec:
|
||||||
|
priorityClassName: low-priority
|
||||||
|
containers:
|
||||||
|
- name: exporter
|
||||||
|
image: python:3-alpine
|
||||||
|
command: ["python3", "/app/exporter.py"]
|
||||||
|
ports:
|
||||||
|
- containerPort: 9200
|
||||||
|
name: metrics
|
||||||
|
volumeMounts:
|
||||||
|
- name: script
|
||||||
|
mountPath: /app
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: "50m"
|
||||||
|
memory: "32Mi"
|
||||||
|
limits:
|
||||||
|
cpu: "200m"
|
||||||
|
memory: "64Mi"
|
||||||
|
volumes:
|
||||||
|
- name: script
|
||||||
|
configMap:
|
||||||
|
name: xmrig-exporter-script
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: xmrig-exporter
|
||||||
|
namespace: miner
|
||||||
|
labels:
|
||||||
|
app: xmrig-exporter
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: xmrig-exporter
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9200
|
||||||
|
targetPort: 9200
|
||||||
@@ -44,6 +44,12 @@ spec:
|
|||||||
- "k8s-solo-lottery"
|
- "k8s-solo-lottery"
|
||||||
- "--daemon-poll-interval=1000"
|
- "--daemon-poll-interval=1000"
|
||||||
- "--randomx-mode=light"
|
- "--randomx-mode=light"
|
||||||
|
- "--http-enabled"
|
||||||
|
- "--http-host=0.0.0.0"
|
||||||
|
- "--http-port=16000"
|
||||||
|
ports:
|
||||||
|
- containerPort: 16000
|
||||||
|
name: http-api
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: shared
|
- name: shared
|
||||||
mountPath: /shared
|
mountPath: /shared
|
||||||
@@ -57,3 +63,16 @@ spec:
|
|||||||
volumes:
|
volumes:
|
||||||
- name: shared
|
- name: shared
|
||||||
emptyDir: {}
|
emptyDir: {}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: xmrig-monero-solo-api
|
||||||
|
namespace: miner
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: xmrig-monero-solo
|
||||||
|
ports:
|
||||||
|
- name: http-api
|
||||||
|
port: 16000
|
||||||
|
targetPort: 16000
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ spec:
|
|||||||
- "k8s-lottery"
|
- "k8s-lottery"
|
||||||
- "--tls"
|
- "--tls"
|
||||||
- "--randomx-mode=light"
|
- "--randomx-mode=light"
|
||||||
|
- "--http-enabled"
|
||||||
|
- "--http-host=0.0.0.0"
|
||||||
|
- "--http-port=16000"
|
||||||
|
ports:
|
||||||
|
- containerPort: 16000
|
||||||
|
name: http-api
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: shared
|
- name: shared
|
||||||
mountPath: /shared
|
mountPath: /shared
|
||||||
@@ -57,3 +63,16 @@ spec:
|
|||||||
volumes:
|
volumes:
|
||||||
- name: shared
|
- name: shared
|
||||||
emptyDir: {}
|
emptyDir: {}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: xmrig-monero-api
|
||||||
|
namespace: miner
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: xmrig-monero
|
||||||
|
ports:
|
||||||
|
- name: http-api
|
||||||
|
port: 16000
|
||||||
|
targetPort: 16000
|
||||||
|
|||||||
Reference in New Issue
Block a user