
![tran](/assets/otus_first_pages.png)<!-- .element: width="100%" -->

---

![tran](/assets/otus_sound_check.png)<!-- .element: width="100%" -->

---

# НЕ ЗАБЫТЬ ВКЛЮЧИТЬ ЗАПИСЬ!!!

---
## План

* SNMP
* Host discovery
  * zabbix-agent
  * snmpd-agent
* Templates
* Items
* Macros
* LLD
* zabbix-sender
* zabbix-trapper

---

## SNMP

— протокол, который используется для управления сетевыми устройствами. 
- возможны операции чтения и записи 
- использует управляющую базу данных (MIB - management information base, RFC-1213, -1212)

---

## SNMP - протокол общения

![tran](/assets/OTUS_Platform/Monitoring-Zabbix-LLD/snmp.gif)<!-- .element: width="100%" -->


---

## SNMP - от менеджера агенту

- GetRequest 
  - Запрос для получения значения переменной или списка переменных.
- SetRequest 
  - Запрос для изменения переменной или списка переменных. Связанные переменные указываются в теле запроса. Изменения всех указанных переменных должны быть выполнены агентом как атомарная операция. Менеджеру будет возвращён Response с (текущими) новыми значениями переменных.

---

## SNMP - от менеджера агенту

- GetNextRequest 
  - Запрос для обнаружения доступных переменных и их значений. Менеджеру будет возвращён Response со связанными переменными для переменной, которая является следующей в базе MIB в лексиграфическом порядке.
- GetBulkRequest 
  - Улучшенная версия GetNextRequest. Запрос от менеджера к объекту для многочисленных итераций GetNextRequest. Менеджеру будет возвращён Response с несколькими связанными переменными, обойдёнными начиная со связанной переменной (переменных) в запросе. 

---

## SNMP - от агента менеджеру

- Response 
  - Возвращает связанные переменные и значения от агента менеджеру для GetRequest, SetRequest, GetNextRequest, GetBulkRequest и InformRequest. Уведомления об ошибках обеспечиваются полями статуса ошибки и индекса ошибки. Эта единица используется как ответ и на Get-, и на Set-запросы, в SNMPv1 называется GetResponse .
- Trap 
  - Асинхронное уведомление от агента — менеджеру. Включает в себя текущее значение sysUpTime, OID, определяющий тип trap (ловушки), и необязательные связанные переменные. 

---

## MIB

- Management Information Base (MIB, база управляющей информации) 
  - виртуальная база данных, используемая для управления объектами в сети связи.
- Object Identificator (OId) 
  - идентификаторы объектов в MIB. Каждый OID состоит из двух частей: текстового имени и SNMP адреса в цифровом виде


---

## OID tree

![tran](/assets/OTUS_Platform/Monitoring-Zabbix-LLD/mib.png)<!-- .element: width="100%" -->


---

## Linux snmp tools

```bash
yum install net-snmp net-snmp-utils
systemctl start snmpd
snmpwalk -v 2c -c public localhost
snmpdf -v 2c -c public localhost
snmptable -v 2c -c public localhost ipAddrTable
ls /usr/share/snmp/mibs/
```

---

## Zabbix взаимодействие с узлами

* Zabbix Agent
** агент, устанавливаемый на целевые хосты
* SNMP
**  Протокол использующийся для управления сетевыми устройствами
* JMX
** Мониторинг JMX можно использовать для наблюдения за счетчиками
JMX в Java приложениях.
* IPMI
** интеллектуальный интерфейс управления платформой. В контексте
Zabbix исполþзуется для мониторинга аппаратной платформы серверов

---

## Zabbix хосты и группы

* Старайтесь группировать хосты по типам и задачам (хост может быть
включен в любое кол-во групп)
* Давать понятные имена для хостов
* Впоследствии разделение прав на просмотр и управление
* Host -  это логическое понятие
  * один физический хост может содержаться в разных Zabbix Hosts
* Имя хоста регистрозависимое (для zabbix_sender)

-

---

## Zabbix Типы элементов данных

<p align="center">
  <img width="75%" height="75%" src="/assets/OTUS_Platform/Linux-monitoring/zbx2.png">
</p>

---

## Zabbix Active/Passive checks

<p align="center">
  <img width="75%" height="75%" src="/assets/OTUS_Platform/Linux-monitoring/zbx3.png">
</p>

---

## Активные проверки (от агента к серверу)

- [все параметры агента](https://www.zabbix.com/documentation/current/manual/appendix/config/zabbix_agentd)
- Hostname
  - уникальный, регистрозависимый, для активных проверок
- ServerActive
  - сервер для пересылки данных от агента
- RefreshActiveChecks
  - частота обновления

---

## UserParameters

- UserParameter=<key>,<command>
  - ```UserParameter=mysql.questions,mysqladmin -uroot status | cut -f4 -d":" | cut -f1 -d"S"```
  - test: ```zabbix_agentd -t mysql.questions```
- UserParameter=key[*],command
  - шаблонизированный параметр
  - ```UserParameter=wc[*],grep -c "$2" $1```
  - в items могут содержаться: 
    - wc[/etc/passwd,root]
    - wc[/etc/services,zabbix]

---

## Обнаружение хостов

- устанавливаем на хосты zabbix-agent
  - открываем порт 10050
  - прописываем параметр Server
- рекомендуется завести ansible плейбук для раскатки агента на новые хосты
- добавляем правило обнаружения в Configuration -> Discovery
- включаем или добавляем действие с типом Discovery Actions в Configuration -> Actions
---

## Обнаружение хостов

![tran](/assets/OTUS_Platform/Monitoring-Zabbix-LLD/zbx-discovery-action.png)<!-- .element: width="100%" -->

---

## Обнаружение хоста через snmp

- на хосте включен snmpd
  -  окрыт firewall для snmp
- добавлем Discovery rule с проверкой по snmp
- добавляем Action c прилинкованным  темплейтом для snmp
---

## LLD - низкоуровненове обнаружение

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

---

## LLD компоненты

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

---

## Создание прототипов

- Правила LLD возвращают данные в макросах:
  - Диски: {#FSNAME}, {#FSTYPE}
  - Интерфейсы: {#IFNAME}
  - SNMP: {#SNMPINDEX}, {#SNMPVALUE}, ...

- Пример ключа:
  - vfs.fs.size[{#FSNAME},free]
- Макросы LLD могут быть использованы в выражениях триггеров 
  - ```{vfs.fs.size[{#FSNAME},pused].last(0)} > {#MY_CUSTOM_MACRO}```

---
## Пользовательский LLD
- [пример сбора метрик с дисковой полки](https://otus.ru/nest/post/13/)
- пример JSON для отправки пользователем
  - {"data": [{"{#NODE}": "m11266"}]}
- отправляется через zabbix_sender

---

## zabbix-sender

- консольная утилита для отправки значений метрик
- отправляет в элементы с типом Zabbix Trapper

```bash
-c, --config config-file  
-s, --host host
# имя хоста в Zabbix (регистрозависимое)
-k, --key key
# ключ, название метрик
-o, --value value
# значение метрики или JSON для LLD
-i, --input-file input-file
# входной файл с данными для отправки пакета метрик
```
---

![tran](/assets/otus_your_questions.png)<!-- .element: width="100%" --> 

---

![tran](/assets/otus_feedback.png)<!-- .element: width="100%" -->

