Translate

неділю, 12 січня 2014 р.

Monitoring SNMP device with Cacti (setup and configuration)

Cacti - опенсорс моніторингова система, написана як фронтенд до утиліт RRDtool (RRD, Round-robin Database, кільцева база даних). RRDtool включають в себе можливість графічного відображення інформації, що зберігається; це може бути зміна в часі завантаження процесора, завантаження мережевого інтерфейсу і тд. 

Cacti є зручним інструментом для задання параметрів побудови графіків за допомогою RRDtool, а також має багато готових темплейтів для відображення звичних даних на кшталт використання ресурсів системи.

У статті я спробую описати його установку та конфігурацію.

Встановлюється все досить просто:

# apt-get update
# apt-get install snmpd cacti cacti-spine

Демон snmpd необхідно установити на всіх машинах, що будуть моніторитись.

Установщик запропонує обрати вебсервер з котрим буде працювати Cacti (Apache чи Lighttpd) та деякі інші питання, з якими необхідно погодитись. У якості веб-сервера я використав Apache.



Надалі Cacti запитає пароль root до бази MySQL та запропонує створити пароль для користувача cacti, від імені якого будуть вестись записи в одноіменну базу. Все насправді досить просто.




Відкриваємо браузер і переходимо до сторінки localhost/cacti. Буде відображене вікно наявності/відсутності програм з якими працюватиме Cacti:


Потім вводимо логін/пароль admin/admin. Після цього буде запропоновоно ввести свій пароль.


І ось Cacti у всій красі:



Наразі налаштовуємо snmpd демон на необхідному сервері, що буде моніторитись.

# vim /etc/snmp/snmpd.conf

Дозволимо конекти на всіх інтерфейсах і закоментуємо доступ до snmpd демону лише з localhost:

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

В секції ACCESS CONTROL налаштуємо доступ до даних, що можуть бути запитані в snmpd.

rocommunity secret  your_IP
rocommunity public  localhost

Тобто з паролем secret із IP "your_IP" та з паролем public лише з localhost можна робити запити до демону, інаше він буде мовчати.

За бажанням заповнюємо свої дані:

sysLocation    Your System Location
sysContact     contact@email.com

Додамо наш тестовий check. Для навчальних цілей створимо простий perl-скипт, що генеруватиме випадковы числа від 1 до 10:

# vim /tmp/random2.pl

#!/usr/bin/perl -w
print int(rand(10));

І дамо йому звісно права на запуск:

# chmod +x /tmp/random2.pl

Додамо можливість запуску скрипта при кожному запиті через SNMP:

# vim /etc/snmp/snmpd.conf
...
exec .1.3.6.1.4.1.2021.8.1 random /tmp/random2.pl
...

Перевантажуємо сервіс:

# service snmpd restart

Та перевіряємо його роботу:

# snmpwalk -v 2c -c secret 192.168.1.105 .1.3.6.1.4.1.2021.8.1
iso.3.6.1.4.1.2021.8.1.1.1 = INTEGER: 1
iso.3.6.1.4.1.2021.8.1.2.1 = STRING: "random"
iso.3.6.1.4.1.2021.8.1.3.1 = STRING: "/tmp/random2.pl"
iso.3.6.1.4.1.2021.8.1.100.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "8"
iso.3.6.1.4.1.2021.8.1.102.1 = INTEGER: 0
iso.3.6.1.4.1.2021.8.1.103.1 = ""

Чи можна запитати окреме значення подібним чином:

# snmpwalk -v 2c -c secret 192.168.1.105 .1.3.6.1.4.1.2021.8.1.101.1
iso.3.6.1.4.1.2021.8.1.101.1 = STRING: "9"

У останніх версіях замість exec необхідно використовувати extend. Використання exec призводить до наступної помилки в логах:

Jan 20 12:46:35 someserver snmpd[127721]: /etc/snmp/snmpd.conf: line 418: Error: ERROR: This output format has been deprecated - Please use the 'extend' directive instead
Jan 20 12:46:35 someserver snmpd[127721]: net-snmp: 1 error(s) in config file(s)
Jan 20 12:46:35 someserver snmpd[127721]: NET-SNMP version 5.7.2

Синтаксис використання extend майже аналогічний:

# vim /etc/snmp/snmpd.conf
...
extend .1.3.6.1.4.1.14467.25 0 /bin/cat /etc/snmp/status.txt
...

Альтернативою extend може бути pass (хоча не впевнений, що Cacti розуміє pass). Синтаксис аналогічний:

# vim /etc/snmp/snmpd.conf
...
pass .1.3.6.1.4.1.14467.25 /tmp/snmp_script.sh
...

Але є вимоги до виводу даних від скрипта /tmp/snmp_script.sh. Скрипт має виводити приблизно наступне:

$ bash /tmp/snmp_script.sh -a string -g .1.3.6.1.4.1.14467.25
.1.3.6.1.4.1.14467.25
string
0;The argument is string

Тобто скрипт має вивести OID, що аналогічний тому, що вже введений в snmpd.conf. В принципі не важливо як його передавати скрипту. Далі тип даних, що буде виведено. Окрім string, може бути, наприклад, ще gauge і т.п. Остання стрічка - це код повернення роботи скрипта, та корисний вивід перевірки. Перед запуском перевірки, необхідно перевантажувати snmpd:

service snmpd restart
# snmpget -v2c -Cf -c p@ssw0rd localhost .1.3.6.1.4.1.14467.25
SNMPv2-SMI::enterprises.1.14467.25 = STRING: "0;The argument is string"


Із SNMP закінчили, переходимо до налаштування Cacti.

Додаємо пароль доступу для snmpd (параметр rocommunity, згаданий вище) до Cacti:


Далі додамо хост, що будемо моніторити. Тиснемо Devices --> Add і вводимо все як на малюнку:



Якщо зі з'єднанням із сервером все добре, можна побачити сервісні дані SNMP вгорі ліворуч:

Додаємо Data Sources:


Обираємо SNMP - Generic OID Template та хост створений вище:


Вводимо OID, що генеруватиме snmpd-демон і про який говорили вище, та зберігаємо. Якщо ваш тестовий скрипт чи перевірка віддаватиме досить великі значення - то варто також звернути увагу на параметр Maximum Value:


І зовсім скоро (необхідно зачекати хвилин 10) графік почне малюватись:



Ось так, досить просто додати графік будь-якого значення, що може віддавати snmpd.

UPD. Іноді наявних темплейтів недостатньо для побудови необхідних графіків чи для наочності може виникнути бажання відображати декілька графіків на одній системі координат, тому надіюсь, що описання створення темплейтів, мова про яких піде далі, буде корисним для когось.

Будемо далі вести тему про snmpd-демон. Припустимо, що запит snmpwalk до необхідного хосту повертатиме декілька значень:

# snmpwalk -v 2c -c secret localhost  .1.3.6.1.4.1.2021.8.1
...
SNMPv2-SMI::enterprises.2021.8.1.101 = STRING: "130"
SNMPv2-SMI::enterprises.2021.8.1.102 = STRING: "11"

Звісно, що можна звернутись до кожного із значень окремо, щось на зразок:

# snmpwalk -v 2c -c secret localhost  .1.3.6.1.4.1.2021.8.1.101
SNMPv2-SMI::enterprises.14467.25.4.1.2.1.48.2 = STRING: "130"

Snmpd налаштовано - тому можна переходити до створення Data Template в Cacti. Тиснемо Data Templates -->Add:


Cтворюємо два темплейти: random та random2 (на скріншоті створення лише одного):


Обираємо такі ж значення та зберігаємо.
Створюємо темплейт для графіків: обираємо Graph Templates --> Add:


Заповнюємо як на наступному скріншоті і зберігаємо:


Потім додаємо Data Templates, котрі створили попередньо і для цього тиснемо Add:


Додаємо кожен із темплейтів на майбутній графік:



І ось що з того має вийти:


Зберігаємо темплейт і переходимо до задання серверу, котрий будемо моніторити. Для цього тиснемо Devices --> Add, і набираємо все як на скріншоті:


Звісно, що localhost у якості хостнейму я обрав лише у якості прикладу. Зберігаємо і переходимо до створення двох секцій у розділі Data Sources. Обираємо Data Template та Host (все попередньостворене) як на зображенні:


І вбиваємо OID .1.3.6.1.4.1.2021.8.1.101.2 (або ж інший, якщо snmpd віддає змінну по іншому OID):


Зберігаємо і повторюємо все теж саме для наступного OID .1.3.6.1.4.1.2021.8.1.101.1:



Все що з цього вийшло:


І, нарешті будуємо графік, для чого тиснемо Graph Management --> Add:


Обираємо Data Source для кожного із графіків:


Зовсім скоро графік почне малюватись:


Ось так все виглядає за досить трвалий момент часу:


Для того щоб побудувати такі ж графіки для всіх іншого хосту необхідно буде лиш описати його в секцій Devices та додати Data Source для кожного OID.

Якщо виникли якісь питання - прошу в коментарі!

Посилання.
https://www.digitalocean.com/community/articles/installing-the-cacti-server-monitor-on-ubuntu-12-04-cloud-server
http://www.cacti.net/downloads/docs/html/how_to.html
http://docs.cacti.net/manual:087:1_installation.1_install_unix.4_configure_snmp
http://penguinman-techtalk.blogspot.com/2009/03/cacti-graphing-remote-service-without.html
http://www.cacti.net/downloads/docs/html/graph_snmp_oid.html
http://www.pawelko.net/Cacti/16-Cacti-Simple-Oid
http://forums.cacti.net/viewtopic.php?f=21&t=40235
https://geekpeek.net/extend-snmp-run-bash-scripts-via-snmp/
http://net-snmp.sourceforge.net/wiki/index.php/FAQ:Agent_07

Немає коментарів:

Дописати коментар