Оглавление
- Введение
- Подготовка
- Мониторинг сетевых служб сервера и отображение статистики по трафику с разделением по портам и протоколам
- Мониторинг и отображение статистики загрузки центрального процессора, использования памяти и количества запущенных процессов
- Мониторинг и отображение температуры центрального процессора, чипов и материнской платы
- Мониторинг и отображение температуры жестких дисков сервера
- Заключение
Мониторинг и отображение температуры жестких дисков сервера с помощью RRDTOOL
Для получения данных о жестких дисках под FreeBSD в портах имеется пакет утилит smartmontools. Его возможности довольно широки, но я его хочу задействовать только лишь для получения информации о температуре и подробного руководства по smartmontools писать не буду (пока!). На данном этапе, просто установите пакет и портов:
# cd /usr/ports/sysutils/smartmontools/ # make install clean
После установки в Ваших руках окажется утилита smartctl которая может показать довольно обширную информацию о том или ином жестком диске. Правда не о каждом, а только о том, который поддерживает технологию S.M.A.R.T. Поддерживаются ATA-3 и более поздние ATA, IDE и SCSI-3. За более подробной информацией лучше обратиться в man smartctl. Что можно извлечь с помощью smartctl:
# smartctl -a /dev/ad0
smartctl version 5.38 [i386-portbld-freebsd7.1] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/
=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.7 and 7200.7 Plus family
Device Model: ST3120026A
Serial Number: 5JS6GAJ1
Firmware Version: 8.54
User Capacity: 120 034 123 776 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 6
ATA Standard is: ATA/ATAPI-6 T13 1410D revision 2
Local Time is: Tue Apr 7 23:45:54 2009 EEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x82) Offline data collection activity
was completed without error.
Auto Offline Data Collection: Enabled.
Self-test execution status: ( 0) The previous self-test routine completed
without error or no self-test has ever
been run.
Total time to complete Offline
data collection: ( 430) seconds.
Offline data collection
capabilities: (0x5b) SMART execute Offline immediate.
Auto Offline data collection on/off support.
Suspend Offline collection upon new
command.
Offline surface scan supported.
Self-test supported.
No Conveyance Self-test supported.
Selective Self-test supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
Short self-test routine
recommended polling time: ( 1) minutes.
Extended self-test routine
recommended polling time: ( 85) minutes.
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 059 056 006 Pre-fail Always - 91272753
3 Spin_Up_Time 0x0003 097 096 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 40
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0
7 Seek_Error_Rate 0x000f 087 060 030 Pre-fail Always - 551657551
9 Power_On_Hours 0x0032 084 084 000 Old_age Always - 14621
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 097 097 020 Old_age Always - 3262
194 Temperature_Celsius 0x0022 052 065 000 Old_age Always - 52
195 Hardware_ECC_Recovered 0x001a 059 056 000 Old_age Always - 91272753
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x003e 200 185 000 Old_age Always - 1049
200 Multi_Zone_Error_Rate 0x0000 100 253 000 Old_age Offline - 0
202 TA_Increase_Count 0x0032 100 253 000 Old_age Always - 0
SMART Error Log Version: 1
ATA Error Count: 207 (device log contains only the most recent five errors)
CR = Command Register [HEX]
FR = Features Register [HEX]
SC = Sector Count Register [HEX]
SN = Sector Number Register [HEX]
CL = Cylinder Low Register [HEX]
CH = Cylinder High Register [HEX]
DH = Device/Head Register [HEX]
DC = Device Command Register [HEX]
ER = Error register [HEX]
ST = Status register [HEX]
Powered_Up_Time is measured from power on, and printed as
DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes,
SS=sec, and sss=millisec. It "wraps" after 49.710 days.
Error 207 occurred at disk power-on lifetime: 10047 hours (418 days + 15 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 01 4b 00 00 e0 Error: ICRC, ABRT 1 sectors at LBA = 0x0000004b = 75
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c8 00 01 4b 00 00 e0 00 00:48:25.334 READ DMA
c8 00 01 4b 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 4b 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 4a 00 00 e0 00 00:48:24.683 READ DMA
c8 00 01 49 00 00 e0 00 00:48:24.683 READ DMA
Error 206 occurred at disk power-on lifetime: 10047 hours (418 days + 15 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 01 4b 00 00 e0 Error: ICRC, ABRT 1 sectors at LBA = 0x0000004b = 75
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c8 00 01 4b 00 00 e0 00 00:48:25.334 READ DMA
c8 00 01 4b 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 4a 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 49 00 00 e0 00 00:48:24.683 READ DMA
c8 00 01 48 00 00 e0 00 00:48:24.683 READ DMA
Error 205 occurred at disk power-on lifetime: 10047 hours (418 days + 15 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 01 4b 00 00 e0 Error: ICRC, ABRT 1 sectors at LBA = 0x0000004b = 75
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c8 00 01 4b 00 00 e0 00 00:46:59.959 READ DMA
c8 00 01 4a 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 49 00 00 e0 00 00:48:24.684 READ DMA
c8 00 01 48 00 00 e0 00 00:48:24.683 READ DMA
c8 00 01 47 00 00 e0 00 00:48:24.683 READ DMA
Error 204 occurred at disk power-on lifetime: 10044 hours (418 days + 12 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 01 4e 00 00 e0 Error: ICRC, ABRT 1 sectors at LBA = 0x0000004e = 78
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c8 00 10 3f 00 00 e0 00 02:01:58.942 READ DMA
c8 00 10 3f 00 00 e0 00 02:01:58.942 READ DMA
c8 00 10 3f 00 00 e0 00 02:01:58.941 READ DMA
c8 00 10 4f 00 00 e0 00 02:01:58.941 READ DMA
c8 00 10 bf 00 00 e0 00 02:01:58.940 READ DMA
Error 203 occurred at disk power-on lifetime: 10044 hours (418 days + 12 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
84 51 01 4e 00 00 e0 Error: ICRC, ABRT 1 sectors at LBA = 0x0000004e = 78
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
c8 00 10 3f 00 00 e0 00 02:01:58.942 READ DMA
c8 00 10 3f 00 00 e0 00 02:01:58.942 READ DMA
c8 00 10 4f 00 00 e0 00 02:01:58.941 READ DMA
c8 00 10 bf 00 00 e0 00 02:01:58.941 READ DMA
c8 00 02 3f 00 00 e0 00 02:01:58.940 READ DMA
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 10044 -
# 2 Short offline Completed without error 00% 10043 -
SMART Selective self-test log data structure revision number 1
SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS
1 0 0 Not_testing
2 0 0 Not_testing
3 0 0 Not_testing
4 0 0 Not_testing
5 0 0 Not_testing
Selective self-test flags (0x0):
After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.
Дофига всякой инфы о HDD. Но нам из всего этого нужно только одно:
# smartctl -a /dev/ad0 | grep "Temperature_Celsius" 194 Temperature_Celsius 0x0022 052 065 000 Old_age Always - 52
Последний столбец - именно то, что нам нужно. Отделим его в будущем с помощью awk, но для начала создадим новую базу RRD, которая полностью продублирует базу SYSTEM_TEMPERATURE.rrd (из предыдущего примера), просто изменятся имена DS.
Создание базы данных RRD для хранения статистики температуры жестких дисков сервера
Всего у меня в системе три жестких диска и для каждого будет отслеживаться температура. Диски в системе расположены как: ad0 ad1 и ad3. Скрипт для создания базы:
Сохраните скрипт и выполните его. Перейдем к накоплению статистики.
Наполнение базы данных RRD значениями температуры жестких дисков сервера
Скрипт, с помощью которого по cron'у мы будем вносить значения температуры дисков выглядит так:
#!/bin/sh
#
# Created by Daemony | http://daemony.org/
#
RRDPREFIX=/usr/NET/rrd
MONITOR="/usr/local/sbin/smartctl -a "
ad0temp=`$MONITOR /dev/ad0 | grep "Temperature_Celsius" | awk -F " " '{print $10}'`
ad1temp=`$MONITOR /dev/ad1 | grep "Temperature_Celsius" | awk -F " " '{print $10}'`
ad3temp=`$MONITOR /dev/ad3 | grep "Temperature_Celsius" | awk -F " " '{print $10}'`
`/usr/local/bin/rrdtool update $RRDPREFIX/HDD_TEMPERATURE.rrd N:$ad0temp:$ad1temp:$ad3temp`
Вообще, можно было бы объединить скрипты, собирающие статистику температуры ЦПУ, материнской платы, чипов и температуры жестких дисков. Но расписано все по отдельности для более быстрого понимания читателем. А Вы уже вольны переписывать свои скрипты как пожелаете.
Скрипт обновления базы RRD (назовем его UPDATE_HDD_TEMPERATURE.sh) с температурой дисков помещаем в /etc/crontab
###################
# COUNTERS
###################
#
# ---- RRDdb Updates ----
*/1 * * * * root /usr/NET/scripts/UPDATE_TRAF.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_CPU-RAM-PS.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_SYSTEM_TEMPERATURE.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_HDD_TEMPERATURE.sh >/dev/null 2>&1
# ---- RRDdb Create graphs ----
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_TRAF.sh >/dev/null 2>&1
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_SYSTEM.sh >/dev/null 2>&1
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_SYSTEM_TEMPERATURE.sh >/dev/null 2>&1
Можно перейти к графикам.
Построение графиков статистики температуры жестких дисков сервера
И последний на сегодня пример скрипта. Он практически такой же, как и тот, что был в предыдущем примере. Но, поскольку температура всех трех моих HDD практически одинаковая, и дабы они не перекрывали друг друга своими площадями, я буду использовать вместо AREA - LINE1. Скрипт таков:
Готово. Сохраняем его с именем, например, CREATE_GRAPH_HDD_TEMPERATURE.sh и вешаем в /etc/crontab
###################
# COUNTERS
###################
#
# ---- RRDdb Updates ----
*/1 * * * * root /usr/NET/scripts/UPDATE_TRAF.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_CPU-RAM-PS.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_SYSTEM_TEMPERATURE.sh >/dev/null 2>&1
*/1 * * * * root /usr/NET/scripts/UPDATE_HDD_TEMPERATURE.sh >/dev/null 2>&1
# ---- RRDdb Create graphs ----
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_TRAF.sh >/dev/null 2>&1
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_SYSTEM.sh >/dev/null 2>&1
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_SYSTEM_TEMPERATURE.sh >/dev/null 2>&1
*/5 * * * * root /usr/NET/scripts/CREATE_GRAPH_HDD_TEMPERATURE.sh >/dev/null 2>&1
И наслаждаемся жизнью.
ЗАКЛЮЧЕНИЕ
Уважаемый читатель, я очень надеюсь, что на твой взгляд мне удалось доходчиво и понятно изложить все написанное. Если что не так, сильно не пинай. Твои комментарии в виде дополнений или исправлений, как обычно, приветствуются.
Теперь, понимая основной смысл работы RRD, Вы без труда нарисуете для себя графики за любой период времени. Для этого достаточно будет поменять значение --start.
- --start -1d - для периода в одни день;
- --start -1w - для периода в одну неделю;
- --start -1m - для периода в один месяц;
- --start -1y - для периода в один год.
В будущем, возможно, данная публикация будет дополнена и/или исправлена, если понадобится собирать и обсчитывать статистику чего-то еще.
Все 6-ти часовые графики моего сервера Вы можете увидеть на странице блога "МОНИТОР", а также графики за последние 24 часа, за последние три дня, за последнюю неделю и последний месяц по ссылкам:
Благодарю читателя под ником Qaz за указание на проблему, в следствии которой во всех листингах скриптов движком сайта были затерты все обратные слеши. Если Вы где-то заметили недостающий (либо лишний) слеш, дайте мне об этом знать удобным Вам способом.
Удачи!
| Предыдущая страница |










Вторник, 15 ноября, 2011 в 15:05:24
а Munin ваще прелесть =)
Вторник, 15 ноября, 2011 в 15:04:31
Cacti давно уже упрощает труд
Воскресенье, 30 октября, 2011 в 10:02:33
«Количество килобайт на страницу можно посмотреть командой:
# sysctl hw.pagesize» — s/килобайт/байт/
Понедельник, 3 января, 2011 в 17:13:02
Очень подробная статья! Спасибо!
Побольше бы таких описаний в сети!
Пятница, 9 апреля, 2010 в 14:50:56
и ссылка не работает:
http://daemony.org/statistics