Мониторим всё: расширение агентов Windows и Linux при помощи скриптов / Блог компании Zabbix / Хабр

Постановка задачи

На win-сервере возникла проблема – иногда (очень редко) служба Task Scheduler переставала работать. Причину установить не удалось. Симптомы – запущенные задачи завершались успешно, но служба не видела завершения и показывала, что задача запущена. При этом сама служба шедулера не могла остановить задачу, поскольку процесса задачи по факту уже не существовало. Проблема лечилась перезапуском службы Task Scheduler.

Решение

Для отслеживания ситуации на сервер был установлен zabbix-agent В zabbix-клиенте настраиваем внешний скрипт, который проверяет поле “Last Run Time” для задачи, которая должна запускаться каждые 15 минут (задача отрабатывает за несколько секунд). В том случае, если задача поле “Last Run Time” показывает значение старше чем 30 минут (т.е. задача не запускалась за последние 15 минут), читаем, что есть проблема, описанная выше.

Для выяснения состояния поля “Last Run Time” используем команду данная команда выводит в формате CSV полный список задач из планировщика со всеми полями.

Для того, что бы распарсить CSV будем использовать UnixUtils (которые предварительно нужно поставить). А именно будем использовать sh, sed и awk.

Реализация

Создаем скрипт для Zabbix-agent:

Скрипт принимает в качестве аргументов <имя задачи> и <максимальное время с прошлого запуска в минутах> Скрипт запускает schtasks, при помощи sed вытаскивает значения часа и минуты последнего запуска, после чего вычисляет некое абсолютное значение в минутах по формуле: «час запуска» * 60 + «минута последнего запуска» Далее полученное абсолютное значение сравнивается с аналогичным абсолютным значением, вычисленным на основании текущего времени.

Если разница между значениями больше чем допустимое значение, то на выходе скрипта показываем 1.

Внимание! Данный скрипт предназначен для парсинга англоязычной версии windows! в англоязычной версии команда schtasks выдает время в 12-ти часовом формате, по этому пришлось кроме часов и минут вытаскивать еще значение AM/PM и в awk добавлять дополнительные правила вычисления. Для русской версии нужно скрипт немного исправить (упростить awk и убрать парттерн ([AP]M) в sed)

PATTERN=$1 # имя задачиMAX_RUNNING_TIME=$2 # максимальное время после прошлого запуска в минутахLAST_RUNNING_TIME=`schtasks /QUERY /FO CSV /V | sed -n "/^\".*\",\"$PATTERN\",\".*\",\".*\",\".*\",\"\([0-9][0-9]*\):\([0-9][0-9]*\):[0-9][0-9]* \([AP]M\), .*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\",\".*\"/s//\1 \2 \3/p" \ | gawk '{if($3=="PM"&&$1<12){$1=$1+12};if($3=="AM"&&$1==12){$1=0};running_time=($1*60)+$2;printrunning_time}'`NOW_TIME=$((`udate +%H`*60+`udate +%M`))FACT_RUNNING_TIME=$(($NOW_TIME-$LAST_RUNNING_TIME))if [ $FACT_RUNNING_TIME -ge $MAX_RUNNING_TIME ]; then#echo "$FACT_RUNNING_TIME ge $MAX_RUNNING_TIME"echo 1else#echo "$FACT_RUNNING_TIME lt $MAX_RUNNING_TIME"echo 0fi

В указываем пользовательский параметр:

UserParameter=tasks[*],sh C:/zabbix/tasks-check.sh "$1" "$2"

после этого рестартовать сервис zabbix.

На стороне zabbix-сервера:

1). Создаем группу элементов данных Tasks

2). Создаем элемент данных:

Тип: Zabbix Agent Ключ: tasks[“REIL Check Hourly Status”,30]

3). Создаем триггер:

{OLD-MLS1-PMSERVER:tasks["REIL Check Hourly Status",30].last(0)}=1

Готово!

Задача

Установить zabbix-клинент на Windows
Устанавливать будем в папку C:/zabbix

Реализация

Качаем дистрибутив (из таблицы Zabbix pre-compiled agents): http://www.zabbix.com/download.php

Создаем папку

Кладем в эту папку бинарники из архива и конфиг файл. должно получиться так:

C:\zabbix>dir Volume in drive C is OS Volume Serial Number is CA82-DB48 Directory of C:\zabbix 12/17/2014 02:28 AM <DIR> . 12/17/2014 02:28 AM <DIR> .. 12/11/2014 03:24 AM 7,248 zabbix_agentd.conf 10/24/2014 04:01 PM 292,352 zabbix_agentd.exe 10/24/2014 04:01 PM 113,664 zabbix_get.exe 10/24/2014 04:01 PM 138,752 zabbix_sender.exe

Правим конфиг, указываем следующие переменные:

Timeout=20 Server=<IP адрес сервера> ServerActive=<IP адрес сервера> Hostname=<Имя хоста в Zabbix>

Устанавливаем сервис:

zabbix_agentd.exe -i -c c:\Zabbix\zabbix_agentd.conf sc start "zabbix agent"

Известные проблемы

Если у вас заббикс сервер не может собрать статистику по процессору или другим показателям, а в логах при запуске zabbix-agent пишется что то вроде то нужно восстановить performance counters в винде:

Готово!

zabbix_sender(1) — Linux man page

Name

zabbix_sender — Zabbix sender utility.

Synopsis

zabbix_sender [-hpzvIV] {-kso | [-T] -i<inputfile>} [-c<config-file>]

Description

zabbix_sender is a command line utility for sending data to a remote Zabbix server. On the Zabbix server an item of type Zabbix trapper should be created with corresponding key. Note that incoming values will only be accepted from hosts specified in Allowed hosts field for this item.

Options

-c, —config <config-file>
Use config-file. Zabbix sender reads server details from the agent configuration file. By default Zabbix sender does not read any configuration file. Absolute path should be specified. Only parameters Hostname, ServerActive and SourceIP are supported. First entry from the ServerActive parameter is used.
-z, —zabbix-server <server>
Hostname or IP address of Zabbix server. If a host is monitored by a proxy, proxy hostname or IP address should be used instead.
-p, —port <port>
Specify port number of server trapper running on the server. Default is 10051.
-s, —host <host>
Specify host name as registered in Zabbix front-end. Host IP address and DNS name will not work.
-I, —source-address <IP>
Specify source IP address.
-k, —key <key>
Specify item key to send value to.

-o, —value <value>
Specify value.
-i, —input-file <inputfile>
Load values from input file. Specify for standard input. Each line of file contains whitespace delimited: <hostname> <key> <value>. Specify in <hostname> to use hostname from configuration file or —host argument. All entries are sent in a sequential order top-down.
-T, —with-timestamps
Each line of file contains whitespace delimited: <hostname> <key> <timestamp> <value>. This can be used with —input-file option. Timestamp should be specified in Unix timestamp format. If target item has triggers referencing it, all timestamps must be in an increasing order, otherwise event calculation will not be correct.
-r, —real-time
Send values one by one as soon as they are received. This can be used when reading from standard input.
-v, —verbose
Verbose mode, -vv for more details.
-h, —help
Display this help and exit.
-V, —version
Output version information and exit.

Examples

zabbix_sender -c /etc/zabbix_agentd.conf -s «Monitored Host» -k mysql.queries -o 342.45

Send 342.45 as the value for mysql.queries key in Monitored Host host using Zabbix server defined in agent daemon configuration file.

zabbix_sender -z 192.168.1.113 -i data_values.txt

Send values from file data_values.txt to server with IP 192.168.1.113. Host names and keys are defined in the file.

echo «- hw.serial.number 1287872261 SQ4321ASDF» | zabbix_sender -c /etc/zabbix_agentd.conf -T -i —

Send a timestamped value from the commandline to Zabbix server, specified in the agent daemon configuration file. Dash in the input data indicates that hostname also should be used from the same configuration file.

See Also

zabbix_agentd(8), zabbix_get(8), zabbix_proxy(8), zabbix_server(8)

Author

Alexei Vladishev <alex@zabbix.com>

Создание шаблонов Zabbix для Windows.

Дата: 03.07.2015 Автор Admin

Недавно мне понадобилось мониторить некоторые службы и порты на ОС Windows Server 2012 R2 .

Давайте рассмотрим пример как создать шаблон для мониторинга DNS сервиса на Windows.

Первым делом убедитесь что на ОС Windows установлен и активен Zabbix агент. Без него данный способ работать не будет.

В узлах zabbix, значок агента должен быть зеленым.

Перейдем в раздел Настройка — Шаблоны 

Нажимаем кнопку  «создать шаблон»

Далее вводим название шаблона и выбираем группу. Нажимаем обновить.

 

Переходим в шаблоны и открываем созданный ранее шаблон.

Переходим во вкладку «Группы элементов данных»

Создаем новую группу с именем Active Directory DNS.

Переходим во вкладку «Элементы данных»

Нажимаем кнопку «Создать элемент данных»

Теперь создадим элемент, который будет мониторить службу DNS (системное название службы — DNS)

В данном случае вводится параметр — service_state[DNS] , где DNS системное название службы.

Также выбирается ранее созданная группа элементов данных.

Нажимаем кнопку «Добавить»

Теперь создадим элемент, который будет проверять DNS порты.

Параметры должны быть такими:

В данном случае за параметры мониторинга отвечает ключ — net.tcp.service[dns] , где dns тип сервиса.

Добавляем данный элемент и переходим во вкладку триггеры.

Выбираем «создать триггер».

Создаем новый триггер для элемента отвечающего за работу службы dns.

В данном случае выражение будет таким — {Template_Active_Directory_DNS:service_state[DNS].last(0)}<>0

service_state[DNS] — название проверяемой службы.

Также укажите важность данного триггера.

Теперь создадим триггер для мониторинга доступности порта dns.

Параметры будут такими:

В данном случае в имени триггера указывается переменная — {HOST.NAME}

Используемое выражение — {Template_Active_Directory_DNS:net.tcp.service[dns].max(#3)}=0 

Где:

Template_Active_Directory_DNS — название созданного шаблона

net.tcp.service[dns] — указывается название элемента данных и проверяемый сервис

На этом создание шаблона завершено, осталось только добавить данный шаблон к узлу сети zabbix.

 

Добавить комментарий

Закрыть меню