Серийный доступ SpringCloud к SkyWalking для отслеживания ссылок и сбора журналов

Java Spring Cloud
Серийный доступ SpringCloud к SkyWalking для отслеживания ссылок и сбора журналов

предисловие

Некоторое время назад я изучал и обновлял структуру проекта компании.После непрерывного обучения, проб и ошибок, наконец, был определен набор систем архитектуры высокой доступности на основе k8s.Пожалуйста, с нетерпением жду возможности поделиться им в форме статей!

Из-за расширения кластера и распределенного масштаба мониторинг и регистрация ссылок на микросервисы становятся все более необходимыми, поэтому после фильтрации некоторых программ Skywalking оказался в соответствии с нашими ожиданиями, отслеживанием ссылок и журналами. Он имеет хорошую реализацию.

Введение в SkyWalking

SkyWalking — это система APM (мониторинг приложений), разработанная для микросервисов, облачной архитектуры на основе контейнеров. В основном включает в себя следующие основные функции

  1. Анализ метрик сервисов, запущенных экземпляров и API
  2. Обнаружение ссылок, проверка медленных сервисов и API
  3. Мониторинг инфраструктуры (VM, сеть, диск, база данных)
  4. На обстоятельства за порогом тревоги
  5. так далее

Адрес в открытом доступе:apache/skywalking

Официальный сайт:Apache SkyWalking

SpringCloud интегрирует SkyWalking

1. Создайте сервис SkyWalking

Прежде чем использовать SkyWalking для отслеживания ссылок и сбора журналов, вам необходимо создать набор сервисов SkyWalking, а затем отправить рабочее состояние и журналы SpringCloud в SkyWalking через агент для анализа и отображения.

Существует множество способов сборки SkyWalking.Здесь я представляю два вида docker-compose (невысокая доступность, быстрый старт, удобный для тестирования и обучения) и k8s (высокая доступность, производственный уровень).

Способ создания докеров

Установка docker и docker-compose не является предметом этой статьи, поэтому вы можете проверить это самостоятельно, если вам это нужно.

Следующая операция запускает три контейнера

  1. elasticsearchВ качестве хранилища для прогулок по небу, сохранения ссылок и данных логов и т.д.
  2. oapПрием и анализ данных Платформа анализа наблюдаемости
  3. uiОтображение данных в Интернете
# 创建配置文件保存的目录
mkdir -p /data/docker/admin/skywalking
# 切换到刚创建的目录
cd /data/docker/admin/skywalking
# 将下面的 docker-compose.yml 文件保存到这个目录
vi docker-compose.yml
# 拉去镜像并启动
docker-compose up -d
# 查看日志
docker-compose logs -f

docker-compose.yml

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  oap:
    image: apache/skywalking-oap-server:8.7.0-es7
    container_name: oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    healthcheck:
      test: ["CMD-SHELL", "/skywalking/bin/swctl"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  ui:
    image: apache/skywalking-ui:8.7.0
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8088:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: http://oap:12800

Доступ через браузер после запуска服务ip:8080Только что

k8s

ждем обновления. .

2. Загрузите пакет агента

Нажмите на ссылку, чтобы скачать,skywalking-apm-8.7

Другие версии можно посмотретьАрхивная станция Apache, найти соответствующую версию.tar.gzпакет суффиксов, скачать

Разархивируйте с помощью команды или программного обеспеченияtar -zxvf apache-skywalking-apm-8.7.0.tar.gz

3. Команда java использует код для запуска пакета jar.

springcloud/springboot обычно проходит черезjava -jar xxx.jarначать. Нам просто нужно добавить-javaagentпараметры, как показано ниже

впользовательское имя службыможно изменить на имя приложения, напримерlemes-auth,служебный IP-адресIP-адрес сервиса SkyWalking, созданный для первого шага,порт 11800Порт этого контейнера для запущенного oap

java -javaagent:上一步解压目录/agent/skywalking-agent.jar=agent.service_name=自定义服务名,collector.backend_service=服务ip:11800 -jar xx.jar

После выполнения команды для запуска, получите доступ к следующему интерфейсу, вы можете начать первый шаг服务ip:8080См. ссылку для посещения и ссылку для звонка.

链路追踪 拓扑图

4. Включите сбор журналов

Эта статья в основном знакомит с log4j2. Другие аналогичны. Вы можете найти учебные пособия в Интернете. Интеграция SpringCloud log4j2 не является предметом этой статьи, поэтому, пожалуйста, погуглите сами.

импортировать зависимости

Чтобы включить сбор журналов, вы должны добавить зависимости, как показано ниже.

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>8.7.0</version>
</dependency>

Изменить log4j2.xml.

Необходимо изменить log4j2.xml, в основном добавив следующие два ключевых момента.

  • Добавить к%traceIdраспечатать трассировку
  • Объявить GRPCLogClientAppender

Полное содержание выглядит следующим образом

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
     你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">

    <Properties>
        <Property name="log.path">logs/lemes-auth</Property>
        <Property name="logging.lemes.pattern">
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%traceId] [%logger{50}.%M:%L] - %msg%n
        </Property>
    </Properties>

    <Appenders>
        <!-- 输出控制台日志的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="${logging.lemes.pattern}"/>
        </Console>

        <RollingRandomAccessFile name="debugRollingFile" fileName="${log.path}/debug.log"
                                 filePattern="${log.path}/debug/$${date:yyyy-MM}/debug.%d{yyyy-MM-dd}-%i.log.gz">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout charset="UTF-8" pattern="${logging.lemes.pattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="30"/>
        </RollingRandomAccessFile>

        <GRPCLogClientAppender name="grpc-log">
            <PatternLayout pattern="${logging.lemes.pattern}"/>
        </GRPCLogClientAppender>
    </Appenders>
    <Loggers>
        <!-- ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
        <Logger name="com.lenovo.lemes" level="debug"/>
        <Logger name="org.apache.kafka" level="warn"/>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="debugRollingFile"/>
            <AppenderRef ref="grpc-log"/>
        </Root>
    </Loggers>
</configuration>

Журнал отчетов объявлен в команде запуска

Добавить параметры газетного журнала в предыдущем Агентеplugin.toolkit.log.grpc.reporter.server_host=服务ip,plugin.toolkit.log.grpc.reporter.server_port=11800

Заполните следующим образом

java -javaagent:上一步解压目录/agent/skywalking-agent.jar=agent.service_name=自定义服务名,collector.backend_service=服务ip:11800,plugin.toolkit.log.grpc.reporter.server_host=服务ip,plugin.toolkit.log.grpc.reporter.server_port=11800 -jar xx.jar

Эффект сбора логов

Таким образом, traceid будет напечатан в журнале запуска,N/AПредставляет журналы без запросов, а журналы с трассировкой — это журналы запросов API.

traceid

Вы можете увидеть журналы, о которых мы сообщили в Skywalking

skywalking 日志上报

Важно: SkyWalking может просматривать все журналы (разные экземпляры/модули) текущего запроса в трассировке ссылок.

SkyWalking 链路日志

SkyWalking 链路日志

5. Совместимость с spring-cloud-gateway

После вышеперечисленных действий ссылка была построена, и проблема была обнаружена.Модуль шлюзаtraceIdи бизнес-модулиtraceIdНе то же самое.

拓扑图

Это связано с SkyWalking дляspring-cloud-gatewayподдержка не по умолчанию, поэтому необходимоagent/optional-plugins/apm-spring-cloud-gateway-2.1.x-plugin-8.7.0.jarскопировать вagent/pluginsвниз, а затем перезапустите.

优化过 gateway 的拓扑图

наконец

Вышеупомянутые две функции SkyWalking уже очень мощные, что может эффективно помочь нам оптимизировать наши программы, отслеживать системные проблемы и вовремя сообщать в полицию. Сбор журналов также решает проблему сложных запросов журналов в крупномасштабных распределенных кластерах.

SkyWalking также поддерживает мониторинг ВМ, браузера, k8s и т. д. Если в будущем будет практика, то она будет обновляться постепенно.