Мониторинг Openshift 4.x через Zabbix

Kate

Administrator
Команда форума
Сегодня мы покажем, как настроить мониторинг кластера OpenShift с помощью внешней системы на примере Zabbix. А также, как использовать при этом Prometheus, иначе говоря, собирать Prometheus-метрики по кластеру OpenShift, затем регистрировать их в Zabbix в качестве коллекций и создавать там триггеры, своевременно информирующие о проблемах.

Мониторинг инфраструктуры Openshift 4.x с помощью Zabbix Operator​

Для установки агентов Zabbix на кластер Openshift Cluster будем использовать оператор Zabbix. Затем сконфигурируем их так, чтобы они отправляли собираемые данные на внешний Zabbix Server, как показано на схеме ниже.
2282ae98e26d7b5fbdfb408964fda960.png

Установка Zabbix Server​

● Первым делом обновим сервер и поставим httpd:
$ dnf update -y && dnf install @httpd -y
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
$ systemctl enable --now httpd
$ systemctl status httpd
● Затем установим и настроим СУБД MariaDB:
$ dnf -y install mariadb mariadb-server
$ systemctl start mariadb
$ mysql -u root -e "CREATE DATABASE zabbix character set utf8 collate utf8_bin;"
$ mysql -u root -e "GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@'localhost' IDENTIFIED BY 'StrongPassword';"
$ mysqladmin flush-privileges
Note: If the database server is separate from the zabbix server, replace localhost with the zabbix server IP, example: zabbix@'1.2.3.4 '
● Теперь ставим сам Zabbix Server:
# Install zabbix repository
$ dnf -y install https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
# Install packages needed
$ dnf -y install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent
# Restore database schema
$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -u zabbix -p zabbix
# Adjust the database parameters
$ vim /etc/zabbix/zabbix_server.conf
# Parameters
DBName=zabbix
DBUser=zabbix
DBPassword=StrongPassword
# Adjust timezone if necessary
$ vim /etc/php-fpm.d/zabbix.conf
# Parameters
php_value[date.timezone] = America/Sao_Paulo
# Adjust php.ini
$ vim /etc/php.ini
# Parameters
memory_limit 128M
upload_max_filesize 8M
post_max_size 16M
max_execution_time 300
max_input_time 300
max_input_vars 10000
# Restart and Enable Services
$ systemctl restart zabbix-server zabbix-agent httpd php-fpm mariadb
$ systemctl enable zabbix-server zabbix-agent httpd php-fpm mariadb
# Now we will access our graphical interface to complete the installation process, go to:
http://<< IP ADDRESS or FQDN >>/zabbix
# In the welcome screen, click Next step
0f00dd957b3b16e90fb9e4b268696281.png

Удостоверимся, что все требования в наличии , и нажимаем Next:
ac3c737c9b10c2ace8b9f08aac745629.png

Вводим учетные данные для подключения к БД и жмем Next:
7fd0cc511fb54a453e4b9b88f54c5cb6.png

Поле Name можно не заполнять. Проверяем остальное и жмем Next:
02a03c2104407c1793f982ba16b8cbd5.png

Перепроверяем, нажимаем Next, а затем Finish:
78c57e86932bfacd6971c0b4bcc14a9f.png

Настройка Zabbix Server​

Логинимся, используя следующие учетные данные:
Username: Admin
Password: zabbix
7854e4a53292518a9c4549af62f1ac34.png

Пароль пользователя Admin, конечно, лучше затем поменять.
Итак, мы вошли в систему и видим дашборд по умолчанию:
f11ae036a84da3e36821fc4b18da7b59.png

Теперь создадим группу хостов для серверов Openshift:
Нажимаем Configuration > Host Groups > Create host group, вводим имя группы и жмем Add:
d3aa28f2a0b844806b38db51b8967720.png

Теперь настроим саморегистрацию агентов, чтобы наши ноды регистрировались в zabbix автоматически. Для этого щелкаем в боковом меню Configuration > Actions, затем в раскрывающемся списке вверху вкладки выбираем Autoregistrion actions и щелкаем Create action:
5c83c391fdaf342132242cf3913e8301.png

Настраиваем action, используя следующие значения, и затем жмем Add:
Type: Host metadata
Operator: contains
Value: Linux
75b10b4a030e834d228ead50543277f5.png

На вкладке Operations щелкаем Add и вводим следующие операции:
Operation type: Add to host group
Host groups: Name of Host Group
49519666b4c8bf6a336642a21b58c8da.png

Добавляем новые операции:
Operation type: Link to template
Templates: Template OS Linux by Zabbix agent active
e6393bcc1da476c7f0862003bb68429c.png

После такой настройки каждый новый агент будут автоматически регистрироваться в группе «OpenShift Cluster» и получать шаблон «Template OS Linux by Zabbix agent active».

Установка Zabbix Operator​

Теперь установим и настроим Zabbix Operator на Openshift.
В OperatorHub ищем и выбираем Zabbix, а затем щелкаем Install:
e71a6976c45187f3562f5c07c52231c4.png

Еще раз щелкаем Install:
bd93c96d6711fbbf39a9d482efc45339.png

Дожидаемся завершения установки и щелкаем имя Zabbix Operator:
b768ada7d1043c0982dbc4106b4b4feb.png

Ищем вкладку Zabbix Agent, щелкаем там Create ZabbixAgent > Select YAML View, задаем приведенные ниже параметры и жмем Create:
metadata_item: 'system.uname'
server_host: <IP or FQDN Zabbix Server>
394197612ebb0ee04280521338cac679.png

Настройка Zabbix Operator​

Теперь в проекте Zabbix щелкаем Daemonset > zabbix-agent > Tolerations и добавляем Toleration с указанными ниже параметрами, чтобы создать поды на master-нодах:
KEY: node-role.kubernetes.io/master
OPERATOR: Exists
EFFECT: NoSchedule
96e141d44c5294bf88a8cc48a666b5a6.png

Как видим, daemonset смасшитабировался до 5 подов (3 master-а и 2 worker-а)
aed75edf7ed7138e68159bd92db777df.png

Запросим список подов, чтобы просто проверить имена и статус:
oc get pods -o wide -n zabbix
7ae84962720c41cd5fce18d2ccd44ff3.png

Теперь в консоли Zabbix идем в Configuration > Hosts.
Если все работает, то увидим здесь список созданных хостов:
289a14e331d8cbdefc3a73579d346a1f.png

Для большей наглядности щелкнем имя хоста и добавим к OpenShift-имени (поле Host name) еще и понятное имя в поле Visible name, а затем нажмем Update:
b4c08c1769524f21a6eb1c9a19e6dd9e.png

Чтобы понять, отправляют ли уже наши хосты данные на Zabbix Server, щелкнем Monitoring > Latest data.
На этом экране отображается список уже собранных элементов вместе со значениями, а также дата и время последнего сбора данных:
51a3bf5abf2f3b8512565330a1030f4f.png

Итак, теперь Zabbix ведет мониторинг нашего кластера:
ccf263ff93e89234ed22a02f6f109b4a.png

ак, мы показали, как мониторить неизменную инфраструктуру Openshift с помощью Zabbix Operator. Собирая данные по использованию ресурсов (cpu, нагрузка, память, сеть, дисковое пространство), затем можно создавать оповещения и задавать пороги предупреждений, чтобы упреждать критическое развитие ситуации с ресурсами.

Мониторинг Openshift 4.x через Zabbix с использованием Prometheus​

