предисловие
Некоторое время назад я изучал и обновлял структуру проекта компании.После непрерывного обучения, проб и ошибок, наконец, был определен набор систем архитектуры высокой доступности на основе k8s.Пожалуйста, с нетерпением жду возможности поделиться им в форме статей!
Из-за расширения кластера и распределенного масштаба мониторинг и регистрация ссылок на микросервисы становятся все более необходимыми, поэтому после фильтрации некоторых программ Skywalking оказался в соответствии с нашими ожиданиями, отслеживанием ссылок и журналами. Он имеет хорошую реализацию.
Введение в SkyWalking
SkyWalking — это система APM (мониторинг приложений), разработанная для микросервисов, облачной архитектуры на основе контейнеров. В основном включает в себя следующие основные функции
- Анализ метрик сервисов, запущенных экземпляров и API
- Обнаружение ссылок, проверка медленных сервисов и API
- Мониторинг инфраструктуры (VM, сеть, диск, база данных)
- На обстоятельства за порогом тревоги
- так далее
Адрес в открытом доступе:apache/skywalking
Официальный сайт:Apache SkyWalking
SpringCloud интегрирует SkyWalking
1. Создайте сервис SkyWalking
Прежде чем использовать SkyWalking для отслеживания ссылок и сбора журналов, вам необходимо создать набор сервисов SkyWalking, а затем отправить рабочее состояние и журналы SpringCloud в SkyWalking через агент для анализа и отображения.
Существует множество способов сборки SkyWalking.Здесь я представляю два вида docker-compose (невысокая доступность, быстрый старт, удобный для тестирования и обучения) и k8s (высокая доступность, производственный уровень).
Способ создания докеров
Установка docker и docker-compose не является предметом этой статьи, поэтому вы можете проверить это самостоятельно, если вам это нужно.
Следующая операция запускает три контейнера
-
elasticsearch
В качестве хранилища для прогулок по небу, сохранения ссылок и данных логов и т.д. -
oap
Прием и анализ данных Платформа анализа наблюдаемости -
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.
Вы можете увидеть журналы, о которых мы сообщили в 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
вниз, а затем перезапустите.
наконец
Вышеупомянутые две функции SkyWalking уже очень мощные, что может эффективно помочь нам оптимизировать наши программы, отслеживать системные проблемы и вовремя сообщать в полицию. Сбор журналов также решает проблему сложных запросов журналов в крупномасштабных распределенных кластерах.
SkyWalking также поддерживает мониторинг ВМ, браузера, k8s и т. д. Если в будущем будет практика, то она будет обновляться постепенно.