Ключевые слова:monitoring, snmp, linux, gentoo, lm_sensor, (найти похожие документы)
From: Дмитрий Попов <incvega@gmail.com.>
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 .
Если кого заинтересовал этот проект для реализации в крупной сети:
incvega@gmail.com
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 not 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
eagle 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::lmTempSensorsValue.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-SENSORS-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: 1231
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 )") создаем базу.
Cоздание таблицы для данных:
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.php7. Строим график.
За дизайн не ругайте
Создаем папочку 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('black@0.8');
//$line->SetFillColor('chartreuse2@0.6');
$line->SetFillColor('lime@0.4');
$graph->Add($line);
$graph->Stroke();
?>
user_data3.php
<?php
$timestampRightNow = strtotime("Now")- (1 * 24 * 60 * 60);
$date = date('Y-m-d, 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(Попов Дмитрий)
А читать с начала то что автор написал не читаем? Претит ему rrad, да ипосимпатичнее получилось, к тому же Munin на Perl и по теме ближе будет cacti.
Вообщем то какая разница, чем отображать если внутри всё на snmp завязано)
1. Для построения графиков вводить столько дополнительных сущностей - php и pgsql. Причем судя по направленности всего изложения это обычный шлюз.
2. Данные исключительно пишутся, выгребать их предлагается самостоятельно. Причем для того чтобы посмотреть за год агрегированную статистику придется ворошить нефиговое кол-во записей. Посмотрите таки как сделана RRD.
3. По сути полулось не маштабируемое решение с захардкоженными OID'aми.