Теперь покажем, как мониторить кластер Openshift с помощью Zabbix и Prometheus, то есть собирать Prometheus-метрики мониторинга по нашему кластеру OpenShift, затем регистрировать их в качестве коллекций и создавать триггеры, своевременно информирующие о проблемах.
Для этого мы будем использовать следующие функции Zabbix:
  • http agent – отвечает за сбор наших метрик.
  • LLD (low level discovery) – отвечает за автоматическое обнаружение объектов и позволяет создавать собственные элементы и триггеры.
Используя элементы типа http agent, мы создадим объекты конечная точка/metrics, которые будут собирать данные из целевого списка Prometheus (target list) и сохранять эти коллекции по адресу \metric в выводе Zabbix.
Затем, используя LLD, мы будем парсить этот вывод, потом обрабатывать и фильтровать метрики, которые нас интересуют, и наконец, сформируем правило для автоматического создания элементов и триггеров.
Итак, начнем.
1. Берем Prometheus-овский url и обращаемся к context/targets, чтобы посмотреть, какие цели мы можем мониторить с помощью Zabbix:
oc get routes -n openshift-monitoring | grep prometheus-k8s
2. Идентифицировав Prometheus-овский url, заходим через браузер и ищем конечные точки по IP-адресам в том же диапазоне, что и ноды openshift, в нашем примере это 10.36.250.x:
af696ca00c92ad972621197b1400fc26.png

Здесь мы будем мониторить статус Cluster Operators, для чего будем использовать вот эту конечную точку:
8b7f6243df25cc17dc6780d0db7e35c1.png

3. При обращении к url целевого элемента cluster-operator-version видим несколько метрик, относящихся к операторам. Но мы будем использовать только метрику cluster_operator_up, которая выдает 1, когда оператор в порядке, и 0, когда есть проблемы.
c5fdaff16ac8aeda6586004d40121a08.png

4. В Zabbix идем в Configuration > Host > Create Host и добавляем новый хост, задаем для него понятное имя, затем выбираем для него соответствующую группу и нажимаем Add:
dd6c4b3fb4459dad2338708a3310b694.png

5. Теперь щелкаем только что добавленный хост, затем щелкаем Items > Create Item, задаем указанные ниже поля и жмем Add:
ПолеЗначение
NamePrometheus Metrics Operators
TypeHTTP agent
Keyprom_operators
URLhttps://{{ IP ADDRESS }}:9099/metrics
Request typeGET
Request body typeRaw data
Type of InformationText
Update Interval30s
Значения Name, Key и Update Interval можно настраивать.
957ed618dc35336128af95d385095f24.png


6. Теперь создадим правило Discovery rule, для этого идем в Configuration > Hosts > щелкаем созданный выше хост > Discovery rules > Create discovery rule
b50f3d58ab84b03506e8f1dc5e82eda9.png

ПолеЗначение
NameLLD Cluster Operator Up
TypeDependent item
Keylld.co.sts
Master itemPrometheus Metrics Operators
В поле Name задаем понятное имя, в поле Type указываем Dependent item, поскольку этот LLD зависит от нашего элемента http agent, созданного на предыдущем шаге. В Master item, выбираем нашу коллекцию Prometheus Metrics Operators
7. На этом же экране щелкаем Preprocessing, затем Add, выбираем Prometheus to JSON и в поле Parameters добавляем одну из коллекций, которые хотим добавить, например:
cluster_operator_up {name = "authentication", version = "4.7.3"}
Поскольку мы хотим добиться автоматического обнаружения, то меняем Name и Version следующим образом:
cluster_operator_up{name=~".*",version=~".*"}
f9b253fab476ebd01fcdfd4413a84f5e.png

На этом шаге наша коллекция метрик, заданная как plain text, будет преобразована в json. Чтобы проверить и идентифицировать нужные поля, воспользуемся опцией тестирования:
Щелкаем расположенную справа надпись Test, в поле Value копируем какую-нибудь метрику из тех, что собираются в Prometheus, затем щелкаем Test и потом щелкаем результат, чтобы получить нашу метрику в формате json. Теперь мы знаем, какие поля нам понадобятся, когда будем делать сопоставление (mapping) на следующем шаге.
c8bcbeeb42265efe95ab091d0662eafb.png

Наша метрика имеет следующую структуру в формате json:
[
{
"name":"cluster_operator_up",
"value":"1",
"line_raw":"cluster_operator_up{name=\"authentication\",version=\"4.7.3\"} 1",
"labels":{
"name":"authentication",
"version":"4.7.3"
},
"type":"untyped"
}
]
8. Теперь щелкаем LLD macros. На этом шаге сопоставим поля нашего json-а и создадим макросы, то есть переменные для Zabbix. Имена, определенные в столбце LLD macro, при необходимости можно настроить, всегда сохраняя стандарт {#NAME}. JSONPath прописываем в соответствии с нашим json, используя стандартные $ ['name'] и $ .labels ['name']. И в конце нажимаем Add.
aa41515d91332e5c02bd803a46f3ea30.png

9. Итак, LLD создан. Теперь надо, чтобы он автоматически создавал элементы нашей коллекции, то есть, создавал элемент для каждого оператора на основе нашего правила LLD. Для этого идем в Item prototypes > Create item prototype:
12654aa2872634be50311d9dd671fba4.png

ПолеЗначение
Name{#METRIC} on {#NAME}
TypeDependent item
Keyocp.co.stats[{#NAME}]
Master itemOCP Productive: Prometheus Metrics Operators
Type of InformationNumeric(unsigned)
New Application / ApplicationsOperators
Description{#METRIC} on {#NAME}
В полях Name, Key и Description используем только что созданные макросы/переменные. Для настройки/персонализации создания наших элементов значение поля Key можно настроить по своему усмотрению, однако важно использовать макрос с уникальным значением, чтобы при создании не было дублирования.
Опция New Application позволяет организовать созданные элементы в соответствии с типом коллекции. Так как эта коллекция относится к операторам, мы создадим приложение под названием Operators.
Важно отметить, что время сбора данных для этих элементов (collection time) будет таким же, как и время сбора, заданное для коллекции с типом http agent, которая была создана на шаге 5.
10. Не покидая эту страницу, где мы создаем прототип элемента, щелкаем Preprocessing, в разделе Preprocessing steps щелкаем Add, выбираем Prometheus Pattern и в Parameters пишем следующий синтаксис:
{#METRIC}{name="{#NAME}",version="{#VERSION}"}
cf4c421bd8fe7f7ccabd918a4534a8bd.png

Используя этот синтаксис, воспроизведем формат нашей метрики, но используя макросы/переменные, созданные на шаге 8. Затем нажмем Add (или Update, если до этого уже нажали Add, когда закончили создавать прототипа элемента).
11. Теперь проверим, работает ли наш LLD. Для этого идем в Monitoring > Latest data > и используя фильтры для облегчения поиска, выбираем группу хостов, хост и приложение, а затем жмем Apply:
982c0cb096ab5f3e1f51d8c9cee88474.png

Если все правильно, то увидим наши элементы с указанием соответствующей коллекции. Чтобы проверить, что метрика была создана верно, щелкаем нужный элемент и затем щелкаем Preprocessing:
82db707df9f216cdd1a407993c36b1cf.png

Проверяем поле Parameters, которое автоматически заполнилось средствами LLD.
12. Теперь, когда мы настроили сбор данных для наших элементов, остается создать триггер, который будет информировать о проблемах с любым из наших операторов. Для этого идем в Configuration > Hosts > щелкаем созданный нами Host > Discovery rules > щелкаем созданный LLD > Trigger prototypes > Create trigger prototype
Задаем критичность своего триггера с помощью Severity. Затем в разделе Expression нажимаем Add>. В открывшемся окне справа от поля Item нажимаем Select prototype и выбираем наш прототип элемента. В Function оставляем last (), а Result задаем как «< 1».
Если помните для статуса метрик 1 – это OK, 0 – это не_OK.
Щелкаем Insert, затем Add.
7a1920344596f5d09218a337bf6227d4.png

Теперь триггер создан.
13. Чтобы просмотреть наши оповещения, идем в Monitoring > Dashboard и видим здесь наши триггеры, если таковые имеются.
65b17d8e855c993e3536661eb11a98d0.png

Чтобы проверить, всё ли верно, открываем адрес наша_конечная_точка/metrics и смотрим, какие метрики мы добавили в наш LLD:
ee30a46672499a74a8c0a91ed3148fa8.png

14. Теперь посмотрим, что будет, когда конечная точка, с который собираются метрики, требует аутентификации, например, kube-apiserver (мониторинг данных API):
ac62f98b697493d3d87a4ef9bad947ff.png

Обращаемся к ней через браузер или через Curl, чтобы проверить, возникает ли ошибка аутентификации:
$ curl -k https://10.36.250.77:6443/metrics
c16c835254b8a0e53e5ec0f05864cf25.png

15. Теперь в openshift выведем список наших serviceaccounts в проекте zabbix:
$ oc project zabbix
$ oc get sa
Предоставим привилегии cluster-reader нашему serviceaccount-у zabbix-agent для аутентификации на этой конечной точке:
$ oc adm policy add-cluster-role-to-user cluster-reader -z zabbix-agent
Проверим, что наш сервис теперь может проходить аутентификацию. Для будем использовать Curl и передадим токен через Bearer-авторизацию:
$ TOKEN=`oc sa get-token zabbix-agent`
$ curl -Ik -H "Authorization: Bearer $TOKEN" https://10.36.250.77:6443/metrics
HTTP/2 200
audit-id: 6d3ff3b6-b687-494c-ae04-ec46e813aea1
cache-control: no-cache, private
content-type: text/plain; version=0.0.4; charset=utf-8
x-kubernetes-pf-flowschema-uid: 3a22c354-288e-4c16-ac53-f828d6e66303
x-kubernetes-pf-prioritylevel-uid: a4bc8a8e-784c-45ab-b68b-1620bfb48ef5
date: Sun, 25 Apr 2021 21:25:34 GMT
16. Теперь в Zabbix зарегистрируем наш элемент коллекции метрик. Для этого идем в Configuration > Hosts > созданный нами хост > Items > Create item
0caf6a192808ab0d2d1de07d22ad6322.png

Для аутентификации путем передачи bearer-токена через заголовок, добавим наш токен в раздел Headers. Для этого в поле Name напишем Authorization, а поле Value напишем «Bearer» и сам токен, как показано ниже:
AuthorizationBearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Теперь повторим шаги 6-12 для всех конечных точек и метрик, которые нужны для мониторинга нашей среды, чтобы внести их в Zabbix.
LLD для операторов со статусом degraded и LLD Objects Etcd:
85a0dce6720e3c76ed2d74c4348b6541.png

Etcd-элементы, созданные из LLD и со статусом, отражающим самое последнее значение:
01b61b8ae03a5cb51cdfdf6dd1c61116.png

После создания всех необходимых коллекций и триггеров создадим графы для некоторых индикаторов состояния нашей среды:
8e541176148969c9575560cdbdcb3f45.png

Итак, мы показали, как использовать Zabbix для сбора Prometheus-метрик в рамках проекта мониторинга OpenShift, и создали графики для централизованного мониторинга.
Сегодня мы покажем, как настроить мониторинг кластера OpenShift с помощью внешней системы на примере Zabbix. А также, как использовать при этом Prometheus, иначе говоря, собирать Prometheus-метрики по кластеру OpenShift, затем регистрировать их в Zabbix в качестве коллекций и создавать там триггеры, своевременно информирующие о проблемах.


Источник статьи: https://habr.com/ru/company/redhatrussia/blog/566830/
 
Сверху