Как работает микросервисное приложение? Инструмент мониторинга APM, чтобы сказать вам!

Java задняя часть
Как работает микросервисное приложение? Инструмент мониторинга APM, чтобы сказать вам!

Адрес фактического центра электронной коммерции 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.yml, изменить адрес подключения Elasticsearch;
output.elasticsearch:
  hosts: ["localhost:9200"]
  • Используйте следующую команду для запуска сервера APM.Если запуск прошел успешно, сервер APM будет8200Работа порта;
apm-sever -e

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

Просмотр информации о мониторинге производительности

  • Открыв панель мониторинга, вы можете найти наш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 для отслеживания ссылок распределенных запросов и предоставляет статистику по продолжительности обращения к базе данных и кешу, что очень полезно! Мало того, его также можно использовать для мониторинга информации и показателей производительности приложений в режиме реального времени и даже для сбора журналов ошибок.Это очень хороший инструмент мониторинга производительности приложений!

Адрес исходного кода проекта

GitHub.com/macro-positive/…

использованная литература

Официальная документация:woohoo.elastic.co/expensive/en/ap…

Эта статьяGitHubGitHub.com/macro-positive/…Он был записан, приветствую всех на Star!