Донецкий техникум промышленной автоматики

OpenNET: стаття - Побудова графіків для моніторингу стан обладнання (monitoring snmp linux gentoo lm_sensor)

  1. Побудова графіків для моніторингу стан обладнання (monitoring snmp linux gentoo lm_sensor)

Побудова графіків для моніторингу стан обладнання (monitoring snmp linux gentoo lm_sensor)


Ключові слова: monitoring , snmp , linux , gentoo , lm_sensor , ( знайти схожі документи )
From: Дмитро Попов < [email protected]. > Newsgroups: email Date: Mon, 27 Dec 2007 14:31:37 +0000 (UTC) Subject: Побудова графіків для моніторингу стан обладнання Зв'язка: GENTOO + NET-SNMP + APACHE + PGSQL + PHP + BASH + lm_sensor. Жива система: http://eagle.gameway.ru схема План робіт: 1) Підготовка ядра (включення lm_sensor) 2) Компілювання пакету NET-SNMP з lm_sensor 3) Установка PGSQL а) Створення бази таблиць 4) Перенаправлення даних з сенсорів в базу. (Bash) 5) Установка Apache + PHP + GD 6) установка бібліотеки JpGraph 7) Будуємо графік. 1. Підготовка ядра Введення Для початку, пройдемося по основних моментах. На початку необхідно чітко спланувати для чого ваш сервер власне призначений. Продумайте яке навантаження на ньому буде. У моєму прикладі на машині встановлене все програми, але це робилося все в домашніх умовах. Якщо дійсно хтось захоче повторити цю зв'язку, я б рекомендував розбити на 3 основні частини. 1) PgSQL 2) Apache + php + gd 3) Net-SNMP і lm_sensors Перші два пункти на ваш розсуд, а ось 3й, це думаю базові пакети які необхідно поставити на "будь-який" cервер. На практиці буває а "ось ось не погано б мати графік по тим-то даними" і починається апгрейд програм і хвіст який тягне тільки проблеми за собою. Висновок: плануйте попередньо. Як показала практика дані не бувають зайвими, інша справа їх використовувати! В даному матеріалі я показав лише одну маленьку частину того, що можна побудувати маючи під рукою базові пакети не вдаючись до встановлення таких програм як MRTG, RDDTOOL ітд, мені захотелосьсамому помацати, як це будуватися і як це працює. Тим більше коли ви закладається власну математику ви точно знаєте як це працює і ви впевнені що це правильно працює! Я використовував готову бібліотеку "JpGraph" в якій опеределить вже все класи для побудови графіків і це дуже форсувало проект. І так результат всіх моїх винаходів доступний 24 години на http://eagle.gameway.ru . Якщо кого зацікавив цей проект для реалізації у великій мережі: [email protected] 1.1 Вибір дистрибутива Я використовував для своїх експерементів Gentoo Linux 2007.0 впевнений, що це все працює і на інших дистрибутивах вибір за вами. Нам необхідно включити підтримку lm_sensors для нашого обладнання. І так підготуємо наше ядро: root # cd / usr / src / linux root # make menuconfig Результат ваших страждань повинен бути відображений в .config кожен знайде, той модуль кторой йому потрібен. Додам тільки, що використовувалося в якості тестів CPU: Intel Celetron MB: Gigabyte ICH7 # I2C Algorithms # CONFIG_I2C_ALGOBIT = m CONFIG_I2C_ALGOPCF = m CONFIG_I2C_ALGOPCA = m # # I2C Hardware Bus support # CONFIG_I2C_ALI1535 = m CONFIG_I2C_ALI1563 = m CONFIG_I2C_ALI15X3 = m CONFIG_I2C_AMD756 = m CONFIG_I2C_AMD756_S4882 = m CONFIG_I2C_AMD8111 = m CONFIG_I2C_I801 = m CONFIG_I2C_I810 = m CONFIG_I2C_PIIX4 = m CONFIG_I2C_ISA = m CONFIG_I2C_NFORCE2 = m CONFIG_I2C_OCORES = m CONFIG_I2C_PARPORT_LIGHT = m CONFIG_I2C_PROSAVAGE = m CONFIG_I2C_SAVAGE4 = m CONFIG_I2C_SIMTEC = m CONFIG_SCx200_ACB = m CONFIG_I2C_SIS5595 = m CONFIG_I2C_SIS630 = m CONFIG_I2C_SIS96X = m CONFIG_I2C_STUB = m CONFIG_I2C_TINY_USB = m CONFIG_I2C_VIA = m CONFIG_I2C_VIAPRO = m CONFIG_I2C_VOODOO3 = m # # Miscellaneous I2C Chip support # CONFIG_SENSORS_DS1337 = m CONFIG_SENSORS_DS1374 = m CONFIG_SENSORS_EEPROM = m CONFIG_SENSORS_PCF8574 = m CONFIG_SENSORS_PCA9539 = m CONFIG_SENSORS_PCF8591 = m CONFIG_SENSORS_MAX6875 = m # CONFIG_I2C_DEBUG_CORE is no t set # CONFIG_I2C_DEBUG_ALGO is not set # CONFIG_I2C_DEBUG_BUS is not set # CONFIG_I2C_DEBUG_CHIP is not set # # SPI support # # CONFIG_SPI is not set # CONFIG_SPI_MASTER is not set # # Dallas's 1-wire bus # # CONFIG_W1 is not set CONFIG_HWMON = y CONFIG_HWMON_VID = m CONFIG_SENSORS_ABITUGURU = m CONFIG_SENSORS_AD7418 = m CONFIG_SENSORS_ADM1021 = m CONFIG_SENSORS_ADM1025 = m CONFIG_SENSORS_ADM1026 = m CONFIG_SENSORS_ADM1029 = m CONFIG_SENSORS_ADM1031 = m CONFIG_SENSORS_ADM9240 = m CONFIG_SENSORS_K8TEMP = m CONFIG_SENSORS_ASB100 = m CONFIG_SENSORS_ATXP1 = m CONFIG_SENSORS_DS1621 = m CONFIG_SENSORS_F71805F = m CONFIG_SENSORS_FSCHER = m CONFIG_SENSORS_FSCPOS = m CONFIG_SENSORS_GL518SM = m CONFIG_SENSORS_GL520SM = m CONFIG_SENSORS_CORETEMP = m CONFIG_SENSORS_IT87 = m CONFIG_SENSORS_LM63 = m CONFIG_SENSORS_LM75 = m CONFIG_SENSORS_LM77 = m CONFIG_SENSORS_LM78 = m CONFIG_SENSORS_LM80 = m CONFIG_SENSORS_LM83 = m CONFIG_SENSORS_LM85 = m CONFIG_SENSORS_LM87 = m CONFIG_SENSORS_LM90 = m CONFIG_SENSORS_LM92 = m CONFIG_SENSORS_MAX1619 = m CONFIG_SENSORS_MAX6650 = M CONFIG_SENSORS_PC87360 = m CONFIG_SENSORS_PC87427 = m CONFIG_SENSORS_SIS5595 = m CONFIG_SENSORS_SMSC47M1 = m CONFIG_SENSORS_SMSC47M192 = m CONFIG_SENSORS_SMSC47B397 = m CONFIG_SENSORS_VIA686A = m CONFIG_SENSORS_VT1211 = m CONFIG_SENSORS_VT8231 = m CONFIG_SENSORS_W83781D = m CONFIG_SENSORS_W83791D = m CONFIG_SENSORS_W83792D = m CONFIG_SENSORS_W83793 = m CONFIG_SENSORS_W83L785TS = m CONFIG_SENSORS_W83627HF = m CONFIG_SENSORS_W83627EHF = m CONFIG_SENSORS_HDAPS = m CONFIG_SENSORS_APPLESMC = m Далі eagle linux # emerge -pv lm_sensors These are the packages that would be merged, in order: Calculating dependencies ... done! [Ebuild R] sys-apps / lm_sensors-2.10.4 USE = "- sensord" 911 kB Сумарний результат вашого старання повинен бути такий eagle linux # lsmod Module Size Used by it87 19856 0 hwmon_vid 6400 1 it87 i2c_isa 7168 1 it87 i2c_i801 11280 0 eagle linux # sensors it8718-isa-0290 Adapter: ISA adapter in0: +1.36 V (min = +0.00 V, max = +4.08 V) in1: +1.82 V (min = +0.00 V, max = +4.08 V) in2 : +3.34 V (min = +0.00 V, max = +4.08 V) in3: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM in4: +3.07 V (min = +0.00 V, max = +4.08 V) in5: +0.03 V (min = +0.00 V, max = +4.08 V) in6: +1.23 V (min = +0.00 V, max = +4.08 V) in7: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM in8: +4.08 V fan1: +1901 RPM (min = 0 RPM) fan2: 2872 RPM (min = 0 RPM) fan3: 0 RPM (min = 0 RPM) temp1: -53 ° C (low = + 127 ° C, high = + 127 ° C) sensor = thermistor temp2: -2 ° C (low = + 127 ° C, high = + 127 ° C) sensor = thermistor temp3: + 42 ° C (low = + 127 ° C, high = + 90 ° C) sensor = diode vid: +1.088 V e agle linux # Необхідно додати його відповідний рівень завантаження (rc.d) у мене він в default: eagle linux # rc-config show Status of init scripts in runlevel default apache2 [started] lm_sensors [started] local [started] named [started] net.eth0 [started] netmount [started] ntpd [started] postgresql [started] snmpd [started] sshd [started] syslog-ng [started] vixie-cron [started] 2. Компілювання пакету NET-SNMP з lm_sensor У Gentoo цей процес займає не дуже й пошук. Вибираємо прапори і збираємо його з нашим lm_sensor. eagle linux # emerge -pv net-snmp These are the packages that would be merged, in order: Calculating dependencies ... done! [Ebuild U] net-analyzer / net-snmp-5.4.1-r1 [5.4] USE = "ipv6 lm_sensors perl python% * ssl tcpd -X -diskio * -doc -elf * -mfd-rewrites -minimal -rpm ( -selinux) -sendmail -smux "5,003 kB Total: 1 package (1 upgrade), Size of downloads: 5,003 kB Необхідно відредагувати на ваш смак snmpd. і додати його відповідний рівень завантаження (rc.d) у мене він в default: eagle linux # rc-config show Status of init scripts in runlevel default apache2 [started] lm_sensors [started] local [started] named [started] net.eth0 [started] postgresql [started] snmpd [started] sshd [started] syslog-ng [started] vixie-cron [started] Тестування зводиться до того щоб побачити наступне: eagle snmp #snmpwalk -v 2c -c public localhost .1.3.6.1 .4.1.2021.13.16 LM-SENSORS-MIB :: lmTempSensorsIndex.1 = INTEGER: 0 LM-SENSORS-MIB :: lmTempSensorsIndex.2 = INTEGER: 1 LM-SENSORS-MIB :: lmTempSensorsIndex.3 = INTEGER: 2 LM- SENSORS-MIB :: lmTempSensorsDevice.1 = STRING: temp1 LM-SENSORS-MIB :: lmTempSensorsDevice.2 = STRING: temp2 LM-SENSORS-MIB :: lmTempSensorsDevice.3 = STRING: temp3 LM-SENSORS-MIB :: lmTempSensorsValue.1 = Gauge32: 4294914296 LM-SENSORS-MIB :: lmTempSensorsValue.2 = Gauge32: 4294965296 LM-SENSORS-MIB :: lmTe mpSensorsValue.3 = Gauge32: 42000 LM-SENSORS-MIB :: lmFanSensorsIndex.1 = INTEGER: 0 LM-SENSORS-MIB :: lmFanSensorsIndex.2 = INTEGER: 1 LM-SENSORS-MIB :: lmFanSensorsIndex.3 = INTEGER: 2 LM -SENSORS-MIB :: lmFanSensorsDevice.1 = STRING: fan1 LM-SENSORS-MIB :: lmFanSensorsDevice.2 = STRING: fan2 LM-SENSORS-MIB :: lmFanSensorsDevice.3 = STRING: fan3 LM-SENSORS-MIB :: lmFanSensorsValue. 1 = Gauge32: 1923 LM-SENSORS-MIB :: lmFanSensorsValue.2 = Gauge32: 2848 LM-SENSORS-MIB :: lmFanSensorsValue.3 = Gauge32: 0 LM-SENSORS-MIB :: lmMiscSensorsIndex.1 = INTEGER: 0 LM-SENSORS -MIB :: lmMiscSensorsIndex.2 = INTEGER: 1 LM-SENSORS-MIB :: lmMiscSensorsIndex.3 = INTEGER: 2 LM-SENSORS-MIB :: lmMiscSensorsIndex.4 = INTEGER: 3 LM-SENSORS-MIB :: lmMiscSensorsIndex.5 = INTEGER: 4 LM-SENSORS-MIB :: lmMiscSensorsIndex.6 = INTEGER: 5 LM-SENSORS-MIB :: lmMiscSensorsIndex.7 = INTEGER: 6 LM-SENSORS-MIB :: lmMiscSensorsIndex.8 = INTEGER: 7 LM-SENSORS-MIB :: lmMiscSensorsIndex.9 = INTEGER: 8 LM-SENSORS-MIB :: lmMiscSensorsIndex.10 = INTEGER: 9 LM-SENSOR S-MIB :: lmMiscSensorsIndex.11 = INTEGER: 10 LM-SENSORS-MIB :: lmMiscSensorsDevice.1 = STRING: in0 LM-SENSORS-MIB :: lmMiscSensorsDevice.2 = STRING: in1 LM-SENSORS-MIB :: lmMiscSensorsDevice.3 = STRING: in2 LM-SENSORS-MIB :: lmMiscSensorsDevice.4 = STRING: in3 LM-SENSORS-MIB :: lmMiscSensorsDevice.5 = STRING: in4 LM-SENSORS-MIB :: lmMiscSensorsDevice.6 = STRING: in5 LM-SENSORS- MIB :: lmMiscSensorsDevice.7 = STRING: in6 LM-SENSORS-MIB :: lmMiscSensorsDevice.8 = STRING: in7 LM-SENSORS-MIB :: lmMiscSensorsDevice.9 = STRING: in8 LM-SENSORS-MIB :: lmMiscSensorsDevice.10 = STRING : vid LM-SENSORS-MIB :: lmMiscSensorsDevice.11 ​​= STRING: alarms LM-SENSORS-MIB :: lmMiscSensorsValue.1 = Gauge32: 1360 Отримати LM-SENSORS-MIB :: lmMiscSensorsValue.2 = Gauge32: 1824 LM-SENSORS-MIB: : lmMiscSensorsValue.3 = Gauge32: 3343 LM-SENSORS-MIB :: lmMiscSensorsValue.4 = Gauge32: 4080 LM-SENSORS-MIB :: lmMiscSensorsValue.5 = Gauge32: 3072 LM-SENSORS-MIB :: lmMiscSensorsValue.6 = Gauge32: 32 LM-SENSORS-MIB :: lmMiscSensorsValue.7 = Gauge32: одна тисяча двісті тридцять один LM-SENSORS- MIB :: lmMiscSensorsValue.8 = Gauge32: 4080 LM-SENSORS-MIB :: lmMiscSensorsValue.9 = Gauge32: 4080 LM-SENSORS-MIB :: lmMiscSensorsValue.10 = Gauge32: 1088 LM-SENSORS-MIB :: lmMiscSensorsValue.11 = Gauge32 : 34832000 Якщо ви домоглися цього, то пловіна успіху за вами є. 3. Установка PGSQL eagle snmp # emerge -pv postgresql These are the packages that would be merged , in order: Calculating dependencies ... done! [Ebuild R] dev-db / postgresql-8.0.13 USE = "nls pam perl python readline ssl xml * zlib -doc -kerberos -pg-intdatetime (-selinux) -tcl * -test" 7,796 kB Total: 1 package ( 1 reinstall), Size of downloads: 7,796 kB eagle snmp # Вибираємо прапори і збираємо нашу базу PGSQL (або альтернативну "up to you)") створюємо базу. Створення таблиці для даних: CREATE sequence msg_seq_num_ip; CREATE TABLE snmpwalk_cron_ip (id bigint default nextval ( 'msg_seq_num_ip'), oid_id text, host_ip inet, value_trap bigint, current_ts timestamp (0) without time zone NOT NULL DEFAULT now ()); Результат створення повинен бути наступний: 24houts = # SELECT * from snmpwalk_cron_ip limit 1; id | oid_id | host_ip | value_trap | current_ts ---- + -------------------------- + ----------- + ----- ------- + ----------------------- 1 | .1.3.6.1.4.1.2021.4.11.0 | 127.0.0.1 | 504536 | 2007-11-22 11:15:02 (1 row) 4. Перенаправлення даних з сенсорів в базу. (Bash) Для початок створимо скрипт з правами 711: linux # touch sensor.sh і додамо наступні рядки: #! / Bin / bash # опис значення який нам потрібен OID3 = ". 1.3.6.1.4.1.2021.13.16.2.1.3.3" OID4 = ". 1.3.6.1.4.1.2021.13.16.3.1.3.1" OID5 = ". 1.3.6.1 .4.1.2021.13.16.3.1.3.2 "# HOST =" 127.0.0.1 "TEMP1 =` snmpwalk -v 2c -c public1 localhost $ OID3 | awk 'BEGIN {FS = "";} {print $ 4}' `FAN1 = `snmpwalk -v 2c -c public1 localhost $ OID4 | awk 'BEGIN {FS =" ";} {print $ 4}'` FAN2 = `snmpwalk -v 2c -c public1 localhost $ OID5 | awk 'BEGIN {FS =" ";} {print $ 4} '' # Запис в базу psql -d post57 -U vega -c" INSERT INTO snmpwalk_cron_ip (oid_id, host_ip, value_trap) VALUES ( '$ OID3', '$ HOST', '$ TEMP1') ; " psql -d post57 -U vega -c "INSERT INTO snmpwalk_cron_ip (oid_id, host_ip, value_trap) VALUES ( '$ OID4', '$ HOST', '$ FAN1');" psql -d post57 -U vega -c "INSERT INTO snmpwalk_cron_ip (oid_id, host_ip, value_trap) VALUES ( '$ OID5', '$ HOST', '$ FAN2');" Необхідно поставити цей скрипт по крону раз в 5 хвилин (на ваш розсуд) і отримати такий результат: 24hours = # SELECT * from snmpwalk_cron_ip limit 10; id | oid_id | host_ip | value_trap | current_ts ---- + --------------------------------- + ---------- - + ------------ + ------ ---------- 1 | .1.3.6.1.4.1.2021.4.11.0 | 127.0.0.1 | 504536 | 2007-11-22 11:15:02 2 | .1.3.6.1.4.1.2021.4.6 | 127.0.0.1 | 6696 | 2007-11-22 11:15:02 3 | .1.3.6.1.4.1.2021.13.16.2.1.3.3 | 127.0.0.1 | 40000 | 2007-11-22 11:15:02 4 | .1.3.6.1.4.1.2021.13.16.3.1.3.1 | 127.0.0.1 | 1829 | 2007-11-22 11:15:03 5 | .1.3.6.1.4.1.2021.13.16.3.1.3.2 | 127.0.0.1 | 2860 | 2007-11-22 11:15:03 6 | .1.3.6.1.2.1.2.2.1.16.2 | 127.0.0.1 | 3868724396 | 2007-11-22 11:15:03 7 | .1.3.6.1.2.1.2.2.1.10.2 | 127.0.0.1 | 3391331837 | 2007-11-22 11:15:03 8 | .1.3.6.1.4.1.2021.4.11.0 | 127.0.0.1 | 509960 | 2007-11-22 11:20:02 9 | .1.3.6.1.4.1.2021.4.6 | 127.0.0.1 | 12120 | 2007-11-22 11:20:02 10 | .1.3.6.1.4.1.2021.13.16.2.1.3.3 | 127.0.0.1 | 42000 | 2007-11-22 11:20:02 (10 rows) Підведення підсумків: Зараз у нас дані надходять до бази з періодичністю в 5 хвилин з local host, ви без праці можете підключити інші хости досить правильно налаштувати net-snmp і firewall. 5. Установка Apache + PHP + GD Не хотілося б загострити на цьому велику увагу для установки цього господарства на сервер, так як статей з цього просто хмара, єдине на чому хотів би загострити увагу це GD в Gentoo сподобалася зібрати цей пакет як мені завгодно тоесть включити ті прапори які мені потрібні: eagle vega # emerge -pv gd These are the packages that would be merged, in order: Calculating dependencies ... done! [Ebuild R] media-libs / gd-2.0.35 USE = "truetype -fontconfig * -jpeg * -png * -xpm *" 1,185 kB Total: 1 package (1 reinstall), Size of downloads: 1,185 kB eagle vega # emerge -pv apache These are the packages that would be merged, in order: Calculating dependencies ... done! [Ebuild R] www-servers / apache-2.2.6-r5 USE = "ssl -debug -doc -ldap -mpm-event -mpm-itk -mpm-peruser -mpm-prefork -mpm-worker -no-suexec ( -selinux) -static-modules -threads "0 kB Total: 1 package (1 reinstall), Size of downloads: 0 kB eagle vega # [ebuild R] dev-lang / php-5.2.5-r1 USE =" apache2 berkdb bzip2 cli crypt gd gdbm iconv imap ipv6 ncurses nls pcre postgres readline reflection session soap spl ssl truetype unicode xml zlib -adabas -bcmath -birdstep -calendar -cdb -cgi -cjk -concurrentmodphp -ctype -curl -curlwrappers -db2 -dbase -dbmaker -debug -discard-path -doc -empress -empress-bcs -esoob -exif -fastbuild -fdftk -filter -firebird -flatfile -force-cgi-redirect -frontbase -ftp -gd-external -gmp -hash -inifile -interbase -iodbc -java-external -json -kerberos -ldap -ldap-sasl -libedit -mcve -mhash -msql -mssql -mysql -mysqli -oci8 -oci8-instant-client -odbc -pcntl -pdo -pic -posix -qdbm -recode -sapdb -sharedext -sharedmem -simplexml -snmp -sockets -solid -spell -sqlite -suhosin -sybase -sybase-ct -sysvipc -threads -tidy -tokenizer -wddx -xmlreader -xmlrpc -xmlwriter -xpm -xsl -yaz -zip -zip-external "0 kB Total: 1 package (1 reinstall), Size of downloads: 0 kB eagle vega # Результат функції phpinfo (); gd GD Support enabled GD Version bundled (2.0.34 compatible) FreeType Support enabled FreeType Linkage with freetype FreeType Version 2.3.4 T1Lib Support enabled GIF Read Support enabled GIF Create Support enabled JPG Support enabled PNG Support enabled WBMP Support enabled XBM Support enabled Тут як вам завгодно збирайте оптимізуйте на вашь смак. Основним з них є корисним виділеної. 6. Установка бібліотеки JpGraph Пожалу найлегше) інша справа - це використовувати. Коротенько: завантажити архів і Расспаковать його в діррікторію де DocumentRoot у апача і запустити тестовий файл який вам побудує все графіки, які підтримуються вашою конфігурація. Є нюанс з текстом я просто скопіював шрифти з windows і прописав їх в конфігураційних файлах цієї бібліотеки. Повна документація розташований на (уважно прочитайте): http://www.aditus.nu/jpgraph/documentation.php 7. Будуємо графік. За дизайн не сваріть Створюємо папочку cpu в DocumentRoot і додаємо файли cpu.jpg new_g3.php user_data3.php Се того моменту почну по докладніше 1) cpu.jpg - це background для графіка додаємо будь за смаком. 2) new_g3.php - графік 3) user_data3.php - дані від бази. Відкриваємо завісу: new_g3.php <? Php // шлях до бібліотеки JpGraph require_once ( "../../ jpgraph.php"); require_once ( "../../ jpgraph_line.php"); require_once ( "../../ jpgraph_date.php"); require_once ( "../../ jpgraph_bar.php"); // Create a data set in range (50,70) and X-positions DEFINE ( ​​'NDATAPOINTS', 1440); DEFINE ( ​​'SAMPLERATE', 1440); // наші дані з бази include 'user_data3.php'; $ Data = $ array_1; $ Xdata = $ array_2; // Create the new graph $ graph = new Graph (650,200); $ Graph-> SetScale ( "textlin"); $ Graph-> SetShadow (); $ Txt = new Text ( "C"); $ Txt-> SetPos (12,12); $ Txt-> SetFont (FF_FONT1, FS_BOLD); $ Txt-> SetOrientation ( "h"); // $ txt-> SetBox ( 'yellow', 'navy', 'gray'); // $ txt-> SetColor ( "red"); $ Graph-> AddText ($ txt); $ Txt1 = new Text ( "h"); $ Txt1-> SetPos (625,173); $ Txt1-> SetFont (FF_FONT1, FS_BOLD); $ Txt1-> SetOrientation ( "h"); $ Graph-> AddText ($ txt1); $ Txt2 = new Text ( "24 години"); $ Txt2-> SetPos (300,20); $ Txt2-> SetFont (FF_ARIAL, FS_BOLD, 9); $ Txt2-> SetOrientation ( "h"); $ Graph-> AddText ($ txt2); $ Graph -> title-> SetFont (FF_ARIAL, FS_BOLD, 8); // Slightly larger than normal margins at the bottom to have room for // the x-axis labels $ graph-> SetMargin (60,50,10,35); $ Graph-> SetScale ( 'datlin'); // $ graph-> SetScale ( "textlin"); $ Graph-> title-> Set ( "http://eagle.gameway.ru $ date"); // Set the angle for the labels to 90 degrees $ graph-> xaxis-> SetLabelAngle (0); $ Graph-> SetImgFormat ( 'jpeg', 100); // background $ graph-> SetBackgroundImage ( "cpu.jpg", BGIMG_FILLFRAME); // It is possible to adjust the density for the X-axis as well // The following call makes the dates a little more sparse // $ graph-> SetTickDensity (TICKD_NORMAL, TICKD_SPARSE); // The automatic format string for dates can be overridden $ graph-> xaxis-> scale-> SetDateFormat ( 'h: i'); // Adjust the start / end to a specific alignment $ graph-> xaxis-> scale-> SetTimeAlign (MINADJ_1); $ Line = new LinePlot ($ data, $ xdata); $ Line-> SetLegend ( 'CPU temperature'); $ Graph-> yaxis-> HideZeroLabel (); $ Graph-> xgrid-> Show (true, false); $ Graph-> xgrid-> SetColor ('[email protected] '); //$line->SetFillColor('[email protected] '); $ Line-> SetFillColor ('[email protected] '); $ Graph-> Add ($ line); $ Graph-> Stroke (); ?> User_data3.php <? Php $ timestampRightNow = strtotime ( "Now") - (1 * 24 * 60 * 60); $ Date = date ( 'Ymd, H: i: s', $ timestampRightNow); $ Oid_id = ". 1.3.6.1.4.1.2021.13.16.2.1.3.3"; $ Host_ip = "127.0.0.1"; $ Conn = pg_connect ( "host = localhost dbname = 24hours user = 24hours password ="); $ Query = "select value_trap, current_ts from snmpwalk_cron_ip where current_ts> = '$ date' and oid_id = '$ oid_id' and host_ip = '$ host_ip' order by current_ts;"; $ Result = pg_query ($ conn, $ query); $ Rows = pg_num_rows ($ result); for ($ i = 0; $ i <$ rows; $ i ++) {$ final = pg_fetch_array ($ result, $ i); $ Array_1 [$ i] = $ final [ 'value_trap'] / 1000; $ Array_2 [$ i] = strtotime ($ final [ 'current_ts']); } Pg_close ($ conn); ?> Все що виделeнно кольором "основні моменти". Далі дані можна мультиплексировать і відображати ось так політ фантазії не обмежений можна прикрутити smart статистику з гвинтів і намалювати, собсвенно все що душа забажає по snmp ви можете викликати власні скрипти man snmp.conf. Головне показати що це все дуже прозоро і доступно. Тут як ваша фантазія себе поведе Удачі. Inc_Vega (Попов Дмитро)

Обговорення [ RSS ]
  • 1.2 , usr (?), 17:56, 27/12/2007 [ відповісти ]
+ / - А гуглом користуватися і munin знаходити, значить, не вміємо.
  • 2.3 , Iscander (??), 21:17, 27/12/2007 [ ^ ] [ ^^ ] [ ^^^ ] [ відповісти ]
+ / - А читати з початку то що автор написав не читаємо? Неприємно йому rrad, так іпосімпатічнее вийшло, до того ж Munin на Perl і по темі ближче буде cacti.
Вообщем то яка різниця, ніж відображати якщо всередині все на snmp зав'язано)

  • 1.4 , yun (?), 3:48, 28/12/2007 [ відповісти ]
+ / - Як хв. оіди зберігати в окремій таблиці і пов'язувати з таблицею даних через id
  • 1.6 , idtest (?), 2:40, 30/12/2007 [ відповісти ]
+ / - спасибі за доку по налаштуванню sensors, спробую. але для відображення графіків буду використовувати cacti - коли все графіки разом - це є имхо добре
  • 1.7 , chip (Ok), 9:46, 30/12/2007 [ відповісти ]
+ / - Домашнє завдання школяра якесь.

1. Для побудови графіків вводити стільки додаткових сутностей - php і pgsql. Причому судячи з спрямованості всього викладу це звичайний шлюз.

2. Дані виключно пишуться, вигрібати їх пропонується самостійно. Причому для того щоб подивитися за рік агрегированную статистику доведеться ворушити нефігово кількість записів. Подивіться таки як зроблена RRD.

3. По суті Полулях НЕ маштабіруємостью рішення з захардкоженнимі OID'aмі.

4. +1 за творчий підхід.


Додати коментар

Спонсори:

Хостинг:



3.php <?
3.php <?