Windows by zabbix agent active отличие

Что такое активный и пассивный zabbix агент. Сравнение zabbix агентов. Какой агент лучше использовать. Создание шаблона для активного zabbix агента.

У только начинающих администраторов zabbix часто возникает вопрос. В чем отличие между активным и пассивным агентом? И какой агент лучше использовать. В данной статье постараемся ответить на эти вопросы.

Содержание

  1. Отличие активного и пассивного агента
  2. Какой агент лучше использовать?
  3. Создание шаблона для активного агента

Отличие активного и пассивного агента

При использовании пассивного агента, zabbix сервер отправляет запросы на zabbix агент, в соответствии с настройками элементов данных (например загрузку cpu, памяти и т.д). А в ответ получает значения этих данных.

При активном агенте. Агент сначала запрашивает у zabbix сервера список элементов данных, частота этих запросов указана в параметре RefreshActiveChecks в настройках zabbix агента, обычно это не чаще одного раза в час, если у вас изменения в настройка узлов сети происходят редко, то можно указать обновление раз в сутки что бы меньше нагружать сервер. После получения элементов данных zabbix агент отправляет данные на сервер в соответствием с настройками этих данных.

Как следует из описанного выше. Основное отличие заключается в том, что при пассивном агенте данные запрашиваются сервером, а при активном данные отправляются самими агентами.

Какой агент лучше использовать?

Какой агент использовать это дело вкуса. По моему мнению если у вас небольшая сеть и в которую редко добавляются новые узлы, то можно использовать пассивный агент.

Если же у вас большая сеть и на сервере десятки или сотни тысяч активных элементов данных. А также если в сети постоянно появляются новые узлы. То в этом случае лучше, а также если узлы находятся за НАТом то необходимо использовать активный zabbix агенты.

преимущества пассивного агента

  • Работает из «коробки»

Недостатки

  • Не работает если узел находится за NAT
  • В отличие от активного агента больше нагрузка на сервер

Преимущества активного агента

  • Меньшая нагрузка на сервер
  • Возможность работы за NAT
  • Авторегистрация узлов

Недостатки

  • Необходимо создавать шаблоны, в стандартной установке все шаблоны для пассивной проверке.

Создание шаблона для активного агента

Создать шаблон для активного zabbix агента из уже существующего  на самом деле очень просто. Рассмотрим на примере стандартного шаблона «Template OS Linux». Для этого открываем его на редактирование и смотрим какие еще шаблоны к нему присоединены, кликнув по вкладке «Присоединенные шаблоны»

Прямо здесь кликаем по имени «Template App Zabbix Agent» и в открывшемся шаблоне нажимаем кнопку «Полное клонирование». Переименовываем новый шаблон например в «Template App Zabbix Agent_activ». И жмем добавить. Затем открываем созданный шаблон на редактирование, переходим на вкладку «элементы данных» и выделяем все элементы данных.

После чего жмем «Массовое обновление». Выбираем тип «Zabbix агент (активный)»

И нажимаем «обновить»

Снова открываем шаблон «Template OS Linux» и здесь нажимаем кнопку «Полное клонирование». И создаем новый шаблон «Template OS Linux_activ». Открываем шаблон «Template OS Linux_activ» на редактирование и переходим на вкладку «Присоединенные шаблоны». Здесь отсоединяем шаблон «Template App Zabbix Agent» и присоединяем «Template App Zabbix Agent_activ».

Затем переходим в элементы данных и также с помощью кнопки «Массовое обновление» меняем тип на «Zabbix агент (активный)». Еще нам нужно изменить тип в правилах обнаружения. Для этого переходим на вкладку «Правила обнаружения» и нажимаем в каждом правиле на ссылку «Прототипы элементов данных». К сожалению здесь массовое обновление не работает. Поэтому проходимся по каждому элементу вручную и меняем тип.  Теперь у нас есть новый шаблон «Template OS Linux_activ», который работает с активным zabbix агентами. И уже его мы можем навешивать на хосты.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

In this tutorial, I will show you how to install Zabbix agent for Windows server using an MSI Installer package and how to monitor Windows server with Zabbix monitoring system.

Using this guide you can monitor almost the entire Windows OS family: Windows server 2012 R2, Windows Server 2016, Windows Server 2019, Windows 10, Windows 8 and Windows 7.

Installation is quite simple, just download and install the Zabbix agent MSI installer following steps 1 and 2, but if you want to learn more, read the full guide.

Zabbix 5.0 Dashboard

Zabbix dashboard

In short, Zabbix agent is a lightweight application that can collect various performance data from the operating system – such as CPU, memory, disk, and network interface utilization – and forward it to a central point (server) for storage and visualization. It runs on any modern operating system and is very flexible because its functionality can be extended with scripts and modules.

You can read more about the Zabbix agent on the Zabbix official site and if you stumbled on this tutorial by accident and you never heard of the Zabbix monitoring system, then stop whatever you doing and install it on your favorite Linux distribution in less than 10 minutes: CentOS/RHEL, Ubuntu, Debian, Rasberry Pi.

Need help with installing Zabbix agent on Linux OS? Check out this guide:
Zabbix Agent (Linux): Install on Ubuntu, CentOS, RHEL, Debian, etc.

Step 1: Download Zabbix Agent Installer for Windows (msi)

In this tutorial, I will use the latest Zabbix agent 5.0.2 LTS version, that version is compatible with Zabbix server 5.x or newer.

Windows Zabbix Agent v1 LTS v6.0.x Download: 64-bit or 32-bit
Windows Zabbix Agent v2 LTS v6.0.x (recommended) Download: 64-bit or 32-bit

I always recommend using the latest LTS version to take full advantage of new features and improved performance so make sure to download installer zabbix_agent2-6.0.7-windows-amd64-openssl.msi for 64-bit Windows or zabbix_agent2-6.0.7-windows-i386-openssl.msi for 32-bit Windows.

And don’t try to install a 32-bit package on 64-bit Windows because it won’t work!

Step 2: Install Zabbix Agent on Windows using MSI installer

I will install Zabbix Agent on Windows server using installation wizard but if you prefer command-line based installation check out section “Install Zabbix agent via Windows command-line (CMD)”

Just to make clear, in this tutorial I will use Zabbix server with IP address 192.168.5.43 to monitor Windows machine called w01services with IP address 192.168.5.22.

Double click on Zabbix MSI installer that you have downloaded in the previous step and click “Next” just as shown in the image below.

Install Zabbix Agent on Windows using MSI installer - Step 1

Install Zabbix Agent on Windows using MSI installer – Step 1

Accept the terms and click the “Next” button.

Install Zabbix Agent on Windows using MSI installer - Step 2

Install Zabbix Agent on Windows using MSI installer – Step 2

Define custom “Host name” or use fully qualified domain name (FQDN) of the Windows machine in the “Host name” field. Then enter IP address of the Zabbix server under “Zabbix server IP/DNS” and “Server or Proxy for active checks” field and you are done.

Install Zabbix Agent on Windows using MSI installer - Step 3

Install Zabbix Agent on Windows using MSI installer – Step 3

Select “Add agent location to the PATH” and go through the rest of the installation by clicking “Next“, “Install” and “Finish“.

Install Zabbix Agent on Windows using MSI installer - Step 4

Install Zabbix Agent on Windows using MSI installer – Step 4
Install Zabbix Agent on Windows using MSI installer - Step 5
Install Zabbix Agent on Windows using MSI installer – Step 5
Install Zabbix Agent on Windows using MSI installer - Step 6
Install Zabbix Agent on Windows using MSI installer – Step 6

You don’t need to configure Windows firewall manually because the MSI installer will automatically add a firewall rule to permit Zabbix TCP port 10050.

Finally, we need to check that the Zabbix agent is up and running.

Hold down the “Windows key” and press “R” on the keyboard, type “services.msc“, press “OK” and check the “Status” column for “Zabbix Agent” service exactly as shown in the picture below. Status should be “Started” if the installation was successful.

Picture showing how to check Zabbix agent service on Windows

How to check Zabbix agent service on Windows

WELL DONE!
You have successfully installed and configured Zabbix agent on Windows OS!
Now it’s time to add that Windows host to Zabbix monitoring system.

Step 3: Add Windows host to Zabbix monitoring system

You can add a host to existing host group or you can create a new host group for your Windows servers. I will create host group “Devices/OS/Windows“ using “Host groups” option under “Configuration” section on the Zabbix frontend. Click “Create host group” button, define “Group name” and click “Add” (you only need to create host group once):

Create Zabbix host group for Windows servers

Create Zabbix host group for Windows servers

Navigate to “Host” menu under “Configuration” tab and then click “Create host” option to create a host in Zabbix:

Add Windows host to Zabbix - Step 1

Add Windows host to Zabbix – Step 1

Define “Hostname” and set “Groups” using your newly created host group. Then set the IP address of the Windows server under “Agent interfaces” section

Add Windows host to Zabbix - Step 2

Add Windows host to Zabbix – Step 2

Switch to tab “Templates” and choose the “Template OS Windows by Zabbix agent” template under section “Link new template” by typing “OS Windows …”.

Add Windows host to Zabbix - Step 3

Add Windows host to Zabbix – Step 3

And you’re done! If you are interested in automating this whole process of adding Windows hosts to Zabbix see the section “Configure auto registration for Windows Zabbix agents“

Note that in this tutorial I m using a template “Template OS Windows by Zabbix agent” that can only monitor passive Zabbix agents. However, if you want to monitor your host using Zabbix agents in active mode use a template called “Template OS Windows by Zabbix agent active“. Check out the section Understanding Active vs Passive Zabbix Agent mode” to learn more about the differences between the active and passive agent mode.

Step 4: Check if Zabbix Agent is working correctly

You can check that the Zabbix agent is working properly by using the “Latest Data” option on the Zabbix frontend. Wait up to 5 minutes after you have installed and started Zabbix agent to allow for data to be collected. Look at columns “Last check” and “Latest value” and if they are updating then the agent is working.

How to check the latest data collected on the Zabbix host

How to check the latest data collected on the Zabbix host

Your agent should be working and collecting data by now, but if you experience any problems, restart Zabbix agent service and check the log “C:Program Fileszabbixzabbix_agentd.log“. And if there is nothing unusual in the log file then check the firewall – make sure that TCP port 10050 on the host (where Zabbix agent is installed) and TCP port 10051 on the Zabbix server side are open.

CONGRATULATIONS!
You have successfully installed Zabbix Agent and your Windows server is being monitored!
No need to do anything else as other steps are optional!

CONTINUE TO LEARN MORE:
How to manage Zabbix agent service on Windows
Auto registration of Zabbix agents (Windows OS)
Learn how to Secure Zabbix Agent
Alternative Zabbix agent installation via Windows command-line (CLI)
Understanding Active vs Passive Zabbix Agent mod

Step 5: Restart Zabbix Agent service on Windows

In the previous steps, we learned how to check the status of Zabbix agent service using the “services.msc” option, and now we will learn how to use the command line interface (CMD) to stop or start the agent and check its status.

Click on “Windows Start” button and type “cmd” in the search bar, right-click on “cmd” icon and select option “Run as administrator” and use these commands to start/stop the agent:

net stop "Zabbix Agent"
net start "Zabbix Agent"

And to check Zabbix agent service status use the command:

sc query "Zabbix Agent" | findstr /i "STATE"

You should get status “RUNNING” if the Zabbix agent is up and running!

Step 6: Configure auto registration for Windows Zabbix Agents

Adding one or two hosts to Zabbix manually is not a big problem. However, what if you need to add more servers to Zabbix? Or you just want to automate that tedious process of adding Windows hosts to Zabbix and linking them with the correct template and host group?

Don’t worry, you don’t have to write the script because Zabbix has a tool called “Auto registration”.

Before we configure Zabbix frontend, make sure that all of your Zabbix agents have “HostMetadata=Windows” line in their configuration file (default path: “C:Program Fileszabbixzabbix_agentd.conf“). And if that line does not exist, add it and restart the Zabbix Agent afterward. You can automate that via CLI like this:

echo HostMetadata=Windows >> C:"Program Files"zabbixzabbix_agentd.conf
net stop "Zabbix Agent"
net start "Zabbix Agent"

In the future always install the Zabbix agent on Windows with the “HostMetadata=Windows” parameter if you are planning to use the auto-registration feature!

Now that we’ve clarified that let’s configure auto-registration on the Zabbix frontend.

Go to the “Actions” tool under the “Configuration” section, then select “Auto registration” from the dropdown menu and click the “Create action” button.

How to configure auto-registration of agents (Windows servers) in Zabbix - Step 1

How to configure auto-registration of agents (Windows servers) in Zabbix – Step 1

