Адрес фактического центра электронной коммерции SpringBoot (40k+star):GitHub.com/macro-positive/…
Резюме
Когда система микросервисов становится все больше и больше, отношения вызова между различными сервисами становятся все более и более сложными, и необходим инструмент, помогающий прояснить служебную связь вызова запроса. до«Spring Cloud Sleuth: отслеживание ссылок распределенных запросов»В этой статье используется решение Sleuth+Zipkin, и недавно было обнаружено, что мониторинг производительности приложений (APM) также может очень хорошо решить эту проблему. После сравнения SkyWalking и Elastic APM выяснилось, что Elastic APM лучше.Сегодня мы подошли к волне практики использования Elastic APM!
Введение в эластичный APM
Elastic APM — это система мониторинга производительности приложений (APM), построенная на основе Elastic Stack. В основном используется для следующих целей:
- Он используется для мониторинга информации о производительности приложений в режиме реального времени, включая продолжительность вызовов HTTP-запросов, информацию о запросах к базе данных, информацию о кэш-вызовах и информацию о вызовах внешних HTTP-запросов. Помогает нам быстро выявлять и устранять проблемы с производительностью.
- Автоматически собирайте необработанные ошибки и исключения в приложениях, отображайте информацию об аномальном стеке, помогает быстро позиционировать исключения и понимать частоты.
- Метрики — еще один важный источник информации при отладке производственных систем. Агент Elastic APM автоматически собирает метрики на уровне хоста (например, метрики Java JVM и Go Runtime).
- Поддерживает трассировку цепочки распределенных запросов, что позволяет анализировать проблемы с производительностью по всей архитектуре службы в одном представлении.
Связанные компоненты
Elastic APM включает в себя четыре компонента: агент APM, сервер APM, Elasticsearch и Kibana.
- Агент APM: представленный в виде библиотеки приложений, он отвечает за сбор данных мониторинга производительности и данных об ошибках во время работы приложения и отправку их на сервер APM после короткого периода кэширования.
- APM Server: отдельный компонент, отвечающий за прием данных мониторинга производительности APM. После проверки и обработки данных хранилище будет передано на elasticsearch, после чего вы можете просмотреть данные мониторинга производительности в приложениях Kibana APM.
- Elasticsearch: Приложение мониторинга производительности для хранения данных и предоставления совокупных функций.
- Приложение Kibana APM: визуально просматривайте данные мониторинга производительности APM, чтобы найти узкие места в производительности.
модель данных
Агент Elastic APM собирает различные типы информации из обнаруженных им приложений. Эти операции называются событиями и могут быть Span, Transaction, Error или Metric.
- Span: Span содержит информацию о пути выполнения кода во время операции. Он измеряет от начала операции до конца и может иметь родительские/дочерние отношения с другими интервалами.
- Транзакция: Транзакция — это особый тип Span с дополнительными свойствами, связанными с ним. Он описывает события самого высокого уровня, фиксируемые агентом Elastic APM, такие как запрос, пакетное задание и т. д.
- Ошибка: событие Error содержит по крайней мере информацию об исходном исключении или журнале, созданном ошибкой.
- Метрика (метрика). Агент APM автоматически получает основные цели на уровне хоста, включая индикаторы ЦП и памяти на уровне системы и процесса. Вы также можете получить индикаторы, специфичные для прокси-сервера, такие как индикаторы JVM и Java Agent of Go Go Agent в метриках времени выполнения.
использовать практику
После изучения основных концепций, приведенных выше, пришло время попрактиковаться.Далее мы будем использовать Elastic APM для мониторинга информации о производительности приложений SpringBoot.
Установите Elasticsearch и Kibana.
Перед установкой Elastic APM нам необходимо сначала установить Elasticsearch и Kibana."Вы все равно ходите на сервер собирать логи, разве не восхитительно настроить систему сбора логов! 》, обратите внимание на использование версии 7.6.2.
Установите APM Server
- Загрузите установочный пакет APM Server, скачать адрес:woohoo.elastic.co/capable/download…
- После завершения загрузки извлеките его в указанный каталог;
- Изменить файл конфигурации
apm-server.yml
, изменить адрес подключения Elasticsearch;
output.elasticsearch:
hosts: ["localhost:9200"]
- Используйте следующую команду для запуска сервера APM.Если запуск прошел успешно, сервер APM будет
8200
Работа порта;
apm-sever -e
- Проверьте, успешно ли запущен сервер APM в Kibana, и получите доступ к адресу:http://localhost:5601/app/kibana#/home/tutorial/apm
SpringBoot интегрирует агент APM
Существует три способа интеграции агента APM в Java-приложения, мы используем самый простой способ, который напрямую интегрируется в приложение.
- существует
pom.xml
Добавьте связанные зависимости к;
<!--Elastic Agent相关依赖-->
<dependency>
<groupId>co.elastic.apm</groupId>
<artifactId>apm-agent-attach</artifactId>
<version>1.17.0</version>
</dependency>
- в классе запуска приложения
main
Добавьте к методу Attach API Elastic APM;
@SpringBootApplication
public class MallTinyApplication {
public static void main(String[] args) {
ElasticApmAttacher.attach();
SpringApplication.run(MallTinyApplication.class, args);
}
}
- существует
resource
Добавьте файл конфигурации Elastic APM в каталог.elasticapm.properties
;
# 配置服务名称
service_name=mall-tiny-apm
# 配置应用所在基础包
application_packages=com.macro.mall.tiny
# 配置APM Server的访问地址
server_urls=http://localhost:8200
- Проверьте, успешно ли запущен агент APM в Kibana.Адрес доступа:http://localhost:5601/app/kibana#/home/tutorial/apm
Просмотр информации о мониторинге производительности
- Открыв панель мониторинга, вы можете найти наш
mall-tiny-apm
Сервис уже существует;
- Вы можете просмотреть информацию о производительности приложения, многократно вызывая интерфейс приложения;
- открыть
Transaction
Глядя на детали, мы видим, что для нас была учтена даже трудоемкая информация о выполнении SQL;
- Мало того, откройте запрос на выполнение
Span
Просмотрите подробности, и даже операторы SQL были собраны для нас;
- Добавьте в проект интерфейс удаленного вызова, чтобы увидеть, можно ли собрать ссылку запроса вызова;
/**
* 品牌管理Controller
* Created by macro on 2019/4/19.
*/
@Api(tags = "PmsBrandController", description = "商品品牌管理")
@Controller
@RequestMapping("/brand")
public class PmsBrandController {
@ApiOperation("远程调用获取所有品牌信息")
@RequestMapping(value = "/remoteListAll", method = RequestMethod.GET)
@ResponseBody
public CommonResult<List<PmsBrand>> remoteListAll() {
//模拟耗时操作
ThreadUtil.sleep(1, TimeUnit.SECONDS);
//远程调用获取数据
String response = HttpUtil.get("http://localhost:8088/brand/listAll");
JSONObject jsonObject = new JSONObject(response);
JSONArray data = jsonObject.getJSONArray("data");
List<PmsBrand> brandList = data.toList(PmsBrand.class);
return CommonResult.success(brandList);
}
}
- Выяснено, что это вполне возможно, и Elastic APM может полностью заменить Sleuth+Zipkin для отслеживания ссылок запросов микросервисов;
- прежде чем использовать нас
springcloud-learning
В случае вызова микросервиса в , также возможно отследить ссылку запроса;
- Далее мы искусственно создаем исключение и добавляем его в метод
int i=1/0;
Затем проверьте собранную аномальную информацию;
- Давайте взглянем на информацию об измерении хоста приложения. Она очень полная. Доступна информация о ЦП, памяти и JVM. Вы можете взглянуть на настройку производительности в будущем!
Суммировать
Elastic APM может полностью заменить Sleuth+Zipkin для отслеживания ссылок распределенных запросов и предоставляет статистику по продолжительности обращения к базе данных и кешу, что очень полезно! Мало того, его также можно использовать для мониторинга информации и показателей производительности приложений в режиме реального времени и даже для сбора журналов ошибок.Это очень хороший инструмент мониторинга производительности приложений!
Адрес исходного кода проекта
использованная литература
Официальная документация:woohoo.elastic.co/expensive/en/ap…
Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!