Hallo liebe Community, evtl. ist hier jemand der Lust und Zeit hat mir bei meinem Vorhaben zu helfen?
Idee:
Ich will mir Statis über VMs abholen, um diese dann nach Prometheus zu überführen
damit ich anschließend mit Grafana eine Darstellung habe.
Leider steht mein Server nicht bei mir im Netzwerk, sodass ich die Daten über das Prometheus Pushgateway Daten empfangen muss.
Also wollte ich mir schnell ein kleines Script schreiben:
1.) Daten von der Proxmox API via JSON holen
pvesh get /cluster/resources --type vm --output-format json-pretty
2.) Filtern
jq '.[] | select(has("name"))'
3.) Über alle iterieren
while do ... done
4.) Daten ans Pushgateway übertragen
echo "vm_cpu $vm_cpu" | curl -k -u ${user}:${password} --data-binary @- https://monitoring.myserver.local/metrics/job/watchdog/instance/server1/provider/node1"
Hier mein Script:
Mit dem folgenden Command bekomme ich eine fertige JSON-PRETTY, zudem stelle ich gleich sicher, dass ich nur solche erhalte, die auch mit dem Namen gefüllt sind (Sinnvoll oder nicht sei mal dahingestellt):
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))'
Teste ich das jetzt mit dem folgenden Command, funktioniert es auch:
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))' | jq '.name'
"vm1"
"vm2"
"vm3"
"vm4"
"vm5"
Gleiches mit
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))' | jq '.cpu'
0.0368112141568371
0.00564438617071503
0.0593887588396973
0.00736224283136743
0.00208596880222077
Sobald ich "jq" allerdings im Loop verwende, kann er das nicht mehr parsen.
Kann mir dafür jemand eine Lösung oder zumindest einen Ansatz nennen?
Danke euch!
Idee:
Ich will mir Statis über VMs abholen, um diese dann nach Prometheus zu überführen
damit ich anschließend mit Grafana eine Darstellung habe.
Leider steht mein Server nicht bei mir im Netzwerk, sodass ich die Daten über das Prometheus Pushgateway Daten empfangen muss.
Also wollte ich mir schnell ein kleines Script schreiben:
1.) Daten von der Proxmox API via JSON holen
pvesh get /cluster/resources --type vm --output-format json-pretty
2.) Filtern
jq '.[] | select(has("name"))'
3.) Über alle iterieren
while do ... done
4.) Daten ans Pushgateway übertragen
echo "vm_cpu $vm_cpu" | curl -k -u ${user}:${password} --data-binary @- https://monitoring.myserver.local/metrics/job/watchdog/instance/server1/provider/node1"
Hier mein Script:
Bash:
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))' | while read vm; do
vm_name=$(echo $vm | jq -r '"name"')
vm_cpu=$(echo $vm | jq -r 'cpu')
vm_ram=$(echo $vm | jq -r 'mem')
vm_hdd=$(echo $vm | jq -r 'rootfs')
echo "vm_name{name=\"$vm_name\"} $vm_name"
echo "vm_cpu{name=\"$vm_name\"} $vm_cpu"
echo "vm_ram{name=\"$vm_name\"} $vm_ram"
echo "vm_hdd{name=\"$vm_name\"} $vm_hdd"
done
Mit dem folgenden Command bekomme ich eine fertige JSON-PRETTY, zudem stelle ich gleich sicher, dass ich nur solche erhalte, die auch mit dem Namen gefüllt sind (Sinnvoll oder nicht sei mal dahingestellt):
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))'
Teste ich das jetzt mit dem folgenden Command, funktioniert es auch:
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))' | jq '.name'
"vm1"
"vm2"
"vm3"
"vm4"
"vm5"
Gleiches mit
pvesh get /cluster/resources --type vm --output-format json-pretty | jq '.[] | select(has("name"))' | jq '.cpu'
0.0368112141568371
0.00564438617071503
0.0593887588396973
0.00736224283136743
0.00208596880222077
Sobald ich "jq" allerdings im Loop verwende, kann er das nicht mehr parsen.
Kann mir dafür jemand eine Lösung oder zumindest einen Ansatz nennen?
Danke euch!
JSON:
{
"cpu": 0.0454924060803185,
"disk": 0,
"diskread": 507049018368,
"diskwrite": 279513862144,
"id": "qemu/1003",
"maxcpu": 8,
"maxdisk": 53687091200,
"maxmem": 8589934592,
"mem": 8162811904,
"name": "vm1",
"netin": 134538513130,
"netout": 893507822217,
"node": "node1",
"status": "running",
"template": 0,
"type": "qemu",
"uptime": 3156490,
"vmid": 1003
}
{
"cpu": 0.00588580995109243,
"disk": 0,
"diskread": 13938100224,
"diskwrite": 158685310976,
"id": "qemu/1004",
"maxcpu": 4,
"maxdisk": 107374182400,
"maxmem": 8589934592,
"mem": 8163450880,
"name": "vm2",
"netin": 20033221224,
"netout": 28626043846,
"node": "node1",
"status": "running",
"template": 0,
"type": "qemu",
"uptime": 3156486,
"vmid": 1004
}
{
"cpu": 0.110849420745574,
"disk": 0,
"diskread": 6359791662,
"diskwrite": 203040993280,
"id": "qemu/102",
"maxcpu": 4,
"maxdisk": 107374182400,
"maxmem": 8589934592,
"mem": 8245972992,
"name": "vm3",
"netin": 167053410575,
"netout": 127232851420,
"node": "node1",
"status": "running",
"template": 0,
"type": "qemu",
"uptime": 3156612,
"vmid": 102
}
{
"cpu": 0.0154502511216176,
"disk": 0,
"diskread": 205292432896,
"diskwrite": 85553895424,
"id": "qemu/103",
"maxcpu": 4,
"maxdisk": 112742891520,
"maxmem": 4294967296,
"mem": 3542225598,
"name": "vm4",
"netin": 0,
"netout": 0,
"node": "node1",
"status": "running",
"template": 0,
"type": "qemu",
"uptime": 3156551,
"vmid": 103
}
{
"cpu": 0.00220717873165966,
"disk": 0,
"diskread": 1294748160,
"diskwrite": 30596280320,
"id": "qemu/1056",
"maxcpu": 8,
"maxdisk": 62277025792,
"maxmem": 8589934592,
"mem": 5532676096,
"name": "vm5",
"netin": 1789980526,
"netout": 418077357,
"node": "node1",
"status": "running",
"template": 0,
"type": "qemu",
"uptime": 3156480,
"vmid": 1056
}