The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Мониторинг загрузки многоядерного с..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Мониторинг загрузки многоядерного с..."  +/
Сообщение от auto_tips (??) on 24-Янв-12, 23:14 
Исходная задача: по SNMP загрузить параметры загруженности CPU с сервера по каждому ядру в отдельности (ОС Linux).


Простое решение:

Необходимые данные можно получить из файла /proc/stat
Описание структуры файла было вскоре найдено здесь http://www.linuxhowtos.org/System/procstat.htm

И так же был обнаружен простенький пример реализации (shell скрипт): http://colby.id.au/node/39

Осталось все это прикрутить к SNMP. У SNMP есть чудесная возможность - создать свой OID и прицепить к нему все что угодно :)

1. Пишем скрипт, в простейшем варианте выглядящий примерно так:

   #!/bin/bash

   PREV_TOTAL0=0
   PREV_TOTAL1=0
   PREV_IDLE0=0
   PREV_IDLE1=0

   while true; do
      CPU0=(`cat /proc/stat | grep '^cpu0 '`) # Общая картинка по cpu0
      CPU1=(`cat /proc/stat | grep '^cpu1 '`) # Общая картинка по cpu1
      unset CPU0[0] # отрезаем первый столбец (cpu0)
      unset CPU1[0] # отрезаем первый столбец (cpu1)
      IDLE0=${CPU0[4]} # время простоя cpu0.
      IDLE1=${CPU1[4]} # время простоя cpu1.

      # Подсчитаем суммарное время по cpu0
      TOTAL0=0
      for VALUE0 in "${CPU0[@]}"; do
         let "TOTAL0=$TOTAL0+$VALUE0"
      done

      # Подсчитаем суммарное время по cpu1
      TOTAL1=0
      for VALUE1 in "${CPU1[@]}"; do
         let "TOTAL1=$TOTAL1+$VALUE1"
      done

      # Подсчитаем дельту с момента последнего замера по CPU0.
      let "DIFF_IDLE0=$IDLE0-$PREV_IDLE0"
      let "DIFF_TOTAL0=$TOTAL0-$PREV_TOTAL0"

      # Вычисляем процент использования CPU0
      let "DIFF_USAGE0=(1000*($DIFF_TOTAL0-$DIFF_IDLE0)/$DIFF_TOTAL0+5)/10"

      # Подсчитаем дельту с момента последнего замера по CPU1.
      let "DIFF_IDLE1=$IDLE1-$PREV_IDLE1"
      let "DIFF_TOTAL1=$TOTAL1-$PREV_TOTAL1"

      # Вычисляем процент использования CPU1
      let "DIFF_USAGE1=(1000*($DIFF_TOTAL1-$DIFF_IDLE1)/$DIFF_TOTAL1+5)/10"

      #Результаты пишем в файлик
      echo "$DIFF_USAGE0">/opt/cpu_load
      echo "$DIFF_USAGE1">>/opt/cpu_load

      # Запоминаем текущее состояние, понадобиться при следующем цикле
      PREV_TOTAL0="$TOTAL0"
      PREV_TOTAL1="$TOTAL1"

      PREV_IDLE0="$IDLE0"
      PREV_IDLE1="$IDLE1"


      #exit
      # Собственно пауза перед следующим замером...
      sleep 59
   done


В файл конфигурации /etc/snmpd.conf добавляем строчку например такого вида

   exec .1.3.6.1.4.1.2021.54 cpu /bin/cat /opt/cpu_load

Что нам это дает (после перезапуска/запуска snmpd):

   snmpwalk -v 2c -c <community> <server_name> 1.3.6.1.4.1.2021.54

   UCD-SNMP-MIB::ucdavis.54.1.1 = INTEGER: 1
   UCD-SNMP-MIB::ucdavis.54.2.1 = STRING: "cpu"
   UCD-SNMP-MIB::ucdavis.54.3.1 = STRING: "/bin/cat /opt/cpu_load"
   UCD-SNMP-MIB::ucdavis.54.100.1 = INTEGER: 0
   UCD-SNMP-MIB::ucdavis.54.101.1 = STRING: "1"
   UCD-SNMP-MIB::ucdavis.54.101.2 = STRING: "2"

Собственно

   UCD-SNMP-MIB::ucdavis.54.101.1 = STRING: "1 - загрузка CPU0
   UCD-SNMP-MIB::ucdavis.54.101.2 = STRING: "2" - загрузка CPU1


Осталось добавить это в рисовалку и все.

URL:
Обсуждается: http://www.opennet.me/tips/info/2660.shtml

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "Мониторинг загрузки многоядерного сервера по каждому ядру в "  +/
Сообщение от Олег (??) on 24-Янв-12, 23:14 
Что не понял, в htop это все и так есть
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от Michael Shigorin email(ok) on 25-Янв-12, 01:12 
collectd не смотрели?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от mike_t on 25-Янв-12, 09:30 
чем HOST-RESOURCES-MIB::hrProcessorLoad не устроил?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от Аноним (??) on 25-Янв-12, 20:33 
На линуксе его наверно нет)
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от mike_t on 26-Янв-12, 08:52 
наверно у меня какой-то не правильный линукс :(
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Мониторинг загрузки многоядерного сервера по каждому ядру в "  +/
Сообщение от fantom (ok) on 26-Янв-12, 11:19 
Просветите, как из htop эту инфу в snmp запихнуть?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

7. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 26-Янв-12, 11:27 
Нет, не смотрел...
Насколько понял из описания он скорее для задачки "наоборот" т.е. снимать с чего-то по SNMP статистику и отправлять ее средсвами collectd дальше.
Я хотел снять статистику именно по snmp как с любой другой железки типа роутера или свича.

Или я неправ?

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

8. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 26-Янв-12, 12:19 
Поиск о нем ничего не выдал :)
При поиске инфы в инете было обнаружено:

1. http://linuxportal.ru/forums/index.php/m/69003/
Не очень удобно - надо потом скриптом вывод парсить.

2. http://www.qinet.ru/2010/09/311/
Но в этих OID нет поядерной статистики.

насчет
HOST-RESOURCES-MIB::hrProcessorLoad

snmpwalk -v 2c -c <comm> <host> hrProcessorLoad
HOST-RESOURCES-MIB::hrProcessorLoad = No Such Object available on this agent at this OID

Не подскажете как snmpd заставить оный отдавать? потестим-пощупаем что оно такое.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

9. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от Рудвульф email on 26-Янв-12, 14:50 
Собственно я не понимаю зачем такие мучения

# snmpwalk -v2c -c public localhost .1.3.6.1.2.1.25.3.3.1
iso.3.6.1.2.1.25.3.3.1.1.768 = OID: ccitt.0
iso.3.6.1.2.1.25.3.3.1.1.769 = OID: ccitt.0
iso.3.6.1.2.1.25.3.3.1.2.768 = INTEGER: 3
iso.3.6.1.2.1.25.3.3.1.2.769 = INTEGER: 2

усе работает - взял из штатных скриптов какти. PPS    Collectd и Monit   малофункциональные решения, какти рулит.  

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 26-Янв-12, 15:04 
> Собственно я не понимаю зачем такие мучения
> # snmpwalk -v2c -c public localhost .1.3.6.1.2.1.25.3.3.1
> iso.3.6.1.2.1.25.3.3.1.1.768 = OID: ccitt.0
> iso.3.6.1.2.1.25.3.3.1.1.769 = OID: ccitt.0
> iso.3.6.1.2.1.25.3.3.1.2.768 = INTEGER: 3
> iso.3.6.1.2.1.25.3.3.1.2.769 = INTEGER: 2
> усе работает - взял из штатных скриптов какти. PPS    
> Collectd и Monit   малофункциональные решения, какти рулит.

Повторю вопрос - как пнуть snmpd чтобы он сие отдал?

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от Аноним (??) on 26-Янв-12, 20:18 
На snmpd не знаю, а вот на фряшном bsnmpd с установленным bsnmp-ucd оно работает.
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от mike_t on 27-Янв-12, 09:17 
у меня из коробки работает
net-snmp 5.5
Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

14. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 28-Янв-12, 12:39 
> На snmpd не знаю, а вот на фряшном bsnmpd с установленным bsnmp-ucd
> оно работает.

Как пнуть snmpd нашел, любопытнейшая вещь этот snmpd оказывается. :)

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

15. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 28-Янв-12, 12:46 
> Собственно я не понимаю зачем такие мучения
> # snmpwalk -v2c -c public localhost .1.3.6.1.2.1.25.3.3.1
> iso.3.6.1.2.1.25.3.3.1.1.768 = OID: ccitt.0
> iso.3.6.1.2.1.25.3.3.1.1.769 = OID: ccitt.0
> iso.3.6.1.2.1.25.3.3.1.2.768 = INTEGER: 3
> iso.3.6.1.2.1.25.3.3.1.2.769 = INTEGER: 2
> усе работает - взял из штатных скриптов какти. PPS    
> Collectd и Monit   малофункциональные решения, какти рулит.

В процессе изучения вопроса узнал много для себя нового...
Например теперь запросто можно снимать загрузку проца усредненную по любому промежутку времени - от 1 секунды и больше, мониторить максимальную за нужный интервал (минута, 2, 3 и т.д.).

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

16. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от mike_t on 31-Янв-12, 12:43 
и что ему не хватало?
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Мониторинг загрузки многоядерного сервера по каждому ядру в ..."  +/
Сообщение от fantom (ok) on 31-Янв-12, 12:56 
> и что ему не хватало?

Строчки
view    systemview      included        .1.3.6.1.2.1.25.3.3.1
В конфиге :)

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру