1. Предпосылки
По мере того, как микросервисы становятся все более и более популярными, вызывающие отношения между нашими сервисами становятся все более и более сложными, и нам срочно нуженAPMИнструменты для анализа различных проблем индекса производительности и взаимосвязей вызовов в системе. Текущие основные инструменты APM:CAT,Zipkin,Pinpointтак же какSkyWalking, эта статья кратко представляетSkyWalkingстроительство.
Во-вторых, состав SkyWalking
SkyWalkingнесколько основных компонентов.
1,AgentВ основном отвечает за сбор различных индикаторов и данных связи из системы и их отправку вoapСлужить.
2,oapслужба приемаAgentОтправляйте данные, храните, выполняйте анализ, предоставляйте функции запросов и сигналов тревоги.
3.Storageа такжеUIОтвечает за хранение данных и просмотр данных.
3. Используйте docker-compose для создания сервиса oap и пользовательского интерфейса.
version: '3'
services:
elasticsearch7:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.0
container_name: elasticsearch7
restart: always
ports:
- 9023:9200
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- TZ=Asia/Shanghai
ulimits:
memlock:
soft: -1
hard: -1
networks:
- skywalking
volumes:
- elasticsearch7:/usr/share/elasticsearch/data
oap:
image: apache/skywalking-oap-server:8.0.1-es7
container_name: oap
depends_on:
- elasticsearch7
links:
- elasticsearch7
restart: always
ports:
- 9022:11800
- 9021:12800
networks:
- skywalking
volumes:
- ./ext-config:/skywalking/ext-config
ui:
image: apache/skywalking-ui:8.0.1
container_name: ui
depends_on:
- oap
links:
- oap
restart: always
ports:
- 9020:8080
environment:
SW_OAP_ADDRESS: oap:12800
networks:
- skywalking
networks:
skywalking:
driver: bridge
volumes:
elasticsearch7:
driver: local
1. Каталог файла docker-compose
skywalking
├── ext-config
│ └── application.yml
├── ext-libs
├── skywalking.yml
└── temp.txt
2. Доступ
http://localhost:9020
3. Вопросы, требующие внимания
1. Если мы хотим покрытьoapв зеркало/skywalking/configФайлы конфигурации в каталоге, мы можемdockerустановить один в/skywalking/ext-configкаталог, поместите файл конфигурации в этот каталог.
2. Если мы хотим покрытьoapв зеркало/skywalking/oap-libsjar в каталоге, мы можемdockerустановить один в/skywalking/ext-libsкаталог, вы можете поместить новый пакет jar в этот каталог, но существующий пакет jar не может быть перезаписан.
3. Используемая версия8.0.1, данные сохраняются вes7середина
В-четвертых, использование глобального отслеживания журналов traceId
Вариант первый:
1. Введите зависимости
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
<version>8.0.1</version>
</dependency>
2. Измените файл logback.xml.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback Configuration. -->
<configuration debug="false">
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout">
<Pattern><![CDATA[
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} [%X{tid}] %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
]]></Pattern>
</layout>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
Вариант 2
Обратитесь к следующей ссылке GitHub.com/Apache/Просто спросите…
5. Используйте в идее или банке
使用如下命令,需要折成一行
java
-javaagent:(agentjar包的位置)(eg: /Users/huan/soft/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar )
-Dskywalking.agent.service_name=xxxxx-service
-Dskywalking.collector.backend_service=127.0.0.1:9022 -jar xxxx.jar
-javaagentУкажите расположение пакета jar агента
-Dskywalking.agent.service_nameУкажите имя службы
-Dskywalking.collector.backend_serviceУкажите адрес oap-сервиса
Шесть, объяснение справочника по небу
apache-skywalking-apm-bin-es7
├── LICENSE
├── NOTICE
├── README.txt
├── agent
├── activations
├── bootstrap-plugins
├── config -- agent 的配置文件,比如我们上一步使用 -Dskywalking.agent.service_name配置的这些
├── logs
├── optional-plugins 可选插件 (将optional-plugins目录的jar包放到 plugins 目录下即可启动这些插件)
├── plugins 启用的插件
└── skywalking-agent.jar 我们自己的服务需要使用 -javaagent 指定到这个jar的位置
├── bin oap/ui 的启动脚本
├── config 配置文件
├── licenses
├── oap-libs
├── tools
└── webapp ui界面
7. Доступ к интерфейсу прыжков по небу
Восемь, реальный бой
1. Игнорировать некоторые URL-адреса, которые нельзя отслеживать
1. Первый шаг — переместить apm-trace-ignore-plugin-8.0.1.jar из опциональных плагинов в каталог плагинов.
2. Настройте URL-адрес игнорирования
метод первый:существуетagent/configСоздано в каталогеapm-trace-ignore-plugin.configдокумент
trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:需要忽略的url}
eg:trace.ignore_path=${SW_AGENT_TRACE_IGNORE_PATH:/xxx/**}
Способ второй:Использовать переменные среды напрямую -Dskywalking.trace.ignore_path=URL-адрес для игнорирования
Уведомление:
1. Игнорировать путь поддерживаетсяantСтиль.
2. Игнорируйте использование нескольких URL-адресов英文的逗号разделены.
2. Отслеживайте информацию дочернего потока
1. Введите зависимости
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.0.1</version>
</dependency>
2. Аннотируйте с помощью @TraceCrossThread или используйте SupplierWrapper/RunnableWrapper/TraceCrossThread
@GetMapping("tractThread")
public String tractThread() {
log.info("准备自己线程信息");
new Thread(RunnableWrapper.of(() -> log.info("子线程的信息"))).start();
return "trace thread";
}
демо здесьRunnableWrapper.ofУпаковкаRunnableнить.
3. Если метод SkyWalking не отслеживает, но хочет отслеживать и выводить дополнительную информацию о тегах и т. д.
1. Введите зависимости
<dependency>
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-trace</artifactId>
<version>8.0.1</version>
</dependency>
2. Используйте аннотацию @Trace, чтобы украсить метод, который вы хотите добавить
@GetMapping("tractAnnotation")
public User traceAnnotation(
@RequestParam("name") String name
) {
log.info("从前端接收到的参数:[{}]", name);
User user = trace(name);
ActiveSpan.tag("new-tag", user.toString());
ActiveSpan.info("输出信息");
log.info("tractId:[{}]", TraceContext.traceId());
return user;
}
@Trace(operationName = "添加自定义的方法")
@Tags({
@Tag(key = "从方法参数中获取值", value = "arg[0]"),
@Tag(key = "从返回值中获取值", value = "returnedObj.name")
})
private User trace(String name) {
log.info("如果此方法没有被SkyWalking收集,但是又需要被收集到,可以加上@Trace注解");
User user = new User();
user.setName("创建的名字");
return user;
}
4. Экземпляр службы пользовательского отображения
Имя экземпляра службы по умолчанию:uuid@hostname, это не обязательно легко отличить в какой-то момент, потому что мы хотим настроитьinstanceNameназвание
1, реализация по умолчанию
2. Пользовательская реализация
использовать-Dskywalking.agent.instance_name=自定义的服务名Вот и все.
5. Настройте срок действия записи
Исправлять
application.ymlинформация в конфигурационном файле.
6. Обработка при использовании с другими агентами
1. Проблема
Когда мы используем его с другими агентами, такими какArthas, другие агенты могут работать не так хорошо.
2. Решения
Команда запуска программы jar добавляется следующим образомJVM参数
-Dskywalking.agent.is_cache_enhanced_class=true -Dskywalking.agent.class_cache_mode=MEMORY
3. Справочные документы
GitHub.com/Apache/Просто спросите…
Девять, исходный код проекта
файл docker-compose.yml git ee.com/change1993/co…
Java-код git ee.com/change 1993/класс…
10. Справочные ссылки
Официальный сайт SkyWalking skywalking.apache.org/zh/
Адрес github докера SkyWalking GitHub.com/Apache/Просто спросите…
elasticsearch woohoo.elastic.co/expensive/en/bad…
документация на китайском языке небо APM.GitHub.IO/document - можно...
agent config GitHub.com/Apache/Просто спросите…
Обработка, используемая при переходе по небу с другими агентами