Отправка уведомлений и графиков из zabbix в telegram

Введение

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

У меня в управлении постоянно находится несколько никак не связанных между собой zabbix серверов от разных заказчиков, плюс свои личные. Везде настроены уведомления, в том числе в telegram. Оповещения удобно рассортированы по меткам, чатам, каналам и т.д. С этим никаких проблем нет. Но иногда хочется одним взглядом быстро посмотреть на все активные триггеры всех серверов

Это нужно для того, чтобы быть уверенным, что не забыл отреагировать на что-то важное, где не настроены повторяющиеся уведомления

Решение вопроса мульти дашборда в zabbix изначально мне виделось очень сложным, так как не представлял, на базе какого готового инструмента это можно было сделать. Пока я не вспомнил про Grafana. Причем, знаю то я ее давно, но использую редко. Она чаще всего с prometheus используется, а у меня основной мониторинг всегда и везде Zabbix. При этом его графических возможностей мне хватает за глаза. За красотой не гонюсь, важен функционал.

Я видел интеграцию Zabbix и Grafana, но как я уже сказал, мне встроенной визуализации данных в заббиксе достаточно. А вот в контексте сбора информации о триггерах в едином дашборде, я графану не рассматривал. Я просто не знал, что в плагине графаны для интеграции с заббиксом есть готовая визуализация для Zabbix Problems.

После того, как узнал, что с помощью Grafana можно будет собрать multi dashboard для zabbix, настроить его было дело техники. Причем не очень сложной. Далее подробно расскажу, как это сделать.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Введение

Для начала расскажу, для чего я все буду делать. Глобальная задача стоит сделать дашборд для работы маркетолога или ssm специалиста. Свести в одно место метрики из разных систем – посещаемость сайтов, монетизация, активность в группах vk, telegram и т.д. Часть этого всего я уже сделал. Буду постепенно делиться на страницах сайта. Начать рассказ решил с самого сложного – работа с google api.

В целом, работа со всеми api примерно одинаковая и не представляет особой сложности. С goolge api возникают проблемы с доступом у тех, кто первый раз все это настраивает. Там слишком много всяких сущностей. Надо пройти определенный квест и регулярно его повторять, чтобы иметь доступ к google api. Сделано все это для безопасной работы больших и сложных систем. Ну а обычным юзерам, которые просто хотят дергать curl-ом какие-то метрики, это кажется не очень простым.

В общем, расскажу обо всем по порядку, чтобы было понятно даже новичку, который только начинает работу с api. Покажу на реальном примере моего сайта и кабинета adsense к нему.

Отправка уведомлений в telegram через webhook

Начиная с 5-й версии, в Zabbix из коробки работают уведомления в telegram через механизм webhook. Чтобы настроить его, переходите в Администрирование -> Способы оповещений и выбирайте там Telegram.

Внутри увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.

Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix — правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно.

Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.

Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.

Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.

Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне zabbix для OS Linux есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.

Теперь идем в настройки пользователя и добавляем ему способ оповещений через telegram.

Если у вас ранее не работали никакие уведомления, то не забудьте активировать Действия.

У нас все настроено для отправки оповещений в telegram. Добейтесь срабатывания триггера и проверяйте телеграм канал, в который настроили отправку сообщений.

Все работает. Если вам достаточно такого функционала, то можно оставлять и пользоваться. Но как по мне, так бледновато эти уведомления выглядят. Можно немного шаблоны изменить, чтобы было более читаемо. Так же есть возможность все настроить более красиво и наглядно, да еще и с графиками. Дальше я расскажу еще 2 разных способа отправки уведомлений из zabbix в telegram с графиками и готовыми ссылками на события.

Управление сайтами

Робот AdSense

Далее: Как запустить показ рекламы на другом сайте

Поисковый робот, который также называют «пауком», представляет собой программное средство, используемое системой Google для обработки и индексирования содержания веб-страниц. Робот AdSense заходит на ваш сайт и определяет его содержание с целью размещения релевантных объявлений.

Ниже приведены основные сведения о роботе AdSense.

  • Отчет робота обновляется еженедельно.

    Сканирование осуществляется автоматически; мы не принимаем запросы на более частое сканирование.

  • Робот AdSense отличается от робота Google.

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

  • Устранение неполадок с роботом AdSense не решит проблемы с роботом Google.

    Устранение проблем, перечисленных на странице Доступ для робота AdSense, не окажет влияния на позицию вашего сайта в результатах Google Поиска. Подробнее о рейтинге сайта в Google читайте в статье Как добавить свой сайт в результаты поиска Google.

  • Индексирование осуществляется по URL.

    Доступ робота к адресам site.com и www.site.com осуществляется раздельно. Однако робот не рассматривает site.com и site.com/#anchor как две разные страницы.

  • Робот не осуществляет доступ к страницам или каталогам, заблокированным в файле robots.txt.

    Роботы Google и AdSense Mediapartners учитывают информацию в файле robots.txt. Если файл robot.txt запрещает доступ к определенным страницам или каталогам, они не будут просканированы.

    Строка не запрещает сканирование страниц с рекламой. Чтобы запретить роботу AdSense доступ на ваши страницы, в файле robots.txt необходимо указать . Подробнее…

  • Робот пытается получить доступ только к URL с тегами объявлений Google.

    Только те страницы, на которых отображаются объявления Google, будут обращаться к нашим системам и сканироваться.

  • Робот пытается получить доступ к страницам, с которых осуществляется переадресация.

    Если с ваших «исходных страниц» выполняется переадресация, роботу необходим доступ к ним, чтобы определить ее наличие. Поэтому в журналах доступа регистрируются посещения роботом исходных страниц.

  • Повторное сканирование сайта.

    В настоящее время мы не можем управлять частотой сканирования: наши роботы выполняют его автоматически. Если вы что-то поменяете на странице, может пройти 1 или 2 недели, прежде чем это отразится в нашем индексе.

Calling style

REST is a style of software architecture that provides a convenient and consistent approach to requesting and modifying data.

The term REST is short for «Representational State Transfer.» In the context of Google APIs, it refers to using HTTP verbs to retrieve and modify representations of data stored by Google.

In a RESTful system, resources are stored in a data store; a client sends a request that the server perform a particular action (such as creating, retrieving, updating, or deleting a resource), and the server performs the action and sends a response, often in the form of a representation of the specified resource.

In Google’s RESTful APIs, the client specifies an action using an HTTP verb such as , , , or . It specifies a resource by a globally-unique URI of the following form:

https://www.googleapis.com/apiName/apiVersion/resourcePath?parameters

Because all API resources have unique HTTP-accessible URIs, REST enables data caching and is optimized to work with the web’s distributed infrastructure.

You may find the in the HTTP 1.1 standards documentation useful; they include specifications for , , , and .

REST in the AdSense Management API

The supported operations map directly to REST HTTP verbs, as described in
.

The specific format for AdSense Management API URIs are:

https://adsense.googleapis.com/v2/resourceID?parameters

where is the identifier for an ad
client, ad unit, url channel, custom channel or the reports collection, and
 are any parameters to apply to
the query.

The format of the path extensions
lets you identify the resource on which you are currently operating, for
example:

https://adsense.googleapis.com/v2/accounts/account_id/adclients
https://adsense.googleapis.com/v2/accounts/account_id/adclients/adClientId
https://adsense.googleapis.com/v2/accounts/account_id/adclients/adClientId/adunits
https://adsense.googleapis.com/v2/accounts/account_id/adclients/adClientId/adunits/adUnitId
https://adsense.googleapis.com/v2/accounts/account_id/adclients/adClientId/urlchannels
...

The full set of URIs used for each supported operation in the API is
summarized in the AdSense Management API Reference
document.

Here are a couple of examples of how this works in the AdSense Management API.

List ad clients:

GET https://adsense.googleapis.com/v2/accounts/account_id/adclients/

List ad units in ad client ca-pub-1234567890123456:

GET https://adsense.googleapis.com/v2/accounts/account_id/adclients/ca-pub-1234567890123456/adunits

Добавление ресурсов в консоли API

Вся настройка начинается с работы в Консоли API. Вам необходимо создать новый проект.

Я создал новый проект и назвал его serveradmin. После этого в верхнем левом углу выбирайте меню навигации и переходите в API и сервисы.

Далее нажимайте сверху на кнопку ENABLE APIS AND SERVICES. В поиске набирайте adsesne и переходите в AdSense Management API.

На следующей странице нажимайте ВКЛЮЧИТЬ.

Важно!!! У вас должен быть выключен блокировщик рекламы в браузере. Если он будет включен, то получите ошибку и API adsense не заработает

Тут и далее обязательно все делайте без блокировщика.

API мы запустили, теперь нужно создать для него ключ. С помощью ключа можно обращаться к конкретному API, к которому он привязан. Здесь ожидаешь, что это будет некий токен, с помощью которого можно будет уже получать данные, но нет. Нужно четко понимать терминологию и логику работы google api. Сейчас мы создаем именно идентификатор, который будет привязан к api adsense, чтобы по нему обращаться только конкретно к этим данным.

Итак, идем в раздел Учетные данные и создаем новые. Выбираем Ключ API.

В настройках ключа можно настроить ограничение доступа на уровне IP или доменного имени сайта, с которого будут идти запросы. Если у вас есть возможность ограничить доступ, рекомендую это сделать сразу же. Я обычно по ip делаю ограничение, так как данные собираю только с конкретного сервера. В списке допустимых api укажите только AdSense Management API, который мы добавили ранее. Для каждой службы лучше делать свой ключ.

Самое простое сделали. Активировали API и добавили ключ, по которому мы будем к нему обращаться. Теперь надо настроить доступ к этому API.

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

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

Установка Zabbix Server

● Первым делом обновим сервер и поставим httpd:

● Затем установим и настроим СУБД MariaDB:

● Теперь ставим сам Zabbix Server:

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

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

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

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

Настройка Zabbix Server

Логинимся, используя следующие учетные данные:

Пароль пользователя Admin, конечно, лучше затем поменять.

Итак, мы вошли в систему и видим дашборд по умолчанию:

Теперь создадим группу хостов для серверов Openshift:

Нажимаем Configuration > Host Groups > Create host group, вводим имя группы и жмем Add:

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

Настраиваем action, используя следующие значения, и затем жмем Add:

На вкладке Operations щелкаем Add и вводим следующие операции:

Добавляем новые операции:

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

Установка Zabbix Operator

Теперь установим и настроим Zabbix Operator на Openshift.

В OperatorHub ищем и выбираем Zabbix, а затем щелкаем Install:

Еще раз щелкаем Install:

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

Ищем вкладку Zabbix Agent, щелкаем там Create ZabbixAgent > Select YAML View, задаем приведенные ниже параметры и жмем Create:

Настройка Zabbix Operator

Теперь в проекте Zabbix щелкаем Daemonset > zabbix-agent > Tolerations и добавляем Toleration с указанными ниже параметрами, чтобы создать поды на master-нодах:

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

Запросим список подов, чтобы просто проверить имена и статус:

Теперь в консоли Zabbix идем в Configuration > Hosts.

Если все работает, то увидим здесь список созданных хостов:

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

Чтобы понять, отправляют ли уже наши хосты данные на Zabbix Server, щелкнем Monitoring > Latest data.

На этом экране отображается список уже собранных элементов вместе со значениями, а также дата и время последнего сбора данных:

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

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

Установка и запуск proxy

Из репозитория Zabbix

# apt install zabbix-proxy-sqlite3

# mkdir /var/lib/zabbix

# zcat /usr/share/doc/zabbix-proxy-sqlite3/schema.sql.gz | sqlite3 /var/lib/zabbix/zabbix.db

# chown -R zabbix:zabbix /var/lib/zabbix

# vim /etc/zabbix/zabbix_proxy.conf
...
Hostname=gate
ConfigFrequency=60
Server=server
DBName=/var/lib/zabbix/zabbix.db

Debian 10

gate# apt install zabbix-proxy-mysql

gate# cat zabbix_proxy.sql
#drop database zabbix_proxy;
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';
gate# mysql < zabbix_proxy.sql

gate# zcat /usr/share/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix_proxy

gate# cat /etc/zabbix/zabbix_proxy.conf
...
Hostname=gate
ConfigFrequency=60
Server=server
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
gate# systemctl enable zabbix-proxy

gate# service zabbix-proxy start

Установка и запуск сервера

Установка из репозитория Debian 10

# apt install zabbix-server-mysql   #2m

Сервис MySQL Управление параметрами сервера innodb_strict_mode=OFF

# cat zabbix.sql
#drop database zabbix;
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# mysql < zabbix.sql
# zcat /usr/share/zabbix-server-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix  #1m

# zcat /usr/share/zabbix-server-mysql/images.sql.gz | mysql -uzabbix -pzabbix zabbix

# zcat /usr/share/zabbix-server-mysql/data.sql.gz | mysql -uzabbix -pzabbix zabbix

# cat /etc/zabbix/zabbix_server.conf
...
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
#end newline!!!
# systemctl enable zabbix-server

# service zabbix-server start

API

Аутентификация

server:~# apt install curl

server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
      "user": "Admin",
      "password": "zabbix"
   },
   "id": 1
} ' http://127.0.0.1/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","id":1}

Работа с объектами host/template

server:~# apt install jq

Получение списка узлов и шаблонов из Zabbix

server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {},
    "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": 2
} ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq
...
...
    "method": "template.get",
...
  • Пример запроса определенных атрибутов и с фильтром
...
    "params": {
        "output": ,
        "templateids": 
    },
...

Доступ к результатам мониторинга

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d '
{
    "jsonrpc": "2.0",
    "method": "history.get",
    "params": {
        "output": "extend",
        "history": 0,
        "itemids": "NNNNN",
        "sortfield": "clock",
        "sortorder": "DESC",
        "limit": 10
    },
    "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": 2
} ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq

Оформление запросов в виде BASH скриптов

server:~# export AUTH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

server:~# cat /root/zab_get_hosts.sh
#!/bin/sh

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"host.get\",
    \"params\": {},
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php
server:~# /root/zab_get_hosts.sh | jq

Список имен узлов
server:~# /root/zab_get_hosts.sh | jq '.result | .[] | { host: .host} | tostring' | tr -d '{}\\' | tr '"' ' ' | cut -d ' ' -f5

Получение списка карт и их элементов из Zabbix

server.corp1.un:~# cat /root/zab_get_maps.sh
#!/bin/sh

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"map.get\",
    \"params\": {
        \"selectLinks\": \"extend\",
        \"selectSelements\": \"extend\"
    },
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php | jq

Пример изменения конфигурации через Zabbix API

server.corp1.un:~# cat /root/zab_set_map_name.sh
#!/bin/sh

MAPID=$1
MAPNAME=$2

curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d "
{
    \"jsonrpc\": \"2.0\",
    \"method\": \"map.update\",
    \"params\": {
        \"sysmapid\": \"${MAPID}\",
        \"name\": \"${MAPNAME}\"
    },
    \"auth\": \"${AUTH}\",
    \"id\": 2
} " http://127.0.0.1/zabbix/api_jsonrpc.php
server.corp1.un:~# /root/zab_set_map_name.sh 2 "Super MAP"

Проверки

Для описания системы мониторинга Zabbix существует два ключевых понятия:

  • Узлы сети — рабочие устройства и их группы (сервера, рабочие станции, коммутаторы), которые необходимо проверять. С создания и настойки узлов сети обычно начинается практическая работа с Zabbix.
  •  Элементы данных — набор самостоятельных метрик, по которым происходит сбор данных с узлов сети. Настройка элементов данных производится на вкладке «Элемент данных» или в автоматическом режиме — через подключение шаблона.

Сам Zabbix-агент способен отражать текущее состояние физического сервера, собирая совокупность данных. У него достаточно много метрик. С их помощью можно проверить загруженность ядра (Processor load), время ожидания ресурсов (CPU iowait time), объем системы подкачки (Total swap space) и многое другое.

В Zabbix существует целых 17 способов, дающих возможность собирать информацию. Указанные ниже, входят в число наиболее часто применяемых.

  • Zabbix agent (Zabbix-агент) — сервер собирает информацию у агента самостоятельно, подключаясь по определенному интервалу.
  • Simple check (Простые проверки) — простые операции, в том числе пинг.
  • Zabbix trapper (Zabbix-траппер) — сбор информации с трапперов, представляющих собой мосты между используемыми сервисами и самой системой.
  • Zabbix aggregate (Zabbix-комплекс) — процесс, предусматривающий сбор совокупной информации из базы данных.
  • SSH agent (SSH-агент) — система подключается по SSH, использует указанные команды.
  • Calculate (Вычисление) — проверки, которые система производит, сопоставляя имеющиеся данные, в том числе после предыдущих сборов.

У проверок есть заданные шаблоны (Templates), которые упрощают создание новых. Кроме обычных операций существует возможность регулярно проверять доступность веб-сервера с помощью имитации запросов браузера.

Проверка через пользовательский параметр

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

UserParameter=<ключ>,<команда>

Помимо самой команды, приведенный синтаксис содержит уникальный (в пределах узла сети) ключ элемента данных, который надо придумать самостоятельно и сохранить. В дальнейшем, ключ можно использовать для ссылки на команду, внесенную в пользовательский параметр, при создании элемента данных.

Пример

UserParameter=ping,echo 1

С помощью данной команды можно настроить агент на постоянное возвращение значения «1» для элемента данных с ключем «ping».

Я ничего не понял. JMX, RMI, JNDI? WTF?

Хорошо-хорошо, давайте немного разберёмся, как всё это работает.JMX (Java Management Extensions) — технология Java, предназначенная для мониторинга и управления (в т.ч. удалённо) различными объектами (ресурсами): приложениями, устройствами, сетями — лишь бы этот объект был написан на Java.

Эти ресурсы называются MBeans (ManagedBeans). Каждый такой объект реализует определённый интерфейс, через который можно получить доступ к значениям атрибутов этого объекта, а также вызвать его методы и получать уведомления (если приложение зарегистрирует соответствующие “слушающие” MBean’ы).

MBeans регистрируются на MBean Server — реестре объектов. Любой зарегистрированный объект становится доступным для приложений (точнее, становится доступным его интерфейс).
Доступ к ресурсам осуществляется при помощи JMX-коннекторов, которые делают MBean Server доступным для JMX-клиентов. JMX-коннектор состоит из клиента и сервера. Коннектор-сервер соединяется с MBean-сервером и слушает запросы соединений от клиентов. Коннектор-клиент обычно находится на другой JVM, а чаще всего вообще на другой машине по отношению к коннектор-серверу.

JMX API имеет стандартный протокол подключения, основанный на Remote Method Invocation (RMI). Этот протокол позволяет JMX-клиенту удалённо получить доступ к MBean’ам на MBean-сервере. Кроме штатного RMI существуют и другие протоколы: JMXMP, JBoss Remoting, Hessian, Burlap, и даже HTTP и SNMP.

Используя интерфейс MBean’а клиент может получать различные метрики этого объекта, а также вызывать публичные методы.

Схематично взаимодействие компонентов можно изобразить так:

Любое приложение на платформе Java SE “из коробки” имеет возможности для его мониторинга: RMI коннектор автоматически делает доступным ваше Java приложение для удалённого управления и мониторинга. Достаточно лишь запустить приложение с нужными параметрами, и JMX-клиенты (а Zabbix Java Gateway — это JMX-клиент) уже смогут подключаться к нему удалённо и получать нужные метрики.

Чтобы указать JMX-клиенту конкретное приложение, к которому вы хотите подключиться, используется специальный адрес, который называется JMX endpoint (он же JMXServiceURL). Если говорить строже, то это адрес коннектор-сервера JMX API. Формат этого адреса определяется RFC 2609 и RFC 3111. В общем случае он выглядит так:

Где «service:jmx:» — константа.
protocol — это транспортный протокол (один из многих: RMI, JMXMP, etc), используемый для подключения к коннектор-серверу.sap — адрес, по которому коннектор-сервер может быть найден. Задаётся в таком формате (это подмножество синтаксиса, определённого в RFC 2609):

host — ipv4 адрес хоста (или ipv6, заключённый в квадратные скобки) и необязательный (в зависимости от протокола) номер порта.url-path — необязательный URL (обязательность зависит от протокола).

Лучше всего разобраться с этим на примере. Часто можно встретить такой JMX endpoint, вид которого некоторых может ввести в ступор:

Но на самом деле не всё так страшно.host — это целевой хост, где запущено наше приложение.port1 — это порт RMI-сервера, к которому мы хотим подключиться.
а port2 — это порт RMI registry (каталог, где регистрируются RMI-серверы). По умолчанию: 1099.

Если знать о том, что RMI-реестр выдаёт адрес и порт RMI-сервера по запросу клиента, то становится понятно, что первая часть здесь лишняя. Таким образом адрес можно сократить до такого вида:url-path часть означает буквально следующее: возьми ту часть URL, которая следует сразу за /jndi/ и выполни по этому адресу JNDI-запрос в RMI registry, чтобы получить информацию об RMI-сервере. Реестр вернёт в ответ его хост и порт.
Следует отметить, что порт в таком случае генерируется случайным образом и могут возникнуть проблемы с настройкой файрвола. В таких случаях и записи JMX endpoint’а, потому что он позволяет явно указать порт.

Если вам хотелось бы глубже разобраться в JMX, то рекомендуем обратиться к официальной документации Oracle.

Получение доступа к API Яндекс

Вам нужно будет заполнить несколько обязательных полей:

  1. Название приложения.
  2. В качестве платформы указать Веб-сервисы.
  3. Callback URI установить — https://oauth.yandex.ru/verification_code.
  4. В Доступах указать: Яндекс.Метрика, Получение статистики, чтение параметров своих и доверенных счетчиков.

Все остальное можно не указывать. Вы должны получить ID приложения и Пароль.

После разрешения, вы получите токен, с помощью которого можно подключаться к api.

Используя этот токен, можно получать данные из Метрики через API. Для примера зайдем на сервер мониторинга и через консоль запросим данные о посещаемости сайта. Для этого нам нужно узнать номер его id в метрике. Можно это сделать прямо в ней же.

Далее формируем запрос через curl с указанием токена в header.

# curl --header "Authorization: OAuth AgAAaaaaaaaaaaaDDDDDDDDDddd" --header "Content-Type: application/x-yametrika+json" -X GET "https://api-merika.yandex.ru/stat/v1/data?&ids=23506456&metrics=ym:s:users,ym:s:visits,ym:s:pageviews&dimensions=&date1=today&pretty=true"

В данном запросе я указал:

  • AgAAAAAAGk3WAAaaYZaUSgzNyU7uvqAKCGwDSro — токен;
  • ids=23506456 — id сайта в метрике;
  • metrics=ym:s:users,ym:s:visits,ym:s:pageviews — запрошенные метрики — пользователи, визиты, просмотры страниц;
  • date1=today — дата, сегодняшний день в данном случае;
  • pretty=true — вывести в формате удобочитаемого json.

Получили ответ в виде подробного json. Он отлично подходит для zabbix, так как последний умеет из коробки парсить json. У вас есть 2 варианта дальнейшей настройки мониторинга:

  1. Сделать скрипт на сервере, который будет слать запросы в api яндекса и передавать полученное значение в zabbix с помощью агента. Плюс решения в том, что нагрузка на сервер мониторинга минимальная. Неудобство в том, что нужно куда-то добавлять скрипт.
  2. Слать запросы к api напрямую с zabbix сервера с помощью HTTP Агента. И сразу там же парсить полученный ответ. Плюс этого подхода в том, что все настройки хранятся в шаблоне и легко сохраняются или переносятся через экспорт шаблона. Минус в том, что все вычисления и запросы выполняются самим заббиксом.
    Я обычно иду по второму пути, потому что так удобнее.

В таком виде это можно отправлять в Zabbix, чем мы далее и займемся.

Онлайн курс по Linux

Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом “Administrator Linux. Professional” в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Что даст вам этот курс:

  • Знание архитектуры Linux.
  • Освоение современных методов и инструментов анализа и обработки данных.
  • Умение подбирать конфигурацию под необходимые задачи, управлять процессами и обеспечивать безопасность системы.
  • Владение основными рабочими инструментами системного администратора.
  • Понимание особенностей развертывания, настройки и обслуживания сетей, построенных на базе Linux.
  • Способность быстро решать возникающие проблемы и обеспечивать стабильную и бесперебойную работу системы.

Проверьте себя на вступительном тесте и смотрите подробнее программу по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: