[OpenBSD] Мониторинг SNMPv2 скрипт (python 2.7)

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

Аватара пользователя
Stauffenberg
Сообщения: 2017
Статус: ☮ PEACE ☮
ОС: открытая и свободная

[OpenBSD] Мониторинг SNMPv2 скрипт

Сообщение Stauffenberg » 01.12.2016 00:29

Всем привет :cc_jockey:

Просто хочу поделиться своим python-скриптом для мониторинга OpenBSD систем.

Информацию получем по SNMPv2. Для этого вызывается snmpwalk, вывод от которого потом парсится. Не самое лучшее решение, возможно перепишу чтобы использовалась SNMP-библиотека python.

Я продолжаю работать над ним. Есть пару вещей, которые можно улучшить или даже переделать.
Скрипт очень прост. Если есть желание, не стесняйтесь комментировать. Будет интересно узнать ваше мнение.
Следующая версия будет наверное под BSD лицензией.

Общая информация о системе:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public os

Uname:   OpenBSD pizza.home 5.8 GENERIC.MP#1098 i386
Uptime:  Timeticks: (453900) 1:15:39.00
CPU:     Intel(R) Atom(TM) CPU N270 @ 1.60GHz (\"GenuineIntel\" 686-class)
Contact: root@pizza.home


Работаем с ФС:
Обзор подключенных (подмоунтируемых) ФС в системе:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public file-systems

    SIZE                USED                AVALIABLE           FILE SYSTEM
==================================================================================
 1004.8 Mb         53.4 Mb (5.32 %)       951.3 Mb (94.68 %)    /
   48.4 Gb          2.1 Mb (0.00 %)        48.4 Gb (100.00 %)   /home
    3.9 Gb         10.0 Kb (0.00 %)         3.9 Gb (100.00 %)   /tmp
    2.0 Gb        306.0 Mb (15.20 %)        1.7 Gb (84.80 %)    /usr
 1004.8 Mb        179.7 Mb (17.88 %)      825.1 Mb (82.12 %)    /usr/X11R6
    9.1 Gb         38.8 Mb (0.41 %)         9.1 Gb (99.59 %)    /usr/local
    2.0 Gb          2.0 Kb (0.00 %)         2.0 Gb (100.00 %)   /usr/obj
    2.0 Gb          2.0 Kb (0.00 %)         2.0 Gb (100.00 %)   /usr/src
    7.4 Gb          4.1 Mb (0.05 %)         7.4 Gb (99.95 %)    /var


Проверка используемого места на ФС.
Два последних значения - это warning (exit code 1) и critical (exit code 2), которые понимают Nagios/Icinga.
Формат после пайпа - понимаемый Nagios/Icinga формат для создания графиков.

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public fs:/ 80 90
OK: FS usage 5.32 % [ 53.4 Mb / 1004.8 Mb ]|usage=5.32;80;90;0;0


Работаем с memory и swap:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public mem 80 90
OK: Memory usage 9.09 % [ 162.7 Mb / 1.7 Gb ]|usage=9.09;80;90;0;0

> ./check_snmp_openbsd.py 192.168.2.101 public swap 80 90
OK: Swap usage 0.00 % [ 0.0 b / 2.0 Gb ]|usage=0.00;80;90;0;0


Работаем с CPU:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public cpu 1 2
OK: CPU load average 0 % |'1 min'=0;1;2;0;0


Информация о процессах:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public proc

PID        STATE        TYPE            PROC
================================================================
1          runnable     application     init
1555       runnable     application     smtpd
2444       runnable     application     ntpd
2544       runnable     application     fluxbox
3276       runnable     application     snmpd
4191       runnable     application     cron
4366       runnable     application     ksh
4814       runnable     application     getty std.9600 ttyC3
4982       runnable     application     sndiod
5075       runnable     application     syslogd
5280       runnable     application     snmpd
5591       runnable     application     ntpd
5747       runnable     application     pflogd
8313       runnable     application     smtpd
8512       runnable     application     getty std.9600 ttyC5
9101       runnable     application     xterm
10790      runnable     application     xconsole
13909      runnable     application     ksh -c xterm
14118      runnable     application     smtpd
15133      runnable     application     getty std.9600 ttyC0
15178      runnable     application     dhclient
15426      runnable     application     sshd
17218      runnable     application     syslogd
17802      runnable     application     getty std.9600 ttyC2
18138      runnable     application     Xorg
18156      runnable     application     ntpd
18902      runnable     application     smtpd
20799      runnable     application     smtpd
21303      running      application     snmpd
23465      runnable     application     Xorg :0 vt05 -auth /etc/X11/xdm/authdir/authfiles/A:0-mWQ7LM
23819      runnable     application     xdm
26003      runnable     application     sh /etc/X11/xdm/Xsession
26602      runnable     application     pflogd
26788      runnable     application     getty std.9600 ttyC1
27704      runnable     application     ksh
28564      runnable     application     dhclient
28606      runnable     application     smtpd
28824      runnable     application     xdm
31369      runnable     application     xconsole
32688      runnable     application     smtpd


Есть возможность мониторить количество запущенных процессов:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public proc 80 90
OK: running 40 processes [max 1310]|processes=40;80;90;0;0
> echo $?
0

> ./check_snmp_openbsd.py 192.168.2.101 public proc 30 90
WARNING: running 40 processes [max 1310]|processes=40;30;90;0;0
> echo $?
1

> ./check_snmp_openbsd.py 192.168.2.101 public proc 30 35
CRITICAL: running 40 processes [max 1310]|processes=40;30;35;0;0
> echo $?
2



Информация об интерфейсах:

Код: Выделить всё

> ./check_snmp_openbsd.py 192.168.2.101 public interfaces

NAME       STATE      IP                 MAC                  MTU        TYPE                 CONNECTOR  I/O ERROR
===================================================================================================================
bge0       up         192.168.2.101      0:1f:16:2b:75:cd     1500       ethernetCsmacd       true       0/0
enc0       down                                               0          other                false      0/0
lo0        up         127.0.0.1                               32768      softwareLoopback     false      0/0
pflog0     up                                                 33192      other                false      0/0
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали:

Аватара пользователя
Stauffenberg
Сообщения: 2017
Статус: ☮ PEACE ☮
ОС: открытая и свободная

Re: [OpenBSD] Мониторинг SNMPv2 скрипт

Сообщение Stauffenberg » 02.12.2016 05:02

Заменил sys.argv[] модулем argparse. Не знаю интересно ли кому-то.
v0.5 теперь BSD license.

Код: Выделить всё

> ./check_snmp_openbsd.py -h
usage: check_snmp_openbsd.py [-h] [--version] -H HOST -C COMMUNITY -O OPTION
                             [-w WARNING] [-c CRITICAL]

optional arguments:
  -h, --help    show this help message and exit
  --version     show program's version number and exit
  -H HOST       IP addess or hostname of the target host
  -C COMMUNITY  SNMPv2 community
  -O OPTION     What sould be checked. This can be cpu, memory, swap, fs or
                number of running processes
  -w WARNING    WARNING value
  -c CRITICAL   CRITICAL value

      _____                 ____   _____ _____
     / ___ \               |  _ \ / ____|  __ \
    / /  / /___  ___  ____ | |_) | (___ | |  | |
   / /  / / __ \/ _ \/ __ \|  _ < \___ \| |  | |
  / /__/ / /_/ /  __/ / / /| |_) |____) | |__| |
  \_____/ .___/\___/_/ /_/ |____/|_____/|_____/
       /_/
              |    .
          .   |L  /|   .                        This script uses SNMPv2 to check memory/swap usage,
      _ . |\ _| \--+._/| .                             file system space usage and CPU load average
     / ||\| Y J  )   / |/| ./                    on (remote) OpenBSD system. It also shows detailed
    J  |)'( |        ` F`.'/                          information about all avaliable file systems,
  -<|  F         __     .-<                           and configured NICs, system information about
    | /       .-'. `.  /-. L___                                   OS and list of running processes.
    J \      <    \  | | O\|.-'
  _J \  .-    \/ O | | \  |F      EXAMPLES:
 '-F  -<_.     \   .-'  `-' L__
__J  _   _.     >-'  )._.   |-'   > ./check_snmp_openbsd.py -H 127.0.0.1 -C secret -O fs:/var 80 90
`-|.'   /_.           \_|   F     checks file system space usage (in %) on /var.
  /.-   .                _.<
 /'    /.'             .'  `\     > ./check_snmp_openbsd.py -H 127.0.0.1 -C secret -O mem 80 90
  /L  /'   |/      _.-'-\         checks memory usage (in %).
 /'J       ___.---'\|
   |\  .--' V  | `. `             > ./check_snmp_openbsd.py -H 127.0.0.1 -C secret -O file-systems
   |/`. `-.     `._)              shows list of all mounted file systems (including space usage).
      / .-.\
      \ (  `\                     > ./check_snmp_openbsd.py -H 127.0.0.1 -C secret -O interfaces
       `.\                        shows list of all configured network interfaces with some related
                                  information.


Думаю переписать вызовы для snmpwalk'a (каждый раз вызвается новый процес) вызовами пайтоновского pysnmp. С одной строны вызывать дочерний процес каждый раз не есть гуд, с другой строны - на сервере должен быть установлен pysnmp.

Скачать можно вот тут:

Код: Выделить всё

git clone https://github.com/alexander-naumov/nagios-plugins.git
Labor omnia vincit

"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
Спасибо сказали: