Ad Widget

Collapse

Для LLD обноружения программы LM-Sensors

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • temka35
    Junior Member
    • Feb 2018
    • 11

    #1

    Для LLD обноружения программы LM-Sensors

    Делаю скрипт для LLD программы LM-Sensors

    Застрял что то на переменной вроде бы все элементарно , но что то не выходит как надо.

    По переменной
    get="/usr/bin/sensors"
    for chip in $($get -u ........
    done <<<$($get -u $chip........

    Всё работает хорошо
    Ответ получаю
    root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
    {"data":[
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice", "{#NAMEFAN}":"", " {#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3","{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}


    Мне надо с указанием $1 ip
    get=`zabbix_get -s $1 -k system.run["sensors -u"]`
    for chip in $(echo "${get}" ........
    done <<<$(echo "${get}" $chip........
    Так же работает, но выводит по 2 раза все, неправильно работает цикл.

    root@ZABBIXSERVER:~# ./1.sh 192.168.1.121 discovery
    {"data":[
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"acpitz-virtual-0", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp1", "{#NAMETEMP}":"AdapterVirtualdevice -- Physicalid0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}, {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp2", "{#NAMETEMP}":"Core0", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp3", "{#NAMETEMP}":"Core1", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp4", "{#NAMETEMP}":"Core2", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"},
    {"{#CHIP}":"coretemp-isa-0000", "{#SENSOR}":"temp5", "{#NAMETEMP}":"Core3", "{#NAMEFAN}":"", "{#NAMEVOLT}":"", "{#UNITS}":"°C"}]}

    Думаю проблема в отличия. "В двойных кавычках (" ") переменные раскрываются, а в одинарных (' ') -- нет"

    Уже как только не перепробовал прописать get= переменную и скобки и кавычки разные и с echo , выходит то строка не экранируется или вообще ничего не выходит или часть строки вместо команды на выполнение...

    Общий вид команды
    root@ZABBIXSERVER:~# sensors -u
    acpitz-virtual-0
    Adapter: Virtual device
    temp1:
    temp1_input: 29.800
    temp1_crit: 100.000

    coretemp-isa-0000
    Adapter: ISA adapter
    Physical id 0:
    temp1_input: 22.000
    temp1_max: 74.000
    temp1_crit: 94.000
    temp1_crit_alarm: 0.000
    Core 0:
    temp2_input: 19.000
    temp2_max: 74.000
    temp2_crit: 94.000
    temp2_crit_alarm: 0.000
    Core 1:
    temp3_input: 22.000
    temp3_max: 74.000
    temp3_crit: 94.000
    temp3_crit_alarm: 0.000
    Core 2:
    temp4_input: 21.000
    temp4_max: 74.000
    temp4_crit: 94.000
    temp4_crit_alarm: 0.000
    Core 3:
    temp5_input: 21.000
    temp5_max: 74.000
    temp5_crit: 94.000
    temp5_crit_alarm: 0.000

    Скрипт на данный момент

    #!/bin/bash
    # testov 2019/08/09 v2.9
    #При работе скрипта вся нагрузка выполнения ложится на ресурсы железа Заббикс Сервера!
    #Скрипт мониторинга для lm-sensors с LLD для Zabbix (серверный вариант)

    #Автообнаружение параметров из Lm-sensor
    #Ключ: discovery

    # $1 - это IP и порт узла подключаемого агента
    # $2 - Поиск элементов вывод JSON data, temperature, maxtemp, info,
    # $3 - не используется

    IFS=$'\n'
    JSON="{"data":["
    SEP=""

    if [[ $2 = "discovery" ]]
    then
    get=`zabbix_get -s $1 -k system.run["sensors -u"]`
    get1="sensors"
    for chip in $(echo "${get}" 2>/dev/null|grep -E "^[^:]+$")
    do
    while read sensor
    do
    case $sensor in
    temp*)
    NAMETEMP=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
    UNITS="°C"
    ;;
    fan*)
    NAMEFAN=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
    UNITS="RPM"
    ;;
    in*)
    NAMEVOLT=`$get $chip | grep -B1 -P "$sensor"| grep -vP "$sensor"| tr -d ':'| tr -d ' '`
    UNITS="V"
    ;;
    *)
    UINTS=""
    ;;
    esac
    JSON=$JSON"$SEP{"{#CHIP}":"$chip", "{#SENSOR}":"$sensor", "{#NAMETEMP}":"$NAMETEMP", "{#NAMEFAN}":"$NAMEFAN", "{#NAMEVOLT}":"$NAM$
    SEP=", "
    done<<<$(echo "${get}" $chip 2>/dev/null|grep -E "_input:"|tr -d " "|cut -d_ -f1)
    done
    JSON=$JSON"]}"
    echo $JSON

    # Получение полной информации по команде sensors lm-sensors.sh[{HOST.CONN},info]
    # Получение из всех доступных температур максимальной температуры lm-sensors.sh[{HOST.CONN},maxtemp

    else
    if [[ $2 = "info" ]]
    then
    get=`zabbix_get -s $1 -k system.run["sensors"]`
    for out in $get
    do
    echo "${out}"
    done
    elif [[ $2 = "maxtemp" ]]
    then
    get1=`zabbix_get -s $1 -k system.run["sensors"]`
    maxc=`echo "${get1}" | cut -d"(" -f1 | tr -d ' ' | grep °C | cut -d":" -f2 | cut -f 2 -d + | cut -d"." -f1 | sort -nk1 | tail -n 1`
    for out in $maxc
    do
    echo $out
    done
    fi
    fi
    Last edited by temka35; 09-08-2019, 13:39.
  • temka35
    Junior Member
    • Feb 2018
    • 11

    #2
    Сам спросил сам отвечу решил данную проблему
    в кратце добавил переменную
    filter=`zabbix_get -s $1 -k system.run["sensors -u $chip"]`
    done<<<$(echo "${filter}" 2>/dev/null|grep -E "_input:"|tr -d " "|cut -d_ -f1)

    Кому интересно можно посмотреть тут пока черновая ссылка
    Скрипт Шаблон для Linux LLD LM-Sensors Сделал 2 варианта шаблонов через команду sensors и через команду sensors -u Тут можно почитать О программе LM-Sensors Дополнительные опции, как работает, скачать. Загляните посмотрите Z А так же вариант с напря..

    Comment

    Working...