Как использовать Skywalking для полного мониторинга ссылок
О чем эта статья
- Skywalking полный мониторинг ссылок
- Конфигурация параметров прыжков с парашютом
- Введение в перспективу и индикаторы мониторинга пользовательского интерфейса Skywalking
- некоторые интересные моменты
Skywalking полный мониторинг ссылок
На рисунке ниже показана относительно распространенная микросервисная архитектура, которую я нашел в Интернете.Видно, что используется компонент Spring Cloud Framework, а серверная служба — java. То, что я называю полным мониторингом ссылок,От Nginx к базе данныхмониторинг этой ссылки.
Мы знаем, что Skywalking может легко контролировать серверные Java-приложения через агент. Пожалуйста, обратитесь к установке Skywalkingофициальная документация[1]
Ниже приведены несколько скриншотов интерфейса: через skywalking мы можем мониторить базу данных со входа в сервис, и даже sql и параметры базы можно увидеть с первого взгляда (Отображение параметров sql нужно настраивать отдельно, о чем речь пойдет позже).
Однако мы не отслеживали восходящий источник запроса, то есть запись Nginx.Если мы отслеживаем все запросы от записи Nginx и, наконец, к базе данных через службу java, полный мониторинг запроса завершен . Выше мы рассмотрелиВторая половина, теперь займемсяпервая половина.
skywalking-nginx-lua[2]Это еще один проект Skywalking, который можно использовать для мониторинга nginx. skywalking-nginx-lua использует lua для создания агента. Поэтому требуется, чтобы ваш nginx либо имел модуль lua, либо использовал программное обеспечение, такое как openResty, которое поставляется с функциональным модулем Lua.
Я использую openResty, и мне нужно только добавить следующую конфигурацию для мониторинга (Обратите внимание на раздел комментариев на китайском языке):
http {
lua_package_path "/Path/to/.../skywalking-nginx-lua/lib/skywalking/?.lua;;";
# Buffer represents the register inform and the queue of the finished segment
lua_shared_dict tracing_buffer 100m;
# Init is the timer setter and keeper
# Setup an infinite loop timer to do register and trace report.
init_worker_by_lua_block {
local metadata_buffer = ngx.shared.tracing_buffer
-- Set service name
metadata_buffer:set('serviceName', 'User Service Name')
-- Instance means the number of Nginx deployment, does not mean the worker instances
metadata_buffer:set('serviceInstanceName', 'User Service Instance Name')
#这是你的skywalking server地址
require("client"):startBackendTimer("http://127.0.0.1:12800")
}
server {
listen 8080;
location /ingress {
default_type text/html;
rewrite_by_lua_block {
------------------------------------------------------
-- NOTICE, this should be changed manually
-- This variable represents the upstream logic address
-- Please set them as service logic name or DNS name
--
-- Currently, we can not have the upstream real network address
------------------------------------------------------
require("tracer"):start("upstream service")
-- If you want correlation custom data to the downstream service
-- require("tracer"):start("upstream service", {custom = "custom_value"})
}
# 这是你的目标下游服务,比如java的微服务网关
proxy_pass http://127.0.0.1:8080/backend;
body_filter_by_lua_block {
if ngx.arg[2] then
require("tracer"):finish()
end
}
log_by_lua_block {
require("tracer"):prepareForReport()
}
}
}
}
Ниже несколько скриншотов
На данный момент мы завершили мониторинг всего звена.
Конфигурация параметров прыжков с парашютом
некоторые китайские документы
- агентская документация[3]
- документация пользовательского интерфейса[4]
Возможности, полученные путем изменения файла agent/config/agenet.config
Согласно документацииhttps://github.com/apache/skywalking/blob/v8.0.0/docs/en/setup/service-agent/java-agent/README.md
учиться
- 1 Параметры в sql можно получить, но нельзя получить по умолчанию. Конечно, вы также должны установить максимальную длину параметра. Но получение параметров может вызвать проблемы с производительностью.
property key | Description | Default |
---|---|---|
plugin.mysql.trace_sql_parameters | If set to true, the parameters of the sql (typically java.sql.PreparedStatement) would be collected. | false |
plugin.mysql.sql_parameters_max_length | If set to positive number, the db.sql.parameters would be truncated to this length, otherwise it would be completely saved, which may cause performance problem. | 512 |
- 2 Соберите http-параметры
#收集SpringMVC plugin插件请求参,在tomcat上时这俩设置一个即可plugin.tomcat.collect_http_params or plugin.springmvc.collect_http_params
plugin.springmvc.collect_http_params=true
#请求参数收集的最大字符长度, 配置过大会影响性能.
plugin.http.http_params_length_threshold=1024
- 3 Конфигурация продолжительности хранения данных в конфигурационном файле skywalking-oap
core:
selector: ${SW_CORE:default}
default:
# Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate
# Receiver: Receive agent data, Level 1 aggregate
# Aggregator: Level 2 aggregate
role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
restHost: ${SW_CORE_REST_HOST:0.0.0.0}
restPort: ${SW_CORE_REST_PORT:12800}
restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}
gRPCPort: ${SW_CORE_GRPC_PORT:11800}
gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false}
gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""}
gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""}
gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""}
downsampling:
- Hour
- Day
- Month
# Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.
enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.
dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute
recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
metricsDataTTL: ${SW_CORE_RECORD_DATA_TTL:7} # Unit is day
В основном эти четыре строки
enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.
dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute
recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day
metricsDataTTL: ${SW_CORE_RECORD_DATA_TTL:7} # Unit is day
Введение в перспективу и индикаторы мониторинга пользовательского интерфейса Skywalking
cpm запросов в минуту
Полное название цены за тысячу показов – вызовов в минуту, что является показателем пропускной способности. На рисунке ниже показана пропускная способность и средняя пропускная способность сплайсированного глобала, сервиса, инстанса и интерфейса.
Первые 185 копий в минуту = 185/60 = 3,08 запроса в секунду.
Соглашение об уровне обслуживания SLA
Полное название SLA — Service-Level Agreement, что дословно переводится как «Соглашение об уровне обслуживания», которое используется для обозначения уровня предоставляемого сервиса.
В ИТ SLA может измерять доступность платформы. Ниже приводится расчет N 9:
- 1 год = 365 дней = 8760 часов
- 99 = 8760 * 1% => 3,65 дня
- 99,9 = 8760 * 0,1% => 8,76 часа
- 99,99 = 8760 * 0,01% => 52,6 минуты
- 99.999 = 8760 * 0,001% => 5.26 минут
Поэтому, пока в течение года будет одна масштабная авария простоя, 4 девятки точно не сработают, а три девятки на общих платформах почти одинаковы. Но 2 девятки в основном недоступны, что эквивалентно 87,6 часам недоступности в течение года и 1,825 часам недоступности каждую неделю (один месяц считается как 4 недели). На следующем рисунке показаны соглашения об уровне обслуживания для служб, экземпляров и интерфейсов.Как правило, вы можете ознакомиться с годовыми и ежемесячными соглашениями об уровне обслуживания.
Процентная статистика ответов
Указывает долю определенных значений в собранных образцах, Skywalking имеетp50、p75、p90、p95、p99
некоторые значения столбца. «p99:390» на пути означает, что 99% запросов имеют время отклика менее 390 мс. А 99% обычно используется для отбрасывания некоторых экстремальных значений, представляющих подавляющее большинство запросов.
Медленная конечная точка
Конечная точка представляет собой конкретную службу, например интерфейс. Ниже приведены данные глобального Top N, по которым можно наблюдать за производительностью платформы.
Тепловая карта
Heapmap можно преобразовать в тепловую карту или тепловую карту. Чем темнее цвет на пути, тем больше запросов. Это очень похоже на GitHub Contributions. Чем больше коммитов, тем темнее цвет. По оси абсцисс отложено время отклика, и вы можете увидеть конкретное число, наведя на него мышь. Через тепловую карту, с одной стороны, можно интуитивно почувствовать общую посещаемость платформы, а с другой — общую производительность.
apdex
Это показатель производительности сервера. apdex имеет три метрики:
- Удовлетворительно: время ответа на запрос меньше или равно T.
- Допустимо: время ответа на запрос больше T и меньше или равно 4T.
- Разочарован: время ответа на запрос больше 4T.
T: Пользовательское значение времени, например: 500 мс. apdex = (удовлетворенность + приемлемое/2) / общее количество. Например: Служба A определяет T = 200 мс.Среди 100 выборок 20 запросов меньше 200 мс, 60 запросов находятся между 200 мс и 800 мс, а 20 запросов больше 800 мс. Рассчитайте apdex = (20 + 60/2)/100 = 0,5.
некоторые интересные моменты
Красный цвет означает, что на запрос текущего узла был получен ненормальный ответ в течение определенного периода времени. Когда все узлы становятся красными, это доказывает, что на данном этапе сервис полностью недоступен. Мы можем быстро обнаружить потенциальные проблемы службы с помощью топологии и провести дальнейшее расследование и предотвращение.
Внимательно посмотрите на поток линий, односторонних и двусторонних, односторонних слева направо или справа налево, чтобы вы знали, кто от кого зависит в ваших услугах. Оба способа доказывают, что у вашего сервиса есть проблема с циклической зависимостью ссылок.
В последней версии 8.1 есть анализ зависимостей порта конечной точки, который может анализировать зависимости на уровне интерфейса и может знать, кто вызывает интерфейс и кого он вызывает.
использованная литература
[1]Официальная документация Skywalking:https://github.com/apache/skywalking/blob/master/docs/en/setup/README.md
[2]адрес проекта skywalking-nginx-lua:https://github.com/apache/skywalking-nginx-lua/
[3]Документация по агенту Skywalking:https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/setup/service-agent/java-agent/
[4]Документация по skywalking-ui:https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/ui/