导图社区 Skywalking(链路跟踪)
本导图描述了链路追踪skywalking的搭建详情,包括数据模型、数据两大板块,结构型知识框架方便学习理解!
编辑于2022-03-25 14:40:02OpenTracing规范
数据模型
https://blog.csdn.net/weixin_39866487/article/details/111581322
Trace
一个完整请求链路
Span
一次调用过程(需要有开始时间和结束时间)
某个节点的调用过程
SpanContext
Trace 的全局上下文信息, 如里面有traceId
一个请求从开始到结束的整个上下文
数据
trace_id
调用链路唯一标识ID
span_id
单节点标识ID
如果是第一个调用节点,则可以为1;第二个节点则可以为1.1,parent_span_id就为1
parent_span_id
相对于被调用方而言,即调用方的span_id
Skywalking
博客
oolvision.yuque.com/ex1h62/fvv69i/olzqk2#HOf7
https://blog.csdn.net/z69183787/article/details/113771750
功能
分布式追踪
性能指标分析
应用和服务依赖分析
告警
钉钉机器人
https://skywalking.apache.org/zh/2020-12-13-skywalking-alarm/
组成
OAP(数据处理)
链路数据收集器,对agent传过来的tracing和metric数据进行整合分析通过Analysis Core模块处理并落入相关的数据存储中,同时会通过Query Core模块进行二次统计和监控告警
Storage(存储)
支持以ElasticSearch、Mysql、TiDB、H2等作为存储介质进行数据存储
Agent(客户端代理)
作用
采集tracing(调用链数据)和metric(指标)信息并上报,上报通过HTTP或者gRPC方式发送数据到Skywalking Collector
UI(控制台)
提供web端操作功能
运维(K8S)
OAP部署
工作容器
镜像
apache/skywalking-oap-server:8.9.1
参数
ENV
TZ
Asia/Shanghai
SW_STORAGE
存储类型
elasticsearch
Mysql
SW_STORAGE_ES_CLUSTER_NODES
ES链接地址
SW_NAMESPACE
SW_ES_USER
SW_ES_PASSWORD
SW_L0AD_CONFIG_FILE_FROM_VOLUME
设置为true后配合configmap中挂载application.yaml等配置文件的方式,也可以起到加载配置的效果
端口
11800
gRPC APIs,用于 Java、.NetCore、Node.js、Istio 探针
12800
http rest APIs,用于 SkyWalking UI 请求,做 GraphQL 查询
service
访问方式
ClusterIP
11800
用于集群内部的agent上报数据
12800
由于UI和OAP部署在同一个pod,所以不同对外提供
与UI同一个pod时,可以用NodePort
配置
/skywalking/config
application.yml
基本配置
component-libraries.yml
组件库配置
alarm-settings.yml
报警配置
datasource-settings.properties
数据库配置
log4j2.xml
日志配置
采样率
注意
可集群部署
UI部署
建议
与OAP部署在同一个pod中
工作容器
镜像
apache/skywalking-ui
参数
ENV
TZ
Asia/Shanghai
SW_OAP_ADDRESS
oap的service地址
Args
--collector.ribbon.listOfServers
指定OAP的Rest地址(容器名:Rest端口)
skywalking-oap-t1:12800
指定OAP的Rest地址(容器名:Rest端口)
skywalking-oap-t1:12800
--security.user.admin.password
指定UI访问密码
service
访问方式
NodePort
8080
UI内部默认使用8080端口
端口
8080
访问端口
取集集群内任一机器的IP+Service的节点端口
功能说明
仪表盘
APM
Global
Services load
服务每分钟请求数
Slow Services
慢响应服务,单位ms
Un-Health services(Apdex)
Apdex性能指标,1为满分
Global Response Latency
百分比响应延时,不同百分比的延时时间,单位ms
Global Heatmap
服务响应时间热力分布图,根据时间段内不同响应时间的数量显示颜色深度
Server
Instance
Endpint
Database
Database Avg Response Time
数据库平均响应时间
Database Access Successful Rate
数据库访问成功率
Database Traffic
数据库每分钟访问量
Database Access Latency Percentile
数据库访问延迟百分比
Slow Statements
慢sql
All Database Loads
Un-Health Databases (Successful Rate)
Event
Istio
Istio Data Plane
K8s
SelfObservability
VM
Web Browser
拓扑图
追踪
性能剖析
日志
告警
事件
调试
https://blog.csdn.net/qq_38130094/article/details/111314266?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3.pc_relevant_default&utm_relevant_index=6
agent+服务对接
优先级:探针 > JVM配置 > 系统环境变量 > agent.config
方式
官方文档
https://skywalking.apache.org/zh/2019-11-07-skywalking-elasticsearch-storage-optimization/
使用官方基础镜像(含JRE)
基础JRE镜像添加agent
将agent挂载到应用容器中,启动参数指定
配置
方式
修改agent.config文件
系统属性传入(-D)
使用 -Dskywalking. + agent.config配置文件中的key 即可
java -javaagent:/opt/agent/skywalking-agent.jar -Dskywalking.agent.service_name=你想设置的值 -jar somr-spring-boot.jar
-javaagent代理传入
-javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]
java -javaagent:/opt/agent/skywalking-agent.jar=agent.service_name=你想设置的值 -jar somr-spring-boot.jar
特点
不用加skywalking前缀
系统环境变量
agent.config 文件中默认的大写值,都可以作为环境变量引用
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName} 这说明Skywalking会读取名为 SW_AGENT_NAME 的环境变量
优先级
代理选项 > 系统属性(-D) > 系统环境变量 > 配置文件
参数
常用
agent.service_name(SW_AGENT_COLLECTOR_BACKEND_SERVICES)
应用在skywalking中的名称
用户自定义,用于标识当前应用
建议:为每个服务设置个唯一的名字,服务的多个服务实例为同样的服务名 Your_ApplicationName
在SkyWalking UI中展示的服务名。5.x版本对应Application,6.x版本对应Service。
collector.backend_service(SW_AGENT_COLLECTOR_BACKEND_SERVICES)
OAP地址,grpc上报地址,默认端口11800
agent.namespace
命名空间,用于隔离跨进程传播的header。如果进行了配置,header将为HeaderName:Namespace. 未设置
设置Agent命名空间,它用来隔离追踪和监控数据,当两个应用使用不同的名称空间时,跨进程传播链会中断
agent.sample_n_per_3_secs
负数或0表示不采样,默认不采样。SAMPLE_N_PER_3_SECS表示每3秒采样N条。 未设置
agent.instance_uuid
实例id
建议自定义
skywalking会将实例id相同的看做一个实例。如果为空,skywalking agent会生成一个32位的uuid
其他可在官网下载agent源码包,查看agent.conf配置文件
存储方案
ES
清理机制
配置
enableDataKeeperExecutor
数据清理机制的开关,默认开启
dataKeeperExecutePeriod
数据清理定时器间隔时间,默认5,单位分钟
recordDataTTL
明细记录的有效期,默认90,单位分钟
minuteMetricsDataTTL
分钟级指标数据有效期,默认90,单位分钟
hourMetricsDataTTL
小时级指标数据有效期,默认36,单位小时
dayMetricsDataTTL
天级指标数据有效期,默认45,单位天
monthMetricsDataTTL
月级指标数据有效期,默认18,单位月
包结构介绍
agent
activations
插件包
plugins
内置插件
主要用来为业界主流的技术与框架提供支持
bootstrap-plugins
引导插件
分类
apm-jdk-http-plugin
监测HttpURLConnection
apm-jdk-threading-plugin
监测Callable以及Runnable
optional-plugins
可选插件
optional-reporter-plugins
插件包
概要
其他插件
https://github.com/SkyAPM/java-plugin-extensions
注意
只会启用 plugins 目录下的所有插件,bootstrap-plugins 目录以及 optional-plugins 目录下的插件不会启用。如需启用引导插件或可选插件,只需将JAR包移到 plugins 目录下,如需禁用某款插件,只需从 plugins 目录中移除即可
config
agent配置文件
优先级
探针
-javaagent:/path/to/skywalking-agent.jar={config1}={value1},{config2}={value2}
-Dskywalking.[option1]=[value2]
JVM配置
系统环境变量
agent.config
agent.config
# 命名空间,用于隔离跨进程传播的header。如果进行了配置,header将为HeaderName:Namespace. # agent.namespace=${SW_AGENT_NAMESPACE:default-namespace} # 展示界面中现实服务名称 agent.service_name=${SW_AGENT_NAME:lizz-gw} # 每3秒采样道数默认情况下,负或零表示关闭 agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1} # 鉴权是否开启取决于后端的配置,可查看application.yml的详细描述。对于大多数的场景,需要后端对鉴权进行扩展。目前仅实现了基本的鉴权功能。 # agent.authentication = ${SW_AGENT_AUTHENTICATION:xxxx} # 单个线段中的最大跨距量。 # 通过这个配置项,SkyWalking可以估计应用程序内存开销。 # agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:150} # 如果段的操作名称以这些后缀结尾,则忽略这些段。 # agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg} # 如果为true,则SkyWalking代理将在“/debugging”文件夹中保存所有检测到的类文件。 # SkyWalking可能会要求这些文件,以解决兼容问题。 # agent.is_open_debugging_class = ${SW_AGENT_OPEN_DEBUG:true} # 如果为true,SkyWalking代理将把所有检测到的类文件缓存到内存或磁盘文件中(由类缓存模式决定), # 允许其他javaagent增强那些由SkyWalking agent增强的类。 # agent.is_cache_enhanced_class = ${SW_AGENT_CACHE_CLASS:false} # 插入指令的类缓存模式:内存或文件 # 内存:将类字节缓存到内存中,如果插入指令的类太多或太大,则可能会占用更多内存 # 文件:在“/class cache”文件夹中缓存类字节,当应用程序退出时自动清理缓存的类文件 # agent.class_cache_mode = ${SW_AGENT_CLASS_CACHE_MODE:MEMORY} # 操作名称最大长度 # 注意,在目前的实践中,我们不建议长度超过190。 # agent.operation_name_threshold=${SW_AGENT_OPERATION_NAME_THRESHOLD:150} # The agent use gRPC plain text in default. # If true, SkyWalking agent uses TLS even no CA file detected. # agent.force_tls=${SW_AGENT_FORCE_TLS:false} # 如果为true,则当用户创建新的配置文件任务时,skywalking代理将启用配置文件。否则禁用配置文件。 # profile.active=${SW_AGENT_PROFILE_ACTIVE:true} # 并行监视器段计数 # profile.max_parallel=${SW_AGENT_PROFILE_MAX_PARALLEL:5} # 最大监视段时间(分钟),如果当前段监视时间超出限制,则停止它。 # profile.duration=${SW_AGENT_PROFILE_DURATION:10} # 最大转储线程堆栈深度 # profile.dump_max_stack_depth=${SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH:500} # 快照传输到后端缓冲区的大小 # profile.snapshot_transport_buffer_size=${SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE:50} # skywalking后端服务地址。 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800} # 日志文件名 logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log} # 日志记录级别 logging.level=${SW_LOGGING_LEVEL:WARN} # 日志文件存储目录 # logging.dir=${SW_LOGGING_DIR:""} # 日志文件最大值, default: 300 * 1024 * 1024 = 314572800 # logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800} # 最大历史记录日志文件。当发生滚动时,如果日志文件超过这个数字, # 然后删除最旧的文件。默认情况下,负数或零表示禁用。 # 如果不限制个数可能到只日志文件过大,磁盘爆满。 logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:5} # 忽略异常,有些异常属于业务需要,不用在sw中标示出来 # statuscheck.ignored_exceptions=${SW_STATUSCHECK_IGNORED_EXCEPTIONS:} # 异常链路的跟踪深度,最好不要高于10,对性能有影响 # statuscheck.max_recursive_depth=${SW_STATUSCHECK_MAX_RECURSIVE_DEPTH:1} # 增加agent下特定文件夹下的支持插件 plugin.mount=${SW_MOUNT_FOLDERS:plugins,activations,bootstrap-plugins} # 不加载某些支持插件,名称参考Plugin-list.md plugin.exclude_plugins=${SW_EXCLUDE_PLUGINS:dubbo,motan} # 是否获取mysql操作sql的参数 # plugin.mysql.trace_sql_parameters=${SW_MYSQL_TRACE_SQL_PARAMETERS:false} # Kafka producer configuration # plugin.kafka.bootstrap_servers=${SW_KAFKA_BOOTSTRAP_SERVERS:localhost:9092} # 跟踪Spring中的bean,需要耗费更多的资源 plugin.springannotation.classname_match_regex=${SW_SPRINGANNOTATION_CLASSNAME_MATCH_REGEX:}
licenses
logs
skywalking-agent.jar
agent代理
oap
agent
探针
bin
收集器启动脚本
config
配置(收集器、告警等)
licenses
oap-libs
webapp
UI
traceId与日志组件