On the “Action” tab define the “Name” of the action and add a “New condition” that will check if the “Host metadata” contains the word “windows”.

How to configure auto-registration of agents (Windows servers) in Zabbix - Step 2

How to configure auto-registration of agents (Windows servers) in Zabbix – Step 2

Then, change tab to “Operations” and add new operation.

How to configure auto-registration of agents (Windows servers) in Zabbix - Step 3

How to configure auto-registration of agents (Windows servers) in Zabbix – Step 3

Define “Operation type” as “Add to host group” and then select to which “Host groups” will Windows hosts be added when discovered. In my case, I will use my custom host group called “Devices/OS/Windows“.

How to configure auto-registration of agents (Windows servers) in Zabbix - Step 4

How to configure auto-registration of agents (Windows servers) in Zabbix – Step 4

After that, you need to add a new operation by setting “Link to the template” as “Operation type” and then select which templates will be linked with the newly discovered Windows hosts. In my example, I will use template “Template OS Windows by Zabbix agent” (passive checks)

How to configure auto-registration of agents (Windows servers) in Zabbix - Step 5

How to configure auto-registration of agents (Windows servers) in Zabbix – Step 5

Well done! Auto-registration is configured. Wait a few minutes and your Windows server should appear in Zabbix. From now on, every time you install a Zabbix agent on a Windows server, it will automatically be added to the Zabbix and linked with the appropriate host group and template.

Note, that you can add anything you want to the “HostMetadata” parameter. For example, you can have a host that has in Zabbix agent configuration file defined “HostMetadata=Windows:Tomcat:Prod” or another with “HostMetadata=Windows:MSSQL:Test“. For the first host, you can configure auto-registration to add to host groups: “Windows”, “Web servers” and “Production servers” and to link templates that can monitor Windows and Tomcat server. And the second host can be added to host groups: “Windows”, “Databases”, and “Test servers” and linked with templates that can monitor Windows server and Microsoft SQL database.

Using PSK encryption on the Zabbix agents? Then there is one more step left, you need to add your PSK identity and PSK key using the “Auto Registration” option under the “Administration“→”General” section just as shown in the image below:

How to configure PSK encryption for auto-registration in the Zabbix frontend

How to configure PSK encryption for auto-registration in the Zabbix frontend

From now on, during the auto registration process, Zabbix will configure provided PSK identity and key on each registered host.

Step 7: Configure PSK encryption on Zabbix Agent (Windows)

Zabbix supports encrypted communications between Zabbix server and Zabbix agent using Transport Layer Security (TLS) protocol v.1.2. You can use certificate-based and pre-shared key-based encryption (PSK), but in this tutorial we will configure PSK encryption.

In this step, I will show you how to configure PSK encryption on an already installed Zabbix agent, but keep in mind that all of these configurations can be configured during the installation

a. Generate PSK key

Generate 256-bit (32 bytes) PSK key with openssl command on Zabbix server (or use some other tool on Windows):

$ openssl rand -hex 32
1b38eac9d870a319f201fb1da989c081faba993e3d91940193224a100cdcdb86

On Windows server, create a new text file “ZabbixAgentPSK.txt” in the default Zabbix agent installation folder (“C:Program Fileszabbix“) and put that PSK key in the first line of the file. Don’t forget to save the file before closing.

b. Configure Zabbix agent to support PSK encryption

Open “C:Program Fileszabbixzabbix_agentd.conf” file with text editor (Notepad++) and add this configuration anywhere in file:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=C:Program FileszabbixZabbixAgentPSK.txt
TLSPSKIdentity=ZBX-AGENT-PSK-ID

Save and exit file. Keep in mind that “TLSPSKIdentity” can be anything, so for security reasons set something else – don’t use mine!

Don’t forget to restart Zabbix agent service after changing the configuration file!

c. Enable PSK encryption on the agent in Zabbix frontend

Communication between Zabbix agent and server is not yet encrypted because we have enabled PSK encryption on the agent side but not on the server side. 

We need to enable encryption on the server side so go to web frontend and select your “Hosts” tab under the “Configuration” section and find and click on your Windows hosts.

On the “Encryption” tab set PSK under “Connections from hosts” option and copy/paste “PSK identity” and “PSK” (key) that is configured on the Zabbix agent.

When you are done with configuration click the “Update” button just as shown in the image below. 

How to configure PSK encryption on Zabbix agent in the frontend

How to configure PSK encryption on Zabbix agent in the frontend

Keep in mind, that you can automate the configuration of the host encryption (PSK) on the frontend using the Zabbix auto registration process.

Step 8: Install Zabbix agent via Windows command-line (CMD)

This step is for those who prefer command-line based installation instead of wizard-based installation.

a. Run CMD as administrator

Click on “Windows Start” button and type “CMD” in the search bar, right-click on “cmd” and select option “Run as administrator“:

picture showing how to run windows cmd as a administrator

b. Download Zabbix agent

Download installer zabbix_agent2-6.0.7-windows-amd64-openssl.msi for 64-bit Windows or zabbix_agent2-6.0.7-windows-i386-openssl.msi for 32-bit Windowsand save it on a “C:” disk or somewhere else.

c. Change directory and set installation folder

Change directory to the path where you have downloaded the MSI file and set the installation folder with commands:

cd C://
SET INSTALLFOLDER=C:Program Fileszabbix

d. Install Zabbix agent using msiexec

Here is an example of Zabbix agent installation that will work for most people, just change parameteres “SERVER“, “SERVERACTIVE” and “HOSTNAME” to suit your enviroment.

msiexec /l*v log.txt /i zabbix_agent2-6.0.7-windows-amd64-openssl.msi /qn^
LOGTYPE=file^
LOGFILE="%INSTALLFOLDER%zabbix.log"^
SERVER=192.168.5.156^
LISTENPORT=10050^
SERVERACTIVE=192.168.5.156^
HOSTNAME=w01fileservice^
ENABLEPATH=1^
INSTALLFOLDER="%INSTALLFOLDER%"

Check “Zabbix agent” service status with the command:

sc query "Zabbix Agent" | findstr /i "STATE"

If the Zabbix agent is up and running then the status should be “RUNNING“.

Picture showing how to install Zabbix agent on Windows server using the command line (CMD)

Picture showing how to install Zabbix agent on Windows server using the command line (CMD)

Note, if you are planning to use the auto-registration feature don’t forget to add “HostMetadata=Windows” parameter to “zabbix_agentd.conf” and restart Zabbix agent afterward because Zabbix CLI installation doesn’t support “HostMetadata” parameter:

echo HostMetadata=Windows >> C:"Program Files"zabbixzabbix_agentd.conf
net stop "Zabbix Agent"
net start "Zabbix Agent"

e. Example of Zabbix agent installation with additional options

You can set almost any Zabbix agent parameter during installation, here is one example of an installation where many parameters are used.

SET INSTALLFOLDER=C:Program Fileszabbix

msiexec /l*v log.txt /i zabbix_agent2-6.0.7-windows-amd64-openssl.msi /qn^
LOGTYPE=file^
LOGFILE="%INSTALLFOLDER%zabbix.log"^
SERVER=10.10.10.162^
LISTENPORT=10055^
SERVERACTIVE=10.10.10.162^
HOSTNAME=cmr_server^
TLSCONNECT=psk^
TLSACCEPT=psk^
TLSPSKIDENTITY=CompanyPSKID^
TLSPSKFILE="%INSTALLFOLDER%company_key.psk"^
TLSCAFILE="c:tempfile1.txt"^
TLSCRLFILE="c:tempfil2.txt"^
TLSSERVERCERTISSUER="Company CA"^
TLSSERVERCERTSUBJECT="Company Cert"^
TLSCERTFILE="c:tempfile4.txt"^
TLSKEYFILE="c:tempfile5.txt"^
ENABLEPATH=1^
INSTALLFOLDER="%INSTALLFOLDER%"
SKIP=fw

Parameter “SKIP=fw” means that the firewall exception rule will not be added. Explanations of other parameters can be found in the official Zabbix documentation section Zabbix Agent (Windows).

Step 9: Understanding Active vs Passive Zabbix Agent mode

When using a Zabbix agent in active mode, it will connect to the Zabbix server via port 10051 to retrieve configuration and send data. This is a great feature that allows an active Zabbix agent to work behind the firewall and to offload the Zabbix server in large environments.

On the other hand, if you use a Zabbix agent in passive mode Zabbix server will initiate a connection via port 10050 and retrieve data from the agent. The Zabbix server will do this for every metric (item) every few minutes – which is very inefficient! Because of this, active mode is more recommended.

An additional advantage of the Zabbix agent in active mode is that it can read logs from the device and that is not possible if the Zabbix agent is used in passive mode.

Differences between Zabbix agent active  and passive check

Differences between Zabbix agent active and passive check (Source: Zabbix)

You can detect on Zabbix host if the agent is working in active or passive mode. Passive mode will show red or green “ZBX” icon in the agent status bar and active mode will show grey “ZBX” icon:

Detect on Zabbix host if the agent is working in active or passive mode

Learn how to setup Zabbix email notifications and escalations in a few minutes!

setup zabbix mail alerts and escalations

  • Отличие активного и пассивного агента

  • Какой агент лучше использовать?

  • Создание шаблона для активного агента

У только начинающих администраторов zabbix часто возникает вопрос. В чем отличие между активным и пассивным агентом? И какой агент лучше использовать. В данной статье постараемся ответить на эти вопросы.

Отличие активного и пассивного агента

При использовании пассивного агента, zabbix сервер отправляет запросы на zabbix агент, в соответствии с настройками элементов данных (например загрузку cpu, памяти и т.д). А в ответ получает значения этих данных.

При активном агенте. Агент сначала запрашивает у zabbix сервера список элементов данных, частота этих запросов указана в параметре RefreshActiveChecks в настройках zabbix агента, обычно это не чаще одного раза в час, если у вас изменения в настройка узлов сети происходят редко, то можно указать обновление раз в сутки что бы меньше нагружать сервер. После получения элементов данных zabbix агент отправляет данные на сервер в соответствием с настройками этих данных.

Как следует из описанного выше. Основное отличие заключается в том, что при пассивном агенте данные запрашиваются сервером, а при активном данные отправляются самими агентами.

к содержанию ↑

Какой агент лучше использовать?

Какой агент использовать это дело вкуса. По моему мнению если у вас небольшая сеть и в которую редко добавляются новые узлы, то можно использовать пассивный агент.

Если же у вас большая сеть и на сервере десятки или сотни тысяч активных элементов данных. А также если в сети постоянно появляются новые узлы. То в этом случае лучше, а также если узлы находятся за НАТом то необходимо использовать активный zabbix агенты.

преимущества пассивного агента

  • Работает из «коробки»

Недостатки

  • Не работает если узел находится за NAT
  • В отличие от активного агента больше нагрузка на сервер

Преимущества активного агента

  • Меньшая нагрузка на сервер
  • Возможность работы за NAT
  • Авторегистрация узлов

Недостатки

  • Необходимо создавать шаблоны, в стандартной установке все шаблоны для пассивной проверке.

к содержанию ↑

Создание шаблона для активного агента

Создать шаблон для активного zabbix агента из уже существующего  на самом деле очень просто. Рассмотрим на примере стандартного шаблона «Template OS Linux». Для этого открываем его на редактирование и смотрим какие еще шаблоны к нему присоединены, кликнув по вкладке «Присоединенные шаблоны»

Активный и пассивный zabbix агент

Прямо здесь кликаем по имени «Template App Zabbix Agent» и в открывшемся шаблоне нажимаем кнопку «Полное клонирование». Переименовываем новый шаблон например в «Template App Zabbix Agent_activ». И жмем добавить. Затем открываем созданный шаблон на редактирование, переходим на вкладку «элементы данных» и выделяем все элементы данных.

Активный и пассивный zabbix агент

После чего жмем «Массовое обновление». Выбираем тип «Zabbix агент (активный)»

Активный и пассивный zabbix агент

И нажимаем «обновить»

Снова открываем шаблон «Template OS Linux» и здесь нажимаем кнопку «Полное клонирование». И создаем новый шаблон «Template OS Linux_activ». Открываем шаблон «Template OS Linux_activ» на редактирование и переходим на вкладку «Присоединенные шаблоны». Здесь отсоединяем шаблон «Template App Zabbix Agent» и присоединяем «Template App Zabbix Agent_activ».

Активный и пассивный zabbix агент

Затем переходим в элементы данных и также с помощью кнопки «Массовое обновление» меняем тип на «Zabbix агент (активный)». Еще нам нужно изменить тип в правилах обнаружения. Для этого переходим на вкладку «Правила обнаружения» и нажимаем в каждом правиле на ссылку «Прототипы элементов данных». К сожалению здесь массовое обновление не работает. Поэтому проходимся по каждому элементу вручную и меняем тип.  Теперь у нас есть новый шаблон «Template OS Linux_activ», который работает с активным zabbix агентами. И уже его мы можем навешивать на хосты.

Windows by Zabbix agent active

Overview

New official Windows template. Requires agent of Zabbix 4.4 and newer.

This template has been tested on:

  • Windows, version 7 and newer.
  • Windows Server, version 2008 R2 and newer.

Requirements

For Zabbix version: 6.4 and higher.

Setup

Install Zabbix agent on Windows OS according to Zabbix documentation.

Configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$AGENT.NODATA_TIMEOUT}

No data timeout for active agents. Consider to keep it relatively high.

30m
{$AGENT.TIMEOUT}

Timeout after which agent is considered unavailable.

5m
{$CPU.INTERRUPT.CRIT.MAX}

The critical threshold of the % Interrupt Time counter.

50
{$CPU.PRIV.CRIT.MAX}

The threshold of the % Privileged Time counter.

30
{$CPU.QUEUE.CRIT.MAX}

The threshold of the Processor Queue Length counter.

3
{$CPU.UTIL.CRIT}

The critical threshold of the CPU utilization in %.

90
{$IF.ERRORS.WARN}

2
{$IF.UTIL.MAX}

90
{$IFCONTROL}

1
{$MEM.PAGE_SEC.CRIT.MAX}

The warning threshold of the Memory Pages/sec counter.

1000
{$MEM.PAGE_TABLE_CRIT.MIN}

The warning threshold of the Free System Page Table Entries counter.

5000
{$MEMORY.UTIL.MAX}

The warning threshold of the Memory util item.

90
{$NET.IF.IFALIAS.MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

.*
{$NET.IF.IFALIAS.NOT_MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

CHANGE_THIS
{$NET.IF.IFDESCR.MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

.*
{$NET.IF.IFDESCR.NOT_MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

CHANGE_THIS
{$NET.IF.IFNAME.MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

.*
{$NET.IF.IFNAME.NOT_MATCHES}

This macro is used in Network interface discovery. Can be overridden on the host or linked template level.

`Miniport
{$SERVICE.NAME.MATCHES}

This macro is used in Service discovery. Can be overridden on the host or linked template level.

^.*$
{$SERVICE.NAME.NOT_MATCHES}

This macro is used in Service discovery. Can be overridden on the host or linked template level.

`^(?:RemoteRegistry
{$SERVICE.STARTUPNAME.MATCHES}

This macro is used in Service discovery. Can be overridden on the host or linked template level.

`^(?:automatic
{$SERVICE.STARTUPNAME.NOT_MATCHES}

This macro is used in Service discovery. Can be overridden on the host or linked template level.

`^(?:manual
{$SWAP.PFREE.MIN.WARN}

The warning threshold of the minimum free swap.

20
{$SYSTEM.FUZZYTIME.MAX}

The threshold for difference of system time in seconds.

60
{$VFS.DEV.DEVNAME.MATCHES}

This macro is used in physical disks discovery. Can be overridden on the host or linked template level.

.*
{$VFS.DEV.DEVNAME.NOT_MATCHES}

This macro is used in physical disks discovery. Can be overridden on the host or linked template level.

_Total
{$VFS.DEV.READ.AWAIT.WARN}

Disk read average response time (in s) before the trigger would fire.

0.02
{$VFS.DEV.UTIL.MAX.WARN}

The warning threshold of disk time utilization in percent.

95
{$VFS.DEV.WRITE.AWAIT.WARN}

Disk write average response time (in s) before the trigger would fire.

0.02
{$VFS.FS.FREE.MIN.CRIT}

The critical threshold of the filesystem utilization.

5G
{$VFS.FS.FREE.MIN.WARN}

The warning threshold of the filesystem utilization.

10G
{$VFS.FS.FSDRIVETYPE.MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

fixed
{$VFS.FS.FSDRIVETYPE.NOT_MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

^s$
{$VFS.FS.FSNAME.MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

.*
{$VFS.FS.FSNAME.NOT_MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

`^(?:/dev
{$VFS.FS.FSTYPE.MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

.*
{$VFS.FS.FSTYPE.NOT_MATCHES}

This macro is used in filesystems discovery. Can be overridden on the host or linked template level.

^s$
{$VFS.FS.PUSED.MAX.CRIT}

The critical threshold of the filesystem utilization in percent.

90
{$VFS.FS.PUSED.MAX.WARN}

The warning threshold of the filesystem utilization in percent.

80

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Mounted filesystem discovery

Discovery of file systems of different types.

DEPENDENT vfs.fs.dependent.discovery

Filter:

AND

— {#FSTYPE} MATCHES_REGEX {$VFS.FS.FSTYPE.MATCHES}

— {#FSTYPE} NOT_MATCHES_REGEX {$VFS.FS.FSTYPE.NOT_MATCHES}

— {#FSNAME} MATCHES_REGEX {$VFS.FS.FSNAME.MATCHES}

— {#FSNAME} NOT_MATCHES_REGEX {$VFS.FS.FSNAME.NOT_MATCHES}

— {#FSDRIVETYPE} MATCHES_REGEX {$VFS.FS.FSDRIVETYPE.MATCHES}

— {#FSDRIVETYPE} NOT_MATCHES_REGEX {$VFS.FS.FSDRIVETYPE.NOT_MATCHES}

Network interfaces discovery

Discovery of installed network interfaces.

DEPENDENT net.if.discovery

Preprocessing:

— JAVASCRIPT: The text is too long. Please see the template.

— DISCARD_UNCHANGED_HEARTBEAT: 1h

Filter:

AND

— {#IFNAME} MATCHES_REGEX {$NET.IF.IFNAME.MATCHES}

— {#IFNAME} NOT_MATCHES_REGEX {$NET.IF.IFNAME.NOT_MATCHES}

— {#IFDESCR} MATCHES_REGEX {$NET.IF.IFDESCR.MATCHES}

— {#IFDESCR} NOT_MATCHES_REGEX {$NET.IF.IFDESCR.NOT_MATCHES}

— {#IFALIAS} MATCHES_REGEX {$NET.IF.IFALIAS.MATCHES}

— {#IFALIAS} NOT_MATCHES_REGEX {$NET.IF.IFALIAS.NOT_MATCHES}

Physical disks discovery

Discovery of installed physical disks.

ZABBIX_ACTIVE perf_instance_en.discovery[PhysicalDisk]

Preprocessing:

— STR_REPLACE: {#INSTANCE} {#DEVNAME}

Filter:

AND

— {#DEVNAME} MATCHES_REGEX {$VFS.DEV.DEVNAME.MATCHES}

— {#DEVNAME} NOT_MATCHES_REGEX {$VFS.DEV.DEVNAME.NOT_MATCHES}

Windows services discovery

Discovery of Windows services of different types as defined in template’s macros.

ZABBIX_ACTIVE service.discovery

Filter:

AND

— {#SERVICE.NAME} MATCHES_REGEX {$SERVICE.NAME.MATCHES}

— {#SERVICE.NAME} NOT_MATCHES_REGEX {$SERVICE.NAME.NOT_MATCHES}

— {#SERVICE.STARTUPNAME} MATCHES_REGEX {$SERVICE.STARTUPNAME.MATCHES}

— {#SERVICE.STARTUPNAME} NOT_MATCHES_REGEX {$SERVICE.STARTUPNAME.NOT_MATCHES}

Items collected

Group Name Description Type Key and additional info
CPU CPU utilization

The CPU utilization expressed in %.

ZABBIX_ACTIVE system.cpu.util
CPU CPU interrupt time

The Processor Information% Interrupt Time is the time the processor spends receiving and servicing

hardware interrupts during sample intervals. This value is an indirect indicator of the activity of

devices that generate interrupts, such as the system clock, the mouse, disk drivers, data communication

lines, network interface cards and other peripheral devices. This is an easy way to identify a potential

hardware failure. This should never be higher than 20%.

ZABBIX_ACTIVE perf_counter_en[«Processor Information(_total)% Interrupt Time»]
CPU Context switches per second

Context Switches/sec is the combined rate at which all processors on the computer are switched from one thread to another.

Context switches occur when a running thread voluntarily relinquishes the processor, is preempted by a higher priority ready thread, or switches between user-mode and privileged (kernel) mode to use an Executive or subsystem service.

It is the sum of ThreadContext Switches/sec for all threads running on all processors in the computer and is measured in numbers of switches.

There are context switch counters on the System and Thread objects. This counter displays the difference between the values observed in the last two samples, divided by the duration of the sample interval.

ZABBIX_ACTIVE perf_counter_en[«SystemContext Switches/sec»]
CPU CPU privileged time

The Processor Information% Privileged Time counter shows the percent of time that the processor is spent

executing in Kernel (or Privileged) mode. Privileged mode includes services interrupts inside Interrupt

Service Routines (ISRs), executing Deferred Procedure Calls (DPCs), Device Driver calls and other kernel-mode

functions of the Windows® Operating System.

ZABBIX_ACTIVE perf_counter_en[«Processor Information(_total)% Privileged Time»]
CPU CPU DPC time

Processor DPC time is the time that a single processor spent receiving and servicing deferred procedure

calls (DPCs). DPCs are interrupts that run at a lower priority than standard interrupts. % DPC Time is a

component of % Privileged Time because DPCs are executed in privileged mode. If a high % DPC Time is

sustained, there may be a processor bottleneck or an application or hardware related issue that can

significantly diminish overall system performance.

ZABBIX_ACTIVE perf_counter_en[«Processor Information(_total)% DPC Time»]
CPU CPU user time

The Processor Information% User Time counter shows the percent of time that the processor(s) is spent executing

in User mode.

ZABBIX_ACTIVE perf_counter_en[«Processor Information(_total)% User Time»]
CPU Number of cores

The number of logical processors available on the computer.

ZABBIX_ACTIVE wmi.get[root/cimv2,»Select NumberOfLogicalProcessors from Win32_ComputerSystem»]
CPU CPU queue length

The Processor Queue Length shows the number of threads that are observed as delayed in the processor Ready Queue

and are waiting to be executed.

ZABBIX_ACTIVE perf_counter_en[«SystemProcessor Queue Length»]
Filesystems {#FSLABEL}({#FSNAME}): Used space

Used storage expressed in Bytes.

DEPENDENT vfs.fs.dependent.size[{#FSNAME},used]

Preprocessing:

— JSONPATH: $.bytes.used

Filesystems {#FSLABEL}({#FSNAME}): Total space

The total space expressed in Bytes.

DEPENDENT vfs.fs.dependent.size[{#FSNAME},total]

Preprocessing:

— JSONPATH: $.bytes.total

Filesystems {#FSLABEL}({#FSNAME}): Space utilization

Space utilization in % for {#FSNAME}

DEPENDENT vfs.fs.dependent.size[{#FSNAME},pused]

Preprocessing:

— JSONPATH: $.bytes.pused

General System local time

The local system time of the host.

ZABBIX_ACTIVE system.localtime
General System name

The host name of the system.

ZABBIX_ACTIVE system.hostname

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

General System description

System description of the host.

ZABBIX_ACTIVE system.uname

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

General Number of processes

The number of processes.

ZABBIX_ACTIVE proc.num[]
General Number of threads

The number of threads used by all running processes.

ZABBIX_ACTIVE perf_counter_en[«SystemThreads»]
Inventory Operating system

ZABBIX_ACTIVE system.sw.os

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Inventory Operating system architecture

The architecture of the operating system.

ZABBIX_ACTIVE system.sw.arch

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Memory Used memory

Used memory in Bytes.

ZABBIX_ACTIVE vm.memory.size[used]
Memory Total memory

The total memory expressed in Bytes.

ZABBIX_ACTIVE vm.memory.size[total]
Memory Memory utilization

Memory utilization in %.

CALCULATED vm.memory.util

Expression:

last(//vm.memory.size[used]) / last(//vm.memory.size[total]) * 100

Memory Cache bytes

Cache Bytes is the sum of the MemorySystem Cache Resident Bytes, MemorySystem Driver Resident Bytes,

MemorySystem Code Resident Bytes, and MemoryPool Paged Resident Bytes counters. This counter displays

the last observed value only; it is not an average.

ZABBIX_ACTIVE perf_counter_en[«MemoryCache Bytes»]
Memory Free swap space

The free space of the swap volume/file expressed in bytes.

CALCULATED system.swap.free

Expression:

last(//system.swap.size[,total]) - last(//system.swap.size[,total]) / 100 * last(//perf_counter_en["Paging file(_Total)% Usage"])

Memory Free swap space in %

The free space of the swap volume/file expressed in %.

DEPENDENT system.swap.pfree

Preprocessing:

— JAVASCRIPT: return (100 - value)

Memory Used swap space in %

The used space of swap volume/file in percent.

ZABBIX_ACTIVE perf_counter_en[«Paging file(_Total)% Usage»]
Memory Total swap space

The total space of the swap volume/file expressed in bytes.

ZABBIX_ACTIVE system.swap.size[,total]
Memory Free system page table entries

This indicates the number of page table entries not currently in use by the system. If the number is less

than 5,000, there may well be a memory leak or you running out of memory.

ZABBIX_ACTIVE perf_counter_en[«MemoryFree System Page Table Entries»]
Memory Memory page faults per second

Page Faults/sec is the average number of pages faulted per second. It is measured in number of pages

faulted per second because only one page is faulted in each fault operation, hence this is also equal

to the number of page fault operations. This counter includes both hard faults (those that require

disk access) and soft faults (where the faulted page is found elsewhere in physical memory.) Most

processors can handle large numbers of soft faults without significant consequence. However, hard faults,

which require disk access, can cause significant delays.

ZABBIX_ACTIVE perf_counter_en[«MemoryPage Faults/sec»]
Memory Memory pages per second

This measures the rate at which pages are read from or written to disk to resolve hard page faults.

If the value is greater than 1,000, as a result of excessive paging, there may be a memory leak.

ZABBIX_ACTIVE perf_counter_en[«MemoryPages/sec»]
Memory Memory pool non-paged

This measures the size, in bytes, of the non-paged pool. This is an area of system memory for objects

that cannot be written to disk but instead must remain in physical memory as long as they are allocated.

There is a possible memory leak if the value is greater than 175MB (or 100MB with the /3GB switch).

A typical Event ID 2019 is recorded in the system event log.

ZABBIX_ACTIVE perf_counter_en[«MemoryPool Nonpaged Bytes»]
Monitoring agent Version of Zabbix agent running

ZABBIX_ACTIVE agent.version

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Monitoring agent Host name of Zabbix agent running

ZABBIX_ACTIVE agent.hostname

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Monitoring agent Active agent availability

Availability of active checks on the host. The value of this item corresponds to availability icons in the host list.

Possible value:

0 — unknown

1 — available

2 — not available

INTERNAL zabbix[host,active_agent,available]
Network interfaces Interface {#IFNAME}({#IFALIAS}): Bits received

Incoming traffic on the network interface.

ZABBIX_ACTIVE net.if.in[«{#IFGUID}»]

Preprocessing:

— CHANGE_PER_SECOND

— MULTIPLIER: 8

Network interfaces Interface {#IFNAME}({#IFALIAS}): Bits sent

Outgoing traffic on the network interface.

ZABBIX_ACTIVE net.if.out[«{#IFGUID}»]

Preprocessing:

— CHANGE_PER_SECOND

— MULTIPLIER: 8

Network interfaces Interface {#IFNAME}({#IFALIAS}): Inbound packets discarded

The number of incoming packets dropped on the network interface.

ZABBIX_ACTIVE net.if.in[«{#IFGUID}»,dropped]

Preprocessing:

— CHANGE_PER_SECOND

Network interfaces Interface {#IFNAME}({#IFALIAS}): Outbound packets discarded

The number of outgoing packets dropped on the network interface.

ZABBIX_ACTIVE net.if.out[«{#IFGUID}»,dropped]

Preprocessing:

— CHANGE_PER_SECOND

Network interfaces Interface {#IFNAME}({#IFALIAS}): Inbound packets with errors

The number of incoming packets with errors on the network interface.

ZABBIX_ACTIVE net.if.in[«{#IFGUID}»,errors]

Preprocessing:

— CHANGE_PER_SECOND

Network interfaces Interface {#IFNAME}({#IFALIAS}): Outbound packets with errors

The number of outgoing packets with errors on the network interface.

ZABBIX_ACTIVE net.if.out[«{#IFGUID}»,errors]

Preprocessing:

— CHANGE_PER_SECOND

Network interfaces Interface {#IFNAME}({#IFALIAS}): Speed

Estimated bandwidth of the network interface if any.

DEPENDENT net.if.speed[«{#IFGUID}»]

Preprocessing:

— JSONPATH: $[?(@.GUID == "{#IFGUID}")].Speed.first()

⛔️ON_FAIL: CUSTOM_VALUE -> 0

— JAVASCRIPT: return (value=='9223372036854775807' ? 0 : value)

— DISCARD_UNCHANGED_HEARTBEAT: 1h

Network interfaces Interface {#IFNAME}({#IFALIAS}): Interface type

The type of the network interface.

DEPENDENT net.if.type[«{#IFGUID}»]

Preprocessing:

— JSONPATH: $[?(@.GUID == "{#IFGUID}")].AdapterTypeId.first()

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Network interfaces Interface {#IFNAME}({#IFALIAS}): Operational status

The operational status of the network interface.

DEPENDENT net.if.status[«{#IFGUID}»]

Preprocessing:

— JSONPATH: $[?(@.GUID == "{#IFGUID}")].NetConnectionStatus.first()

— DISCARD_UNCHANGED_HEARTBEAT: 1d

Services State of service «{#SERVICE.NAME}» ({#SERVICE.DISPLAYNAME})

ZABBIX_ACTIVE service.info[«{#SERVICE.NAME}»,state]
Status Uptime

The system uptime expressed in the following format:»N days, hh:mm:ss».

ZABBIX_ACTIVE system.uptime
Status Zabbix agent ping

The agent always returns 1 for this item. It could be used in combination with nodata() for availability check.

ZABBIX_ACTIVE agent.ping
Storage {#DEVNAME}: Disk read rate

Rate of read operations on the disk.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Disk Reads/sec»,60]
Storage {#DEVNAME}: Disk write rate

Rate of write operations on the disk.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Disk Writes/sec»,60]
Storage {#DEVNAME}: Disk average queue size (avgqu-sz)

The current average disk queue; the number of requests outstanding on the disk while the performance data is being collected.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Current Disk Queue Length»,60]
Storage {#DEVNAME}: Disk utilization by idle time

This item is the percentage of elapsed time that the selected disk drive was busy servicing read or writes requests based on idle time.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})% Idle Time»,60]

Preprocessing:

— JAVASCRIPT: return (100 - value)

Storage {#DEVNAME}: Disk read request avg waiting time

The average time for read requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Avg. Disk sec/Read»,60]
Storage {#DEVNAME}: Disk write request avg waiting time

The average time for write requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Avg. Disk sec/Write»,60]
Storage {#DEVNAME}: Average disk read queue length

Average disk read queue, the number of requests outstanding on the disk at the time the performance data is collected.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Avg. Disk Read Queue Length»,60]
Storage {#DEVNAME}: Average disk write queue length

Average disk write queue, the number of requests outstanding on the disk at the time the performance data is collected.

ZABBIX_ACTIVE perf_counter_en[«PhysicalDisk({#DEVNAME})Avg. Disk Write Queue Length»,60]
Zabbix raw items Get filesystems

The vfs.fs.get key acquires raw information set about the file systems. Later to be extracted by preprocessing in dependent items.

ZABBIX_ACTIVE vfs.fs.get
Zabbix raw items Network interfaces WMI get

Raw data of win32_networkadapter.

ZABBIX_ACTIVE wmi.getall[rootcimv2,»select Name,Description,NetConnectionID,Speed,AdapterTypeId,NetConnectionStatus,GUID from win32_networkadapter where PhysicalAdapter=True and NetConnectionStatus>0″]

Preprocessing:

— DISCARD_UNCHANGED_HEARTBEAT: 1h

Zabbix raw items {#FSLABEL}({#FSNAME}): Get filesystem data

DEPENDENT vfs.fs.dependent[{#FSNAME},data]

Preprocessing:

— JSONPATH: $.[?(@.fsname=='{#FSNAME}')].first()

Triggers

Name Description Expression Severity Dependencies and additional info
High CPU utilization

The CPU utilization is too high. The system might be slow to respond.

min(/Windows by Zabbix agent active/system.cpu.util,5m)>{$CPU.UTIL.CRIT} WARNING
CPU interrupt time is too high

«The CPU Interrupt Time in the last 5 minutes exceeds {$CPU.INTERRUPT.CRIT.MAX}%.»

The Processor Information% Interrupt Time is the time the processor spends receiving and servicing

hardware interrupts during sample intervals. This value is an indirect indicator of the activity of

devices that generate interrupts, such as the system clock, the mouse, disk drivers, data communication

lines, network interface cards and other peripheral devices. This is an easy way to identify a potential

hardware failure. This should never be higher than 20%.

min(/Windows by Zabbix agent active/perf_counter_en["Processor Information(_total)% Interrupt Time"],5m)>{$CPU.INTERRUPT.CRIT.MAX} WARNING

Depends on:

— High CPU utilization

CPU privileged time is too high

The CPU privileged time in the last 5 minutes exceeds {$CPU.PRIV.CRIT.MAX}%.

min(/Windows by Zabbix agent active/perf_counter_en["Processor Information(_total)% Privileged Time"],5m)>{$CPU.PRIV.CRIT.MAX} WARNING

Depends on:

— CPU interrupt time is too high

— High CPU utilization

CPU queue length is too high

The CPU Queue Length in the last 5 minutes exceeds {$CPU.QUEUE.CRIT.MAX}. According to actual observations, PQL should not exceed the number of cores * 2. To fine-tune the conditions, use the macro {$CPU.QUEUE.CRIT.MAX }.

min(/Windows by Zabbix agent active/perf_counter_en["SystemProcessor Queue Length"],5m) - last(/Windows by Zabbix agent active/wmi.get[root/cimv2,"Select NumberOfLogicalProcessors from Win32_ComputerSystem"]) * 2 > {$CPU.QUEUE.CRIT.MAX} WARNING

Depends on:

— High CPU utilization

{#FSLABEL}({#FSNAME}): Disk space is critically low

Two conditions should match: First, space utilization should be above {$VFS.FS.PUSED.MAX.CRIT:»{#FSNAME}»}.

Second condition should be one of the following:

— The disk free space is less than {$VFS.FS.FREE.MIN.CRIT:»{#FSNAME}»}.

— The disk will be full in less than 24 hours.

last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},pused])>{$VFS.FS.PUSED.MAX.CRIT:"{#FSNAME}"} and ((last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},total])-last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},used]))<{$VFS.FS.FREE.MIN.CRIT:"{#FSNAME}"} or timeleft(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},pused],1h,100)<1d) AVERAGE

Manual close: YES

{#FSLABEL}({#FSNAME}): Disk space is low

Two conditions should match: First, space utilization should be above {$VFS.FS.PUSED.MAX.WARN:»{#FSNAME}»}.

Second condition should be one of the following:

— The disk free space is less than {$VFS.FS.FREE.MIN.WARN:»{#FSNAME}»}.

— The disk will be full in less than 24 hours.

last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},pused])>{$VFS.FS.PUSED.MAX.WARN:"{#FSNAME}"} and ((last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},total])-last(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},used]))<{$VFS.FS.FREE.MIN.WARN:"{#FSNAME}"} or timeleft(/Windows by Zabbix agent active/vfs.fs.dependent.size[{#FSNAME},pused],1h,100)<1d) WARNING

Manual close: YES

Depends on:

— {#FSLABEL}({#FSNAME}): Disk space is critically low

System time is out of sync

The host system time is different from the Zabbix server time.

fuzzytime(/Windows by Zabbix agent active/system.localtime,{$SYSTEM.FUZZYTIME.MAX})=0 WARNING

Manual close: YES

System name has changed

System name has changed. Ack to close.

change(/Windows by Zabbix agent active/system.hostname) and length(last(/Windows by Zabbix agent active/system.hostname))>0 INFO

Manual close: YES

Operating system description has changed

The description of the operating system has changed. Possible reasons are that the system has been updated or replaced. Ack to close the problem manually.

change(/Windows by Zabbix agent active/system.sw.os) and length(last(/Windows by Zabbix agent active/system.sw.os))>0 INFO

Manual close: YES

Depends on:

— System name has changed

High memory utilization

The system is running out of free memory.

min(/Windows by Zabbix agent active/vm.memory.util,5m)>{$MEMORY.UTIL.MAX} AVERAGE
High swap space usage

This trigger is ignored, if there is no swap configured

max(/Windows by Zabbix agent active/system.swap.pfree,5m)<{$SWAP.PFREE.MIN.WARN} and last(/Windows by Zabbix agent active/system.swap.size[,total])>0 WARNING

Depends on:

— High memory utilization

Number of free system page table entries is too low

The Memory Free System Page Table Entries is less than {$MEM.PAGE_TABLE_CRIT.MIN} for 5 minutes. If the number is less than 5,000, there may well be a memory leak.

max(/Windows by Zabbix agent active/perf_counter_en["MemoryFree System Page Table Entries"],5m)<{$MEM.PAGE_TABLE_CRIT.MIN} WARNING

Depends on:

— High memory utilization

The Memory Pages/sec is too high

The Memory Pages/sec in the last 5 minutes exceeds {$MEM.PAGE_SEC.CRIT.MAX}. If the value is greater than 1,000, as a result of excessive paging, there may be a memory leak.

min(/Windows by Zabbix agent active/perf_counter_en["MemoryPages/sec"],5m)>{$MEM.PAGE_SEC.CRIT.MAX} WARNING

Depends on:

— High memory utilization

Zabbix agent: active checks are not available

Active checks are considered unavailable. Agent is not sending heartbeat for prolonged time.

min(/Windows by Zabbix agent active/zabbix[host,active_agent,available],{$AGENT.TIMEOUT})=2 HIGH
Interface {#IFNAME}({#IFALIAS}): High bandwidth usage

The network interface utilization is close to its estimated maximum bandwidth.

(avg(/Windows by Zabbix agent active/net.if.in["{#IFGUID}"],15m)>({$IF.UTIL.MAX:"{#IFNAME}"}/100)*last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"]) or avg(/Windows by Zabbix agent active/net.if.out["{#IFGUID}"],15m)>({$IF.UTIL.MAX:"{#IFNAME}"}/100)*last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"])) and last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"])>0

Recovery expression:

avg(/Windows by Zabbix agent active/net.if.in["{#IFGUID}"],15m)<(({$IF.UTIL.MAX:"{#IFNAME}"}-3)/100)*last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"]) and avg(/Windows by Zabbix agent active/net.if.out["{#IFGUID}"],15m)<(({$IF.UTIL.MAX:"{#IFNAME}"}-3)/100)*last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"])

WARNING

Manual close: YES

Depends on:

— Interface {#IFNAME}({#IFALIAS}): Link down

Interface {#IFNAME}({#IFALIAS}): High error rate

Recovers when below 80% of {$IF.ERRORS.WARN:»{#IFNAME}»} threshold

min(/Windows by Zabbix agent active/net.if.in["{#IFGUID}",errors],5m)>{$IF.ERRORS.WARN:"{#IFNAME}"} or min(/Windows by Zabbix agent active/net.if.out["{#IFGUID}",errors],5m)>{$IF.ERRORS.WARN:"{#IFNAME}"}

Recovery expression:

max(/Windows by Zabbix agent active/net.if.in["{#IFGUID}",errors],5m)<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8 and max(/Windows by Zabbix agent active/net.if.out["{#IFGUID}",errors],5m)<{$IF.ERRORS.WARN:"{#IFNAME}"}*0.8

WARNING

Manual close: YES

Depends on:

— Interface {#IFNAME}({#IFALIAS}): Link down

Interface {#IFNAME}({#IFALIAS}): Ethernet has changed to lower speed than it was before

This Ethernet connection has transitioned down from its known maximum speed. This might be a sign of autonegotiation issues. Ack to close.

change(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"])<0 and last(/Windows by Zabbix agent active/net.if.speed["{#IFGUID}"])>0 and last(/Windows by Zabbix agent active/net.if.status["{#IFGUID}"])=2 INFO

Manual close: YES

Depends on:

— Interface {#IFNAME}({#IFALIAS}): Link down

Interface {#IFNAME}({#IFALIAS}): Link down

This trigger expression works as follows:

1. Can be triggered if operations status is down.

2. {$IFCONTROL:»{#IFNAME}»}=1 — user can redefine Context macro to value — 0. That marks this interface as not important.

No new trigger will be fired if this interface is down.

3. {TEMPLATE_NAME:METRIC.diff()}=1) — trigger fires only if operational status is different from Connected(2).

WARNING: if closed manually — won’t fire again on next poll, because of .diff.

{$IFCONTROL:"{#IFNAME}"}=1 and last(/Windows by Zabbix agent active/net.if.status["{#IFGUID}"])<>2 and (last(/Windows by Zabbix agent active/net.if.status["{#IFGUID}"],#1)<>last(/Windows by Zabbix agent active/net.if.status["{#IFGUID}"],#2))

Recovery expression:

last(/Windows by Zabbix agent active/net.if.status["{#IFGUID}"])=2 or {$IFCONTROL:"{#IFNAME}"}=0

AVERAGE

Manual close: YES

«{#SERVICE.NAME}» ({#SERVICE.DISPLAYNAME}) is not running

The service has a state other than «Running» for the last three times.

min(/Windows by Zabbix agent active/service.info["{#SERVICE.NAME}",state],#3)<>0 AVERAGE
Host has been restarted

The device uptime is less than 10 minutes.

last(/Windows by Zabbix agent active/system.uptime)<10m WARNING

Manual close: YES

Zabbix agent is not available

For active agents, nodata() with agent.ping is used with {$AGENT.NODATA_TIMEOUT} as time threshold.

nodata(/Windows by Zabbix agent active/agent.ping,{$AGENT.NODATA_TIMEOUT})=1 AVERAGE

Manual close: YES

{#DEVNAME}: Disk is overloaded

The disk appears to be under heavy load

min(/Windows by Zabbix agent active/perf_counter_en["PhysicalDisk({#DEVNAME})% Idle Time",60],15m)>{$VFS.DEV.UTIL.MAX.WARN} WARNING

Manual close: YES

Depends on:

— {#DEVNAME}: Disk read request responses are too high

— {#DEVNAME}: Disk write request responses are too high

{#DEVNAME}: Disk read request responses are too high

This trigger might indicate disk {#DEVNAME} saturation.

min(/Windows by Zabbix agent active/perf_counter_en["PhysicalDisk({#DEVNAME})Avg. Disk sec/Read",60],15m) > {$VFS.DEV.READ.AWAIT.WARN:"{#DEVNAME}"} WARNING

Manual close: YES

{#DEVNAME}: Disk write request responses are too high

This trigger might indicate disk {#DEVNAME} saturation.

min(/Windows by Zabbix agent active/perf_counter_en["PhysicalDisk({#DEVNAME})Avg. Disk sec/Write",60],15m) > {$VFS.DEV.WRITE.AWAIT.WARN:"{#DEVNAME}"} WARNING

Manual close: YES

Feedback

Please report any issues with the template at https://support.zabbix.com.

You can also provide feedback, discuss the template, or ask for help at ZABBIX forums.

Пассивная проверка

1, проактивные и пассивные относины к ссылке, здесь мы сказали, что инициатива и пассивная относится к «агенту».

2, агент работает в пассивном режиме, то Zabbix Server будет опросить агент, когда сервер Zabbix запланирован для мониторинга ключевого слова Zabbix в качестве параметра запроса. После получения запроса запросить данные мониторинга, соответствующую этому ключевому слову мониторинга, и, наконец, возвращает это на сервер.

3. Тип элемента мониторинга мониторинга пассивного режима, вам необходимо выбрать «Zabbix Agent» в интерфейсе настроек интерфейса.

Пассивные параметры конфигурации

Используя пассивный агент, вам необходимо указать следующие параметры конфигурации в файле конфигурации Zabbix_agentd.conf:

##### Passive checks related
​
### Option: Server
#   List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of Zabbix servers and Zabbix proxies.
#   Incoming connections will be accepted only from the hosts listed here.
#   If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
#   and '::/0' will allow any IPv4 or IPv6 address.
#   '0.0.0.0/0' can be used to allow any IPv4 address.
#   Example: Server=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: yes, if StartAgents is not explicitly set to 0
# Default:
# Server=
​
Server=127.0.0.1
​
### Option: ListenPort
#   Agent will listen on this port for connections from the server.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10050
​
### Option: ListenIP
#   List of comma delimited IP addresses that the agent should listen on.
#   First IP address is sent to Zabbix server if connecting to it to retrieve list of active checks.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0
​
### Option: StartAgents
#   Number of pre-forked instances of zabbix_agentd that process passive checks.
#   If set to 0, disables passive checks and the agent will not listen on any TCP port.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartAgents=3
  • Server: Используется для указания имени хоста или IP-адрес сервера Zabbix. Этот параметр представляет собой список IP-адресов, разделенных запятыми (или именем), а агент Zabbix принимает только соединение, чтобы указать хост в списке.

  • ListenPort: Номер порта, используемый для указания слушателя агента Zabbix, значение по умолчанию составляет 10050, диапазон значения составляет 1024-32767.

  • ListenIP: Используется для указания IP-адреса прослушивателя агента Zabbix Agent, этот параметр подходит для случая, когда хост монитора имеет несколько сетевых карт или несколько IP-адресов. Этот параметр представляет собой список IP-адресов разделенных запятыми.

  • StartAgents: Используется для указания количества экземпляров процессов Zabbix_Agentd заранее для обработки элементов пассивного мониторинга, значение по умолчанию составляет 3. Если этот параметр установлен на 0, пассивный режим агента отключен, а агент не будет прослушивать любой порт TCP.

Zabbix_get Tool.

Инструмент ZABBIX_GET может использоваться для моделирования процесса связи сети между пассивным агентом и сервером Zabbix. Zabbix_get применяется на стороне сервера и запрашивает данные агенту.

Применение:

zabbix_get [-s <host name or IP> ] [-p <port number> ] [-I <IP address> ] [-k <item key> ]

Вариант:

  • -s/-host <host name or IP>: Укажите имя хоста или IP-адрес агента Monited Server.

  • -p/--port <port number>: Укажите номер порта агента. По умолчанию 10050.

  • -I/--source-address <IP address>: Укажите IP-адрес источника.

  • -k/--key <item key>: Укажите ключевые слова для элемента мониторинга, чтобы получить соответствующие данные мониторинга.

пример: Выполните следующую команду на сервере Zabbix:

# -S: Укажите IP-адрес сторон агента
./zabbix_get -s 127.0.0.1 -p 10050 -k agent.ping
./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]"
./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg5]"
./zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg15]"

рабочий процесс

 

Примечание. Для обработки потока «Данные мониторинга запросов» см. Следующий анализ.

Анализ источника: Listener_Thread

ZBX_THREAD_ENTRY(listener_thread, args)
{
	int		ret;
	zbx_socket_t	s;

	process_type = ((zbx_thread_args_t *)args)->process_type;
	server_num = ((zbx_thread_args_t *)args)->server_num;
	process_num = ((zbx_thread_args_t *)args)->process_num;

	zabbix_log(LOG_LEVEL_INFORMATION, "%s #%d started [%s #%d]", get_program_type_string(program_type),
			server_num, get_process_type_string(process_type), process_num);

	memcpy(&s, (zbx_socket_t *)((zbx_thread_args_t *)args)->args, sizeof(zbx_socket_t));

	zbx_free(args);

	 	// Бесконечная петля 
	while (ZBX_IS_RUNNING())
	{
		zbx_setproctitle("listener #%d [waiting for connection]", process_num);
		// zbx_tcp_accept: select(),accept(),recv()
		ret = zbx_tcp_accept(&s, configured_tls_accept_modes);
		zbx_update_env(zbx_time());

		if (SUCCEED == ret)
		{
			zbx_setproctitle("listener #%d [processing request]", process_num);

			if ('' != *CONFIG_HOSTS_ALLOWED &&
					SUCCEED == (ret = zbx_tcp_check_allowed_peers(&s, CONFIG_HOSTS_ALLOWED)))
			{
				{
					 Process_Listener (& ы); // Пассивный режим Основная технологическая логика
				}
			}

			 			// Отключить 
			zbx_tcp_unaccept(&s);
		}

		if (SUCCEED == ret || EINTR == zbx_socket_last_error())
			continue;

		 // Спать
		if (ZBX_IS_RUNNING())
			zbx_sleep(1);
	}
}


static void	process_listener(zbx_socket_t *s)
{
	AGENT_RESULT	result;
	char		**value = NULL;
	int		ret;

	 // ZBX_TCP_RECV_TO: READ (), прочитайте элемент мониторинга, отправленного концом сервера
	if (SUCCEED == (ret = zbx_tcp_recv_to(s, CONFIG_TIMEOUT)))
	{
		zbx_rtrim(s->buffer, "rn");

		 // Пример журнала: запрошенная [system.cpu.load [percpu, avg15]]]]]
		zabbix_log(LOG_LEVEL_DEBUG, "Requested [%s]", s->buffer);

		init_result(&result);

		 // Процесс: вызовите функцию элемента мониторинга (команда-> функция (и запрос, результат), данные мониторинга запросов
		if (SUCCEED == process(s->buffer, PROCESS_WITH_ALIAS, &result))
		 {/ Успех
			if (NULL != (value = GET_TEXT_RESULT(&result)))
			{
				 // Пример журнала: отправка обратно [0.640000]
				zabbix_log(LOG_LEVEL_DEBUG, "Sending back [%s]", *value);
				 // ZBX_TCP_SEND_TO: Написать (), отправьте элемент монитора на результат возврата сторона сервера
				ret = zbx_tcp_send_to(s, *value, CONFIG_TIMEOUT);
			}
		}
		else
		 {// не смогли
			value = GET_MSG_RESULT(&result);

			if (NULL != value)
			{
				static char	*buffer = NULL;
				static size_t	buffer_alloc = 256;
				size_t		buffer_offset = 0;

				zabbix_log(LOG_LEVEL_DEBUG, "Sending back [" ZBX_NOTSUPPORTED ": %s]", *value);

				if (NULL == buffer)
					buffer = (char *)zbx_malloc(buffer, buffer_alloc);

				zbx_strncpy_alloc(&buffer, &buffer_alloc, &buffer_offset,
						ZBX_NOTSUPPORTED, ZBX_CONST_STRLEN(ZBX_NOTSUPPORTED));
				buffer_offset++;
				zbx_strcpy_alloc(&buffer, &buffer_alloc, &buffer_offset, *value);

				ret = zbx_tcp_send_bytes_to(s, buffer, buffer_offset, CONFIG_TIMEOUT);
			}
			else
			{
				zabbix_log(LOG_LEVEL_DEBUG, "Sending back [" ZBX_NOTSUPPORTED "]");

				ret = zbx_tcp_send_to(s, ZBX_NOTSUPPORTED, CONFIG_TIMEOUT);
			}
		}

		free_result(&result);
	}

	if (FAIL == ret)
		zabbix_log(LOG_LEVEL_DEBUG, "Process listener error: %s", zbx_socket_strerror());
}

Активный контроль

1. Если агент работает в активном режиме, то агент запросит список активных элементов мониторинга на Zabbix Server, а затем отправить список активных элементов мониторинга на сервер Zabbix.

2. Тип элемента мониторинга активного режима требуется для выбора «Zabbix Agent» в интерфейсе интерфейса настройки.

3, в интерфейсе настроек передней частиUpdate interval: Монитор времени обновления данных в секундах. Этот параметр также будет получен, когда агент запрашивает список активных элементов мониторинга на сервер Zabbix. Агент будет активно отправлять данные мониторинга на сервер Zabbix на основе этого временного интервала. Мы увидим этот параметр в исходном коде.

Параметры конфигурации, связанные с активным режимом

Используйте Active Agent, вам необходимо указать следующие параметры конфигурации в файле конфигурации Zabbix_agentd.conf:

##### Active checks related

### Option: ServerActive
#	List of comma delimited IP:port (or DNS name:port) pairs of Zabbix servers and Zabbix proxies for active checks.
#	If port is not specified, default port is used.
#	IPv6 addresses must be enclosed in square brackets if port for that host is specified.
#	If port is not specified, square brackets for IPv6 addresses are optional.
#	If this parameter is not specified, active checks are disabled.
#	Example: ServerActive=127.0.0.1:20051,zabbix.domain,[::1]:30051,::1,[12fc::1]
#
# Mandatory: no
# Default:
# ServerActive=

ServerActive=127.0.0.1

### Option: Hostname
#	Unique, case sensitive hostname.
#	Required for active checks and must match hostname as configured on the server.
#	Value is acquired from HostnameItem if undefined.
#
# Mandatory: no
# Default:
# Hostname=

Hostname=Zabbix server

### Option: HostnameItem
#	Item used for generating Hostname if it is undefined. Ignored if Hostname is defined.
#	Does not support UserParameters or aliases.
#
# Mandatory: no
# Default:
# HostnameItem=system.hostname

### Option: HostMetadata
#	Optional parameter that defines host metadata.
#	Host metadata is used at host auto-registration process.
#	An agent will issue an error and not start if the value is over limit of 255 characters.
#	If not defined, value will be acquired from HostMetadataItem.
#
# Mandatory: no
# Range: 0-255 characters
# Default:
# HostMetadata=

### Option: HostMetadataItem
#	Optional parameter that defines an item used for getting host metadata.
#	Host metadata is used at host auto-registration process.
#	During an auto-registration request an agent will log a warning message if
#	the value returned by specified item is over limit of 255 characters.
#	This option is only used when HostMetadata is not defined.
#
# Mandatory: no
# Default:
# HostMetadataItem=

### Option: RefreshActiveChecks
#	How often list of active checks is refreshed, in seconds.
#
# Mandatory: no
# Range: 60-3600
# Default:
# RefreshActiveChecks=120

### Option: BufferSend
#	Do not keep data longer than N seconds in buffer.
#
# Mandatory: no
# Range: 1-3600
# Default:
# BufferSend=5

### Option: BufferSize
#	Maximum number of values in a memory buffer. The agent will send
#	all collected data to Zabbix Server or Proxy if the buffer is full.
#
# Mandatory: no
# Range: 2-65535
# Default:
# BufferSize=100

### Option: MaxLinesPerSecond
#	Maximum number of new lines the agent will send per second to Zabbix Server
#	or Proxy processing 'log' and 'logrt' active checks.
#	The provided value will be overridden by the parameter 'maxlines',
#	provided in 'log' or 'logrt' item keys.
#
# Mandatory: no
# Range: 1-1000
# Default:
# MaxLinesPerSecond=20
  • ServerActive: Используется для указания Zabbix Server, способный получать данные мониторинга. Этот параметр — это список «IP-адресов: номеров портов» (или «имя хоста: номер порта») с запятой. Если номер порта не указан, используйте номер порта по умолчанию 10051. Если этот параметр не указан, активный режим агента отключен.

  • Hostname: Используется для указания имени хоста контролируемого хоста, который является уникальным, который чувствителен к регистру. Это имя хоста должно быть идентичным имени хоста контролируемого хоста, зарегистрированного на передней странице Zabbix, в противном случае агент не будет успешно обновлять свой собственный список активных мониторинга.

  • RefreshActiveChecks: Используется для уточнения временного интервала обновления активного списка элементов мониторинга, в считанные секунды.

  • BufferSend: Используется для уточнения времени передачи буфера агента в секундах. Время накопления данных мониторинга не превышается временем, указанным этим параметром в буфере.

  • BufferSize: Используется для указания размера буфера, то есть максимальное количество данных мониторинга. Если буфер заполнен, агент отправит все собранные данные мониторинга на сервер Zabbix или агент.

Zabbix_Sender Tools

Утилита Zabbix_Sender может использоваться для моделирования потоков сети связи между активными серверами агента и Zabbix. Zabbix_Sender применяется к стороне агента и передает данные на сервер.

Применение:

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

Вариант:

  • -c/--config <config-file>: Использоватьconfig-fileУказанный файл конфигурации. Zabbix_Sender прочитает детали сервера из файла конфигурации агента. Абсолютный путь файла конфигурации должен быть указан. По умолчанию Zabbix_Sender не читает какой-либо профиль. Zabbix_sender использует только в файле конфигурацииHostnameServerActive(Только его первая запись) иSourceIPпараметр.

  • -z/--zabbix-server <server>: Имя хоста или IP-адрес Zabbix Server. Если сервер контролируется прокси, то имя хоста или IP-адрес прокси должен быть указан.

  • -p/--port <port>: Указывает номер порта сервера Capture (Frapper), работающий на сервере Zabbix. По умолчанию 10051.

  • -s/--host <host>: Укажите имя хоста, зарегистрированное на странице передней части Zabbix. IP-адрес хоста и имя DNS не будет работать.

  • -I/--source-address <IP>: Укажите IP-адрес источника.

  • -k/--key <key>: Укажите ключевые слова для элемента мониторинга.

  • -o/--value <value>: Укажите данные мониторинга.

  • -i/--input-file <inputfile>: ИзinputfileДанные мониторинга нагрузки в указанном файле.

  • -T/--with-timestamps: Эта опция может быть--input-fileОпция используется в сочетании.

  • -r/--real-time: При получении данных мониторинга вы отправите его на сервер Zabbix. Эта опция может использоваться при чтении данных мониторинга со стандартного ввода.

пример: Выполните следующую команду на агенте Zabbix:

# ./zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -k active.test.item -o 123.45

рабочий процесс

 

Примечание. Для обработки потока «Данные мониторинга запросов» см. Следующий анализ.

Анализ исходного кода: Active_Checks_Thread

ZBX_THREAD_ENTRY(active_checks_thread, args)
{
	ZBX_THREAD_ACTIVECHK_ARGS activechk_args;

	time_t	nextcheck = 0, nextrefresh = 0, nextsend = 0, now, delta, lastcheck = 0;
	double	time_now;

	assert(args);
	assert(((zbx_thread_args_t *)args)->args);

	process_type = ((zbx_thread_args_t *)args)->process_type;
	server_num = ((zbx_thread_args_t *)args)->server_num;
	process_num = ((zbx_thread_args_t *)args)->process_num;

	zabbix_log(LOG_LEVEL_INFORMATION, "%s #%d started [%s #%d]", get_program_type_string(program_type),
			server_num, get_process_type_string(process_type), process_num);

	activechk_args.host = zbx_strdup(NULL, ((ZBX_THREAD_ACTIVECHK_ARGS *)((zbx_thread_args_t *)args)->args)->host);
	activechk_args.port = ((ZBX_THREAD_ACTIVECHK_ARGS *)((zbx_thread_args_t *)args)->args)->port;

	zbx_free(args);

	session_token = zbx_create_token(0);

	// инициализация активного мониторинга
	init_active_metrics();

	 	// Бесконечная петля 
	while (ZBX_IS_RUNNING())
	{
		time_now = zbx_time();
		zbx_update_env(time_now);
		now = (int)time_now;

		 / / Отправить данные мониторинга в буфере, вызовите функции send_buffer
		if (now >= nextsend)
		{
			send_buffer(activechk_args.host, activechk_args.port);
			nextsend = time(NULL) + 1;
		}

		 // Обновить список активных элементов мониторинга, по умолчанию 120S щетка один раз.
		if (now >= nextrefresh)
		{
			zbx_setproctitle("active checks #%d [getting list of active checks]", process_num);
			 // Если обновление не удалось, в следующий раз после 60-х годов обновите его снова.
			if (FAIL == refresh_active_checks(activechk_args.host, activechk_args.port))
			{
				nextrefresh = time(NULL) + 60;
			}
			else
			{
				nextrefresh = time(NULL) + CONFIG_REFRESH_ACTIVE_CHECKS;
			}
		}

		 // Активно отправлять данные мониторинга
		if (now >= nextcheck && CONFIG_BUFFER_SIZE / 2 > buffer.pcount)
		{
			zbx_setproctitle("active checks #%d [processing active checks]", process_num);

			process_active_checks(activechk_args.host, activechk_args.port);

			if (CONFIG_BUFFER_SIZE / 2 <= buffer.pcount)	/* failed to complete processing active checks */
				continue;

			 // Найдите все минимальный интервал времени во всех активных метриках мониторинга, обновите время NextCreck, если вы не можете получить его, вы можете установить его по умолчанию 60-х.
			nextcheck = get_min_nextcheck();
			if (FAIL == nextcheck)
				nextcheck = time(NULL) + 60;
		}
		else
		{
			 // Текущее время - LastCheck <0, это произойдет в случае, когда системное время регулируется, в это время Zabbix должен соответственно обновлять значение NextCreck.
			if (0 > (delta = now - lastcheck))
			{
				zabbix_log(LOG_LEVEL_WARNING, "the system time has been pushed back,"
						" adjusting active check schedule");
				 // Время системы регулируется, обновляет расписание задач активных мониторинга, NextCreck + Delta для каждого индикатора
				update_schedule((int)delta);
				nextcheck += delta;
				nextsend += delta;
				nextrefresh += delta;
			}

			zbx_setproctitle("active checks #%d [idle 1 sec]", process_num);
			 / / Сон 1с, не отправляя активные метрики мониторинга
			zbx_sleep(1);
		}

		lastcheck = now;
	}

	zbx_free(session_token);
}

static void	process_active_checks(char *server, unsigned short port)
{
	const char	*__function_name = "process_active_checks";
	char		*error = NULL;
	int		i, now, ret;

	zabbix_log(LOG_LEVEL_DEBUG, "In %s() server:'%s' port:%hu", __function_name, server, port);

	now = (int)time(NULL);

	 // Traverse Active_Metrics, отправляет ИТ-сеанс
	for (i = 0; i < active_metrics.values_num; i++)
	{
		zbx_uint64_t		lastlogsize_last, lastlogsize_sent;
		int			mtime_last, mtime_sent;
		ZBX_ACTIVE_METRIC	*metric;

		metric = (ZBX_ACTIVE_METRIC *)active_metrics.values[i];

		 / / Если время NextCreck, установленном индикатором, превышает текущее время, индикатор не отправляет его, продолжайте следующий индикатор.
		if (metric->nextcheck > now)
			continue;

		...
		 // Отправить индикатор, вызовите функцию send_buffer
		send_buffer(server, port);
		 // Обновление Далее Отправить время
		metric->nextcheck = (int)time(NULL) + metric->refresh;
	}
}

1. Функция отправки индикатораsend_buffer,будутbufferДанные отправляются на стороне сервера,bufferДанные будут сериализоватьjsonСреда, затем используйтеzbx_tcp_sendФункция отправляется. Мы введем в следующую статью.

2、active_checks_threadВ 3 времени параметры, они являются:

  • RefreshActiveChecks: Используется для уточнения временного интервала обновления активного списка элементов мониторинга, в считанные секунды.

    • «Текущее время — последнее время обновления> = Обновить интервал времени (RefreshActiveChecksКогда вы обновляете активный мониторинг.

  • Update interval: Монитор времени обновления данных в секундах. Агент будет активно отправлять данные мониторинга на сервер Zabbix на основе этого временного интервала.

    • «Текущее время — время доставки в последний раз> = Интервал времени отправки (Update intervalПри отправке активного индикатора мониторинга.

  • BufferSend: Используется для уточнения времени передачи буфера агента в секундах. Время накопления данных мониторинга не превышается временем, указанным этим параметром в буфере.

И есть ли в этом смысл?

Вот так, при помощи нехитрых манипуляций, можно смотреть красивые графики про десяток машин и один сервер. Но зачем?..

Вот так, при помощи нехитрых манипуляций, можно смотреть красивые графики про десяток машин и один сервер. Но зачем?..

Для тех, кто задумался и сомневается, я решил описать кое-что из своего опыта.

Мониторинг вообще штука полезная, бесспорно. У меня лично в какой-то период возникло сразу несколько задач:

  1. Круглосуточно и непрерывно мониторить одну специфическую железку по ряду параметров;

  2. Мониторить у рабочих станций информацию о температурах, ЦП в первую очередь;

  3. Всякие мелочи в связи с широким внедрением удалёнки: количество подключений по VPN, общее состояние дополнительных виртуальных машин.

Подробнее про локальные задачи:

  1. Надо было оценить и наглядно представить данные об интернет-канале. Канал на тот момент представлял собой 4G-роутер Huawei. Это устройство было последним, но далеко не первым в огромном количестве плясок с бубном в попытках избавиться от разного рода нестабильностей. Забегая вперёд: забирать с него данные напрямую о качестве сигнала более-менее стандартными средствами оказалось невозможно, и даже добраться до этих данных — отдельный квест. Пришлось городить дендрофекальную конструкцию, которая, на удивление стабильно, и стала в итоге поставлять данные. Данные в динамике и в графическом представлении оказались настолько неутешительными, что позволили убедить всех причастных таки поменять канал, даже и на более дорогой;

  2. Данные о температуре процессора дают сразу несколько линий: можно обнаружить шифровальщик в процессе работы, наглядно сделать вывод о недостаточной мощности рабочей станции, найти повод провести плановую чистку, узнать о нарушении условий эксплуатации. Последний пункт особенно хорош: множество отказов оборудования и BSOD’ов в итоге нашли причину в «я ставлю обогреватель под стол, ну и свой баул, ну да, прям к этой решётке. А что? А я канпуктер развернула, а то неудобно»;

  3. Интерфейс того же OpenVPN… ну, он в общем даже и не интерфейс и оставляет желать любого другого. Отдельная история.

Как большой любитель велосипедить всё подряд, сначала я решил свелосипедить и это. Уже валялись под рукой всякие скрипты по сбору статистки, и html проекты с графиками на js, и какие-то тестовые БД… Но тут сработала жадность (и лень, чоужтам). А чего это, подумал я, самому опять корячиться, если в том же Zabbix уже куча всяких шаблонов, и помимо задач из списка можно будет видеть много чего ещё? Да и он бесплатный к тому же. Всего-то делов, виртуалку поднять да клиенты централизованно расставить. Потренируюсь с ним, опять же, он много где используется.

Итак, нам понадобятся:

  1. Виртуальная машина или физический хост. Zabbix нетребователен к ресурсам при небольшом количестве хостов на мониторинге: мне хватило одного виртуального процессора на 2ГГц и 4 Гб RAM за глаза;

  2. Любой инструмент для автоматического раскидывания zabbix-agent. При некотором скилле это можно делать даже через оригинальный WSUS, или просто батником с psexec, вариантов много. Также желательно запилить предварительно сконфигурированный инсталлятор агента — об этом ниже;

  3. Много желания пилить напильником. Скажу честно и сразу: из первоначального списка 3 из 3 реализовывалось руками на местности. Zabbix стандартной комплектации в такое не может.

У Zabbix много вариантов установки. В моём случае (я начинал с 4 LTS) сработала только установка руками в чистую, из собственного образа, OC в виртуальной машине на Hyper-V. Так что, коли не получится с первого раза, — не сдавайтесь, пробуйте. Саму процедуру подробнее описывать не буду, есть куча статей и хороший официальный мануал.

Вот так красиво это выглядит, когда применяется по назначению. Автор: Dotneft - собственная работа, CC BY-SA 4.0 https://commons.wikimedia.org/w/index.php?curid=73459928

Вот так красиво это выглядит, когда применяется по назначению. Автор: Dotneft — собственная работа, CC BY-SA 4.0 https://commons.wikimedia.org/w/index.php?curid=73459928

Про формирование инсталлятора агента: один из самых простых способов — использовать утилиты наподобие 7zfx Builder . Нужно будет подготовить:

  • файл zabbix_agentd.conf ;

  • файлы сторонних приложений и скриптов, используемых в userParameters (об этом ниже) ;

  • скрипт инсталлятора с кодом наподобие этого:

SETLOCAL ENABLEDELAYEDEXPANSION 
SET INSTDR=C:ZabbixAgent 
SET IP=192.168.100.10 
set ip_address_string="IPv4-адрес"

for /f "usebackq tokens=2 delims=:" %%F in (ipconfig ^| findstr /c:%ip_address_string%) do SET IP=%%F 
SET IP=%IP: =% 
ECHO SourceIP=%IP%>> "%INSTDR%confzabbix_agentd.conf" 
ECHO ListenIP=%IP%>> "%INSTDR%confzabbix_agentd.conf" 
ECHO Hostname=%COMPUTERNAME%>> "%INSTDR%confzabbix_agentd.conf"

"%INSTDR%binzabbix_agentd.exe" -c "%INSTDR%confzabbix_agentd.conf" -i 
net start "Zabbix Agent" 
ENDLOCAL

Кстати, об IP. Адрес в Zabbix является уникальным идентификатором, так что при «свободном» DHCP нужно будет настроить привязки. Впрочем, это и так хорошая практика.

Также могу порекомендовать добавить в инсталлятор следующий код:

sc failure "Zabbix Agent" reset= 30 actions= restart/60000

Как и многие сервисы, Zabbix agent под Windows при загрузке ОС стартует раньше, чем некоторые сетевые адаптеры. Из-за этого агент не может увидеть IP, к которому должен быть привязан, и останавливает службу. В оригинальном дистрибутиве при установке настроек перезапуска нет.

После этого добавляем хосты. Не забудьте выбрать Template – OS Windows. Если сервер не видит клиента — проверяем:

  1. IP-адрес;

  2. файрвол на клиенте;

  3. работу службы на клиенте — смотрим zabbix_agentd.log, он вполне информативный.

По моему опыту, сервер и агенты Zabbix очень стабильны. На сервере, возможно, придётся расширить пул памяти по active checks (уведомление о необходимости такого действия появляется в дашборде), на клиентах донастроить упомянутые выше нюансы с запуском службы, а также, при наличии UserParameters, донастроить параметр timeout (пример будет ниже).

Что видно сразу, без настроек?

Сразу видно, что Zabbix заточен под другое :) Но и об обычных рабочих станциях в конфигурации «из коробки» можно узнать много: идёт мониторинг оперативной памяти и SWAP, места на жёстких дисках, загрузки ЦП и сетевых адаптеров; будут предупреждения о том, что клиент давно не подключался или недавно перезагружен; агент автоматически создаёт список служб и параметров их работы, и сгенерирует оповещение о «необычном» поведении. Практически из коробки (со скачиванием доп. template’ов с офсайта и небольшой донастройкой) работает всё, что по SNMP: принтеры и МФУ, управляемые свитчи, всякая специфическая мелочь. Иметь алерты по тем же офисным принтерам в едином окне очень удобно.

В общем-то, очень неплохо, но…

Что доделывать?

Оооо. Ну, хотел повелосипедить, так это всегда пожалуйста. Прежде всего, нет алертов на события типа «критические» из системного лога Windows, при том, что механизм доступа к логам Windows встроенный, а не внешний, как Zabbix agent active. Странно, ну штош. Всё придётся добавлять руками.

Например

для записи и оповещения по событию «Система перезагрузилась, завершив работу с ошибками» (Microsoft-Windows-Kernel-Power, коды 41, 1001) нужно создать Item c типом Zabbix agent (active) и кодом в поле Key:

eventlog[System,,,,1001]

По этому же принципу создаём оповещения на другие коды. Странно, но готового template я не нашёл.

Cистема автоматизированной генерации по службам генерирует целую тучу спама. Часть служб в Windows предполагает в качестве нормального поведения тип запуска «авто» и остановку впоследствии. Zabbix в такое не может и будет с упорством пьяного сообщать «а BITS-то остановился!». Есть широко рекомендуемый способ избавления от такого поведения — добавление набора служб в фильтр-лист: нужно добавить в Template «Module Windows services by Zabbix agent», в разделе Macros, в фильтре {$SERVICE.NAME.NOT_MATCHES} имя службы в формате RegExp. Получается список наподобие:

^RemoteRegistry|MMCSS|gupdate|SysmonLog|
clr_optimization_v.+|clr_optimization_v.+|
sppsvc|gpsvc|Pml Driver HPZ12|Net Driver HPZ12|
MapsBroker|IntelAudioService|Intel(R) TPM Provisioning Service|
dbupdate|DoSvc|BITS.*|ShellHWDetection.*$

И он не работает работает с задержкой в 30 дней.

После добавления служб в фильтр триггеры будут висеть ещё 30 дней. Этот срок, впрочем, тоже можно настроить

После добавления служб в фильтр триггеры будут висеть ещё 30 дней. Этот срок, впрочем, тоже можно настроить

Про службы, автоматически генерируемые в Windows 10, я вообще промолчу.
Нет никаких температур (но это, если подумать, ладно уж), нет SMART и его алертов (тоже отдельная история, конечно). Нет моих любимых UPS.

Некоторые устройства генерируют данные и алерты, работу с которыми надо выстраивать. В частности, например, управляемый свитч Tp-Link генерирует интересный алерт «скорость на порту понизилась». Почти всегда это означает, что рабочая станция просто выключена в штатном режиме (ушла в S3), но сама постановка вопроса заставляет задуматься: сведения, вообще, полезные — м.б. и драйвер глючит, железо дохнет, время странное…

Некоторые встроенные алерты требуют переработки и перенастройки. Часть из них не закрывается в «ручном» режиме по принципу «знаю, не ори, так надо» и создаёт нагромождение информации на дашборде.

Короче говоря, многое требует допиливания напильником под местные реалии и задачи.

После допиливания – примерно так

После допиливания – примерно так

О локальных задачах

Всё, что не встроено в Zabbix agent, реализуется через механизм Zabbix agent (active). Суть проста: пишем скрипт, который будет выдавать нужные нам данные. Прописываем наш скрипт в conf:

UserParameter=имя.параметра,путькскрипту 

Нюансы:

  • если хотите получать в Zabbix строку на кириллице из cmd — не надо. Только powershell;

  • если параметр специфический – для имени нужно будет придумать и сформулировать дерево параметров, наподобие «hardware.huawei.modem.link.speed» ;

  • отладка и стабильность таких параметров — вопрос и скрипта, и самого Zabbix. Об этом дальше.

Хотелка №1: температуры процессоров рабочих станций

В качестве примера реализуем хотелку «темература ЦП рабочей станции». Вам может встретиться вариант наподобие:

wmic /namespace:rootwmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature

но это не работает (вернее, работает не всегда и не везде).
Самый простой способ, что я нашёл — воспользоваться проектом OpenHardwareMonitor. Он свои результаты выгружает прямо в тот же WMI, так что температуру получим так:

@echo OFF 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET TMPTMP=0 
for /f "tokens=* skip=1 delims=" %%I in ('wmic /namespace:rootOpenHardwareMonitor PATH Sensor WHERE Identifier^="/intelcpu/0/temperature/1" get Value') DO (     
	SET TMPTMP=%%I && GOTO :NXT 
) 
:NXT  
ECHO %TMPTMP% 
ENDLOCAL 
GOTO :EOF

Конечно, при условии, что OHM запущен. В текущем релизе OHM не умеет работать в качестве Windows service. Так что придётся либо смущать пользователей очередной иконкой в трее, либо снова городить свой инсталлятор и запихивать OHM в сервисы принудительно. Я выбрал поcледнее, создав инсталляционный cmd для всё того же 7zfx Builder наподобие:

nssm install OHMservice "%programfiles%OHMOpenHardwareMonitor.exe" 
timeout 3 
net start "OHMservice" 
del nssm.exe /Q

Два момента:

  1. NSSM — простая и достаточно надёжная утилита с многолетней историей. Применяется как раз в случаях, когда ПО не имеет режима работы «сервис», а надо. Во вредоносности утилита не замечена;

  2. Обратите внимание на «intelcpu» в скрипте получения температуры от OHM. Т.к. речь идёт о внедрении в малом офисе, можно рассчитывать на единообразие парка техники. Более того, таким образом лично у меня получилось извлечь и температуру ЦП от AMD. Но тем не менее этот пункт требует особого внимания. Возможно, придётся модифицировать и усложнять инсталлятор для большей универсальности.

Работает более чем надёжно, проблем не замечено.

Хотелка № 2: получаем и мониторим температуру чего угодно

Понадобятся нам две вещи:

  1. Штука от братского китайского народа: стандартный цифровой термометр DS18B20, совмещённый с USB-UART контроллером. Стоит не сказать что бюджетно, но приемлемо;

  2. powershell cкрипт:

param($cPort='COM3')

$port= new-Object System.IO.Ports.SerialPort $cPort,9600,None,8,one

$port.Open()
$tmp = $port.ReadLine()
$port.Close()

$tmp = $tmp -replace "t1="
if (([int]$tmp -lt 1) -or ([int]$tmp -gt 55)){

	#echo ("trigg "+$tmp)
	$port.Open()
	$tmp = $port.ReadLine()
	$port.Close()

	$tmp = $tmp -replace "t1="
} 
echo ($tmp)

Связка работает достаточно надёжно, но есть интересный момент: иногда, бессистемно, появляются провалы или пики на графиках:

Тесты показали, что проблема в самом Zabbix, а данные с китайских датчиков приходят верные. Детальное рассмотрение пиков и провалов выявило неожиданный факт: похоже Zabbix иногда получает и/или записывает в БД не полное значение, а «хвост». Т.е., например, 1.50 от значения 21.50. При этом положение точки не важно — может получить и 1.50, и 50, и даже 0. Как так происходит, мне выяснить пока не удалось. Изменение timeout на поведение не влияет никак, ни в большую, ни в меньшую сторону.
Наверное, стоило бы написать багрепорт. Но уже вышел 6.0 LTS (у меня 5) и обновляться в текущей ситуации, пожалуй, не буду.

Хотелка № 3: OpenVPN подключения

Template’ов для OpenVPN и Zabbix существует довольно много, но все они реализованы на том или ином sh под *nix’ы . В свою очередь, «dashboard» OpenVPN-сервера представляет из себя, по сути, вывод утилиты в консоль, который пишется в файл по событиям. Мне лень было считать трафик по отдельным пользователям и вообще делать их discover, т.к. подключений и пользователей немного. Ограничился текущим количеством подключений:

$openvpnLogPath = "C:OpenVPNconfig"
$openvpnLogName = "openvpn-status.log"

try { 
	$logData = Get-Content $openvpnLogPath$openvpnLogName -ErrorAction Stop
}
catch{
	
	Write-Host("Missing log file")
	exit 1
}

$logHeader = "OpenVPN CLIENT LIST"
$logHeader2 = "Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since"
$logMark1 = "ROUTING TABLE"

if ($logData[0] -ne $logHeader -or $logData[2] -ne $logHeader2 ){
	
	Write-Host("Bad log file")
	exit 1
}

$i = 0
foreach ($tmpStr in ($logData | select -skip 3)) {
	
	if ($tmpStr -eq $logMark1) {break}
	$i++
}

Write-Host($i)
exit 0

Хотелка № 4: спецжелезка 1

Для большого количества специфического оборудования существуют написанные энтузиастами Template’ы. Обычно они используют и реализуют функционал, уже имеющийся в утилитах к этим железкам.

Боли лирическое отступление

установив один из таких темплейтов, я узнал, что «нормальная рабочая» температура чипа RAID-контроллера в серваке — 65+ градусов. Это, в свою очередь, побудило внимательнее посмотреть и на контроллер, и на сервер в целом. Были найдены косяки и выражены «фи»:

  1. Apaptec’у – за игольчатый радиатор из неизвестного крашеного силумина высотой чуть более чем нихрена, поток воздуха к которому закрыт резервной батарейкой с высотой больше, чем радиатор. Особенно мне понравилось потом читать у Adaptec того же «ну, это его нормальная рабочая температура. Не волнуйтесь». Ответственно заявляю: при такой «нормальной рабочей температуре» контроллер безбожно и непредсказуемо-предсказуемо глючил;

  2. Одному отечественному сборщику серверов. «Берём толстый жгут проводов. Скрепляем его, чтобы он был толстым, плотным, надёжным. Вешаем это прямо перед забором воздуха вентиляторами продува серверного корпуса. Идеально!». На «полу» сервера было дофига места, длины кабелей тоже хватало, но сделали почему-то так.

Также был замечен интересный нюанс поведения, связанный с Zabbix. Со старым RAID контроллером при наличии в системном логе специфичных репортов, отваливался мониторинг температуры контроллера в Zabbix, но! при запуске руками в консоли скрипта или спец. утилиты температура выводилась корректно и без задержек.

Но полный функционал реализован далеко не всегда. В частности, мне понадобились температуры жёстких дисков с нового RAID-контроллера (ну люблю я температуры, что поделать :) ), которых в оригинальном темплейте не было. Пришлось самому реализовывать температуры и заодно autodiscover физических дисков: https://github.com/automatize-it/zabbix-lsi-raid/commit/1d3a8b3a0e289b8c2df637028475177a2b940689

Можно видеть, какой HDD и даже SSD стоит перед отсеком с БП сервера и хуже охлаждается

Можно видеть, какой HDD и даже SSD стоит перед отсеком с БП сервера и хуже охлаждается

Оригинальный репозиторий, вероятно, заброшен, как это довольно часто бывает.

Хотелка № 5, на десерт: спецжелезка 2

Как и обещал, делюсь опытом вырывания данных из беспроводной железки Huawei. Речь о 4G роутере серии B*. Внутри себя железка имеет ПО на ASP, а данные о качестве сигнала — RSSI, SINR и прочее — в пользовательском пространстве показывать не хочет совсем. Смотри, мол, картинку с уровнем сигнала и всё, остальное не твоего юзерского ума дело. К счастью, в ПО остались какие-то хвосты, выводящие нужное в plain JSON. К сожалению, взять да скачать это wget-ом не получается никак: мало того, что авторизация, так ещё и перед генерацией plain json требуется исполнение JS на клиенте. К счастью, существует проект phantomjs. Кроме того, нам понадобится перенесённая руками кука из браузера, где мы единожды авторизовались в веб-интерфейсе, вручную. Кука живёт около полугода, можно было и скрипт написать, но я поленился.

Алгоритм действий и примеры кода:

вызываем phantomjs с кукой и сценарием:

phantomjs.exe --cookies-file=cookie.txt C:cmdyota_signalscenery.js

Примеры сценариев:

//получаем общий уровень сигнала
var url = "http://192.168.2.1/html/home.html";
var page = require('webpage').create();
page.open(url, function(status) {
  //console.log("Status: " + status);
  if(status === "success") {
	
	var sgnl = page.evaluate(function() {
		return document.getElementById("status_img").innerHTML; //
	});
	
	var stt = page.evaluate(function() {
		return document.getElementById("index_connection_status").innerText; //
	});
	
	var sttlclzd = "dis";
	var sgnlfnd = "NA";
	
	if (stt.indexOf("Подключено") != -1) {sttlclzd = "conn";}
		
	if (sgnl.indexOf("icon_signal_01") != -1) {sgnlfnd = "1";}
	else {
		var tmpndx = sgnl.indexOf("icon_signal_0");
		sgnlfnd = sgnl.substring(tmpndx+13,tmpndx+14);
	}
	
	console.log(sttlclzd+","+sgnlfnd);
	
	var fs = require('fs');
		
		try {
			fs.write("C:\cmd\siglvl.txt", sgnlfnd, 'w');
		} catch(e) {
			console.log(e);
		}
    
  }
  phantom.exit();
});
//получаем технические параметры сигнала через какбэ предназначенный для этого "API"
var url = "http://192.168.2.1/api/device/signal"; 
var page = require('webpage').create();

  
	page.onLoadFinished = function() {
		
		//console.log("page load finished");
		//page.render('export.png');
		console.log(page.content);
		
		parser = new DOMParser();
		xmlDoc = parser.parseFromString(page.content,"text/xml");

		var rsrq = xmlDoc.getElementsByTagName("rsrq")[0].childNodes[0].nodeValue.replace("dB","");
		var rsrp = xmlDoc.getElementsByTagName("rsrp")[0].childNodes[0].nodeValue.replace("dBm","");
		var rssi = xmlDoc.getElementsByTagName("rssi")[0].childNodes[0].nodeValue.replace("dBm","").replace(">=","");
		var sinr = xmlDoc.getElementsByTagName("sinr")[0].childNodes[0].nodeValue.replace("dB","");
		
		var fs = require('fs');
		
		try {
			fs.write("C:\cmd\rsrq.txt", rsrq, 'w');
			fs.write("C:\cmd\rsrp.txt", rsrp, 'w');
			fs.write("C:\cmd\rssi.txt", rssi, 'w');
			fs.write("C:\cmd\sinr.txt", sinr, 'w');
		} catch(e) {
			console.log(e);
		}
		
		phantom.exit();
	};
	
	page.open(url, function() {
		page.evaluate(function() {
		});
    });

Конструкция запускается из планировщика задач. В Zabbix-агенте производится лишь чтение соответствующих файлов:

UserParameter=internet.devices.huawei1.signal.level,type C:cmdsiglvl.txt 

Особое внимание на SINR. Он должен быть 10+. Ну, иногда и правда был. Около 4-5 утра обычно

Особое внимание на SINR. Он должен быть 10+. Ну, иногда и правда был. Около 4-5 утра обычно

Требует постоянного присмотра, ручных прибиваний и перезапусков процессов, обновления кук. Но для такого шаткого нагромождения фекалий и палок работает достаточно стабильно.

Итого

Стоит ли заморачиваться на Zabbix, если у вас 20 машин и 1-2 сервера, да ещё и инфраструктура Windows?

Как можно понять из вышеизложенного, работы будет много. Я даже рискну предположить, что объёмы работ и уровень квалификации для них сравнимы с решением «свелосипедить своё с нуля по-быстрому на коленке».

Не стоит рассматривать Zabbix как панацею или серебряную пулю.

Тем не менее, использование уже готового и популярного продукта имеет свои преимущества — в первую очередь, это релевантный опыт для интересных работодателей.

А красивые графики дают усладу глазам и часто — новое видение процессов в динамике.

Если захочется внедрить, то могу пообещать, как минимум — скучно не будет! ;)

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Мониторите малые офисы?


59.42%
Мониторю, Заббиксом
41


2.9%
Мониторю, не Заббиксом
2


2.9%
Мониторю, самописной системой
2


24.64%
Не мониторю, но вообще надо бы
17


10.14%
Не мониторю и не надо
7

Проголосовали 69 пользователей.

Воздержались 25 пользователей.

Понравилась статья? Поделить с друзьями:
  • Windows boot manager не дает загрузиться windows 10 с флешки
  • Windows ce usb activesync устройства что это
  • Windows blinds для windows 10 активация
  • Windows button windows 10 not working
  • Windows boot manager не дает загрузиться windows 10 gpt