#!/bin/bash ####################################################################################################################### # Этот скрипт позволяет передать агенту zabbix текущую информацию по видеокартам из HiveOS # Скрипт само по себе мало полезен, для работы необходим: # zabbix агент # конфиг файл к нему # zabbix сервер # шаблон к нему # # Скрипт умеет отдавать сводную информацию об установленных видеокартах в механизм discovery zabbix, для автоматического обнаружения установленных видеокарт # Скрипт умеет отдавать по каждой карте: # текущие хешрейт видеокарты # текущую температуру ядра видеокарты # текущую скорость вентилятора # текущие потребление энергии # # Внимание!!! Поддерживается только 1 или 2 одновременно работающих майнера на одном риге # # Этот скрипт был написан в консольном текстовом редакторе nano через консольный терминал putty, так что здесь очень качественный быдлокод # # Автор: SvC # Версия: 1.0.9.11 от 30.09.2021 # ####################################################################################################################### # получение json строки последнего состояния рига json=`tail -2 /var/log/hive-agent.log | grep ">" | cut -d '>' -f 2` if [ -e "/home/user/zabbix_rig_igpu_detect" ]; then igpu_detect=true else igpu_detect=false fi i=0 # сбор информации if [ `echo $json | jq '.params.miner'` != 'null' ]; then hs_str=`echo $json | jq '.params.miner_stats.hs[]'` temp_str=`echo $json | jq '.params.miner_stats.temp[]'` fan_str=`echo $json | jq '.params.miner_stats.fan[]'` bus_str=`echo $json | jq '.params.miner_stats.bus_numbers[]'` m=`echo $json | jq '.params.miner_stats.hs[]' | wc -w` for ((j = 1 ; $j <= $m ; j++)); do hss[$i]=`echo $hs_str | cut -d ' ' -f $j` temps[$i]=`echo $temp_str | cut -d ' ' -f $j` fans[$i]=`echo $fan_str | cut -d ' ' -f $j` buss[$i]=`echo $bus_str | cut -d ' ' -f $j` if [ `echo $json | jq '.params.miner'` == '"lolminer"' ]; then #hss_tmp=${hss[$i]//./} hss[$i]=`echo ${hss[i]}*100 | bc | cut -d "." -f 1` # проверено if [ $igpu_detect == true ]; then #echo $json | jq .params.power[$((i+1))] temps[$i]=`echo $json | jq .params.temp[$((i+1))]` fans[$i]=`echo $json | jq .params.fan[$((i+1))]` else #echo $json | jq .params.power[$i] temps[$i]=`echo $json | jq .params.temp[$i]` fans[$i]=`echo $json | jq .params.fan[$i]` fi fi if [ `echo $json | jq '.params.miner'` == '"teamredminer"' ]; then hss[$i]=$((hss[i]/10)) # проверено fi if [ `echo $json | jq '.params.miner'` == '"phoenixminer"' ]; then hss[$i]=$((hss[i]/10)) # проверено fi if [ `echo $json | jq '.params.miner'` == '"nbminer"' ]; then hss[$i]=$((hss[i]/10000)) # проверено fi if [ `echo $json | jq '.params.miner'` == '"gminer"' ]; then hss[$i]=$((hss[i]/10000)) # проверено fi i=$i+1 done if [ `echo $json | jq '.params.miner2'` != 'null' ]; then hs_str=`echo $json | jq '.params.miner_stats2.hs[]'` temp_str=`echo $json | jq '.params.miner_stats2.temp[]'` fan_str=`echo $json | jq '.params.miner_stats2.fan[]'` bus_str=`echo $json | jq '.params.miner_stats2.bus_numbers[]'` m=`echo $json | jq '.params.miner_stats2.hs[]' | wc -w` for ((j = 1 ; $j <= $m ; j++)); do hss[$i]=`echo $hs_str | cut -d ' ' -f $j` temps[$i]=`echo $temp_str | cut -d ' ' -f $j` fans[$i]=`echo $fan_str | cut -d ' ' -f $j` buss[$i]=`echo $bus_str | cut -d ' ' -f $j` if [ `echo $json | jq '.params.miner2'` == '"lolminer"' ]; then #hss[$i]=$((hss[i]*100)) hss[$i]=`echo ${hss[i]}*100 | bc | cut -d "." -f 1` # проверено if [ $igpu_detect == true ]; then #echo $json | jq .params.power[$((i+1))] temps[$i]=`echo $json | jq .params.temp[$((i+1))]` fans[$i]=`echo $json | jq .params.fan[$((i+1))]` else #echo $json | jq .params.power[$i] temps[$i]=`echo $json | jq .params.temp[$i]` fans[$i]=`echo $json | jq .params.fan[$i]` fi fi if [ `echo $json | jq '.params.miner2'` == '"teamredminer"' ]; then hss[$i]=$((hss[i]/10)) # проверено fi if [ `echo $json | jq '.params.miner2'` == '"phoenixminer"' ]; then hss[$i]=$((hss[i]/10)) # проверено fi if [ `echo $json | jq '.params.miner'` == '"nbminer"' ]; then hss[$i]=$((hss[i]/10000)) # проверено fi if [ `echo $json | jq '.params.miner2'` == '"gminer"' ]; then hss[$i]=$((hss[i]/10000)) # проверено fi i=$i+1 done fi fi # обработка вывода discovery_str= for ((i=0; i < ${#hss[@]}; i++)) do if [[ $1 == '' ]]; then discovery_str=$discovery_str,{\"{#GPUBUS}\":\"${buss[$i]}\"} else if [[ $2 = ${buss[$i]} ]]; then if [[ $1 == 'hs' ]]; then echo ${hss[$i]} else if [[ $1 == 'temp' ]]; then echo ${temps[$i]} else if [[ $1 == 'fan' ]]; then echo ${fans[$i]} else if [[ $1 == 'power' ]]; then if [ $igpu_detect == true ]; then echo $json | jq .params.power[$((i+1))] else echo $json | jq .params.power[$i] fi fi fi fi fi fi fi done if [[ $1 == '' ]]; then discovery_str=`echo $discovery_str | cut -c 2-` echo [$discovery_str] fi