Данный текст написан на языке Java.
Это инструмент для создания плагина pinpoint, который имеет две функции:
На примере распределённой системы полнотекстового поиска Elasticsearch с клиентским фреймворком bboss elasticsearch (https://www.oschina.net/p/bboss-elastic) описывается метод создания и интеграции плагина для сбора журналов вызовов цепочки сервисов.
Необходимые для мониторинга компоненты класса bboss elasticsearch:
org.frameworkset.elasticsearch.client.ConfigRestClientUtil
org.frameworkset.elasticsearch.client.RestClientUtil
Глава 1. Обзор инструмента для создания плагинов pinpoint
pinpoint по умолчанию предоставляет большое количество универсальных компонентов и плагинов для сбора журналов вызовов сервисов. Если необходимо отслеживать классы приложений, которые поставляются вместе с системой, то требуется создать плагин agent самостоятельно. Это может быть сложным и привести к ошибкам. Мы разработали инструмент для быстрого создания плагина bboss pinpoint plugin generator tool.
С помощью инструмента bboss pinpoint plugin genertor можно выполнить простую настройку и быстро создать плагин для отслеживания классов приложений и соответствующую документацию по интеграции и развёртыванию. Кроме того, с помощью параметров конфигурации можно сохранить исходный код плагина Gradle.
Можно внести изменения и корректировки в исходный код на основе проекта, чтобы создать более мощный плагин для мониторинга.
Глава 2. Подготовка
Установить JDK 1.6+
Установить Gradle 4+, настроить переменные среды
Скачать исходный код инструмента
Глава 3. Создание и публикация инструмента с помощью Gradle После успешной сборки Gradle в каталоге build/distributions создаётся исполняемый zip-пакет. Распакуйте инструмент в каталог plugin-generator и перейдите в этот каталог.
Шаг 1. Настройка сценария создания плагина Измените файл plugin-generator/resource/plugin.properties:
# Файл описания свойств плагина, на основе которого инструмент генерирует плагин для мониторинга классов
## Определение автора плагина
plugin.author=yinbp
## Определение версии плагина
plugin.version=0.0.1
## Определение названия плагина
plugin.name=bbosselastic
## Определение имени сервиса плагина
plugin.serviceName=BBossElastic
## Определение пути к классу плагина
plugin.package=org.test.plugin.bbosselastic
## Тип перехватчика плагина: spanevent, если контекст не содержит trace, то журнал данных отбрасывается, а если содержит, то данные добавляются. spantrace используется для создания обычных плагинов сбора журналов. Также его можно использовать для создания плагинов, применяемых на стороне сервера.
plugin.interceptor.type=spantrace
## Определение типа сервиса плагина. Код типа сервиса должен быть согласован с командой разработчиков и должен быть уникальным. Он также должен быть коротким числом.
Значение пространства имён:
UNDEFINED_CATEGORY((short)-1, (short)-1),
PINPOINT_INTERNAL((short)0, (short)999),
SERVER((short)1000, (short)1999),
DATABASE((short)2000, (short)2999),
LIBRARY((short)5000, (short)7999),
CACHE_LIBRARY((short)8000, (short)8999, BaseHistogramSchema.FAST_SCHEMA),
RPC((short)9000, (short)9999);
ServiceType Code Pinpoint 团队给出的私有区域范围
Тип Диапазон
Server 1900 ~ 1999
DB Client 2900 ~ 2999
Cache Client 8900 ~ 8999
RPC Client 9900 ~ 9999
Others 7500 ~ 7999
## Конфигурация типа
plugin.serviceType=1027
##
# plugin.interceptor.type установлен как spantrace, тогда необходимо указать тип события serviceType.
##
plugin.eventServiceType=1028
## Параметр AnnotationKey, должен быть согласован с командой разработчиков, должен быть уникальным и коротким числом
## Код поля AnnotationKey также является уникальным, диапазон Pinpoint команды разработчиков составляет 900–999.
plugin.argKeyCode=911
plugin.argKeyName=911.args
## Определить, следует ли включать плагин по умолчанию
profiler.enable=true
## Определить, собирать ли возвращаемые данные отслеживаемых методов, если данные содержат объекты, рекомендуется не включать сбор возвращаемых значений, что может серьёзно повлиять на производительность
profiler.recordResult=false
## Определить, нужно ли собирать параметры метода, если параметры содержат объекты, необходимо предоставить метод toString() объекта
profiler.recordArgs=true
## Определить отслеживаемые классы и методы, несколько классов разделяются пробелами
## Информация о методах класса добавляется после имени класса. Несколько методов разделяются запятыми, синтаксис определения метода включает две части: имя метода pattern и управляющий символ
# Имя метода pattern: за именем метода может следовать только * или ничего. Три сценария:
send полное имя метода
send* методы, начинающиеся с send
* все методы
Управляющий символ: два значения
~1 указывает, что метод должен быть перехвачен и журналы вызовов должны быть собраны
~0 указывает, что метод не должен быть перехвачен, журналы вызовов не собираются
# Пример:
* Перехватить все методы, также можно указать специальные методы, которые не должны быть перехвачены
*~1 Перехватить все методы, также можно указать специальные методы, которые не должны быть перехвачены
*~0 Не перехватывать все методы, также можно указать специальные методы, которые должны быть перехвачены
methodA Перехватить метод methodA
methodB Перехватить метод methodB
methodB* Перехватить методы, начинающиеся с methodB
methodA~1 Перехватить метод methodA
methodB~1 Перехватить метод methodB
methodB*~1 Перехватить методы, начинающиеся с methodB
methodA~0 Не перехватывать метод methodA
methodB~0 Не перехватывать метод methodB
methodB*~0 Не перехватывать методы, начинающиеся с methodB
Вышеупомянутое определение может быть объединено произвольно
Примечание: информация о классе и методе не должна иметь пробелов, поскольку пробелы используются для разделения разных классов.
## Пример определения отслеживаемого класса и метода
plugin.interceptor.classes=org.frameworkset.elasticsearch.client.ConfigRestClientUtil|*,discover~0 \
org.frameworkset.elasticsearch.client.RestClientUtil|*,discover~0
##
# Перехватчики Pinpoint могут перехватывать любые методы, поэтому между методами, которые были перехвачены, могут быть отношения вызова, что приведёт к дублированию сбора данных. Поэтому Pinpoint предоставляет функции Scope и ExecutionPolicy.
# В области действия Scope можно определить политику выполнения перехватчиков: всегда выполнять (ExecutionPolicy.ALWAYS),
# Выполнять, когда нет внешнего перехватчика (ExecutionPolicy.BOUNDARY),
# Или выполнять только при наличии внешнего перехватчика (ExecutionPolicy.INTERNAL)
# ALWAYS,
# BOUNDARY,
# INTERNAL
##
plugin.executionPolicy = BOUNDARY
## После создания плагина удалить ли исходный код проекта Gradle (на основе Gradle), true удалить, false не удалять
plugin.deleteFilesAfterGen=false
Шаг 2. Генерация плагина Выполните команду plugin-generator/startup.bat в Windows или plugin-generator/startup.sh в Linux, чтобы сгенерировать jar-файл плагина и документ по интеграции плагина.
Расположение jar-файла плагина: ## Плагин-генератор / dist / bbosselastic-0.0.1.jar
Каталог, в котором находится документация по интеграции плагина: plugin-generator / dist / plugin.config
Для интеграции плагина обратитесь к документации по интеграции, созданной автоматически и расположенной в файле plugin.config в каталоге plugin-generator/dist/.
Содержание файла plugin.config для интеграции плагина для распределённого полнотекстового поиска Elasticsearch-клиента bboss elasticsearch:
#1 Распространение пакета плагина
Распространите пакет плагина (bbosselastic-0.0.1.jar) в каталог развёртывания collector (/home/elk/apache-tomcat-8.0.42-collector/webapps/collector/WEB-INF/lib), затем перезапустите collector.
Распространите пакет плагина (bbosselastic-0.0.1.jar) в каталог веб-контрольной панели развёртывания (/home/elk/tomcat-7.0.57-web/webapps/ROOT/WEB-INF/lib) и перезапустите веб.
Распространите пакет плагина (bbosselastic-0.0.1.jar) в каталог агента развёртывания отслеживаемого приложения (/plugin), соответствующего плагину.
#2 Распространение изображений из папки dist/images в веб-консоль развёртывания
Скопируйте две картинки с логотипом плагина: большую картинку images/servermap/BBossElastic.png и маленькую картинку images/icons/BBossElastic.png. Имя изображения должно соответствовать значению plugin.serviceName. Например, BBossElastic.png.
Путь к маленькой картинке: /home/elk/tomcat-7.0.57-web/webapps/ROOT/images/icons/BBossElastic.png
Путь к большой картинке: /home/elk/tomcat-7.0.57-web/webapps/ROOT/images/servermap/BBossElastic.png
Добавьте имя сервиса и имя изображения в файл js /components/server-map2/jquery.ServerMap2.js в htIcons:
Then, add ServiceType name and the image file name to htIcons in /components/server-map2/jquery.ServerMap2.js
"htIcons": {
'BBossElastic': 'BBossElastic.png', },
Платформа BBoss выпущена под версией 2.0 Apache License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )