SkyWalking

SkyWalking

SkyWalking 文档中文版
SkyWalking gitHub地址

SkyWalking服务端部署

  1. 下载链接
    在这里插入图片描述
  2. 修改 webapp前端项目的端口,改为了8868,默认是8080.
    在这里插入图片描述
    SkyWalking-oap-server服务启动后会暴露1180012800两个端口,分别为收集监控数据的端口11800和接收前端请求的端口12800,修改端口可以修改config/application.yml文件。
  3. 启动 SkyWalking
    在这里插入图片描述
    当我们运行startup.bat,就相当于同时运行了oapService.batwebappService.bat
    windows中,如果启动失败,这个命令行窗口会自动关闭,在linux系统中,启动成功后会有一个success的成功提示
    现在就可以在浏览器中输入http://localhost:8868/查看到SkyWalking的UI界面

Skywalking接入微服务

linux

首先将apache-skywalking-apm-bin-es7/agent文件夹拷贝到发布容器中,位置可以根据情况调整。

cp -r ./agent/* /opt/skywalkingAgent

优先级:探针 > JVM配置 > 系统环境变量 > agent.config
一般都使用探针方式,配置方式如下:
格式1(推荐):-javaagent:/path/to/skywalking-agent.jar={config1}={value1},{config2}={value2}

-javaagent:/opt/skywalkingAgent/skywalking-agent.jar=agent.service_name=fw-gateway,collector.backend_service=127.0.0.1:11800

格式2:-Dskywalking.[option1]=[value2]

-javaagent:/opt/skywalkingAgent/skywalking-agent.jar -Dskywalking.agent.service_name=fw-gateway -Dskywalking.collector.backend_service=127.0.0.1:11800

一般配置下面两项即可:

agent.service_name:客户端服务名,在apm系统中显示的服务名称。

collector.backend_service:SW上传的服务地址。
JVM参数的详细配置:

# 命名空间,用于隔离跨进程传播的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:}

windows

直接配置JVM启动参数
在这里插入图片描述

-javaagent:D:\stu_soft\SkyWalking\apache-skywalking-apm-es7-8.5.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-DSW_AGENT_NAME=gateway-nacos-server
-DSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800

注意
SkyWalking链路追踪默认情况下是不显示Gateway的,我们需要agent\optional-plugins\apm-spring-cloud-gateway-2.1.x-plugin-8.5.0.jar这个jar包拷贝到agent\plugins目录下,然后重启我们的Gateway微服务

基于Mysql持久化

SkyWalking默认采用h2的方式,也就是内存来存储监控数据,这样的缺点就是:运行一段时间后很占用内存资源;服务重启后数据丢失;
现在修改为mysql数据库的方式来存储

  1. 修改config/application.yml文件,使用mysql作为持久化存储的仓库
    在这里插入图片描述
  2. 修改mysql连接信息
    在这里插入图片描述
  3. 根据上图中的连接信息创建swtest数据库,然后在SkyWalking服务启动的时候会自动创建数据表。
  4. SkyWalking默认情况下它没有mysql连接的jar包,我们需要在我们的项目中找到mysql连接的jar包,放在oap-libs目录下
    在这里插入图片描述
  5. 启动SkyWalking后就会发现,给我们刚刚创建的swtest数据库自动创建了很多数据表
    在这里插入图片描述

skywalking日志追踪

  1. 引入依赖
		<dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-trace</artifactId>
            <version>8.3.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>apm-toolkit-log4j-2.x</artifactId>
            <version>8.3.0</version>
        </dependency>
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

  1. 配置Log4j2
    在日志格式中添加 [%traceId] 即可
<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符 %logger{36} 表示 Logger 名字最长36个字符-->


        <!--1.文件输出格式-->
        <property name="file_pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%traceId] [%thread] [%-5level]  %msg %l%n" />
        <!--2.控制台显示日志格式-->
        <!--[%traceId]:追踪id-->
        <!--[%sw_ctx]:打印为[$serviceName,$instanceName,$traceId,$traceSegmentId,$spanId]:服务名,实例名,追踪id,追踪片段id,跨度id-->
        <property name="console_pattern" value="%red{%d{yyyy-MM-dd HH:mm:ss}} [%traceId] %green{[%thread]} %magenta{[%-5level]} %cyan{%msg} %l%n"/>
        <!--3.skyWalking收集格式-->
        <property name="skyWalking_pattern" value="%msg %l%n"/>

        <!-- 定义日志存储的路径 -->
        <property name="FILE_PATH" value="./log/spring-skywalking/" />
        <property name="FILE_NAME" value="spring-skywalking" />
    </Properties>

    <appenders>

        <GRPCLogClientAppender name="skyWalking_log">
            <PatternLayout  pattern="${skyWalking_pattern}"/>
        </GRPCLogClientAppender>

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

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
        <File name="file_log" fileName="${FILE_PATH}/test.log" append="true">
            <PatternLayout pattern="${file_pattern}"/>
        </File>

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log" filePattern="${FILE_PATH}/${FILE_NAME}-info-%d{yyyy-MM-dd}-%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${file_pattern}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log" filePattern="${FILE_PATH}/${FILE_NAME}-warn-%d{yyyy-MM-dd}-%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${file_pattern}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log" filePattern="${FILE_PATH}/${FILE_NAME}-error-%d{yyyy-MM-dd}-%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${file_pattern}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
            <DefaultRolloverStrategy max="15"/>
        </RollingFile>

    </appenders>

    <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
    <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>

        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </logger>
        <!--监控系统信息-->
        <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
        <Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>

        <root level="info">
            <appender-ref ref="skyWalking_log"/>
            <appender-ref ref="Console"/>
            <appender-ref ref="file_log"/>
<!--            <appender-ref ref="RollingFileInfo"/>-->
<!--            <appender-ref ref="RollingFileWarn"/>-->
<!--            <appender-ref ref="RollingFileError"/>-->
        </root>
    </loggers>

</configuration>


资料

分布式链路追踪—traceId生成与使用(MDC)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值