Skywalking抄书笔记(1)- 配置与日志

    科技2022-07-21  178

    内容抄书而来,感谢《Apache SkyWalking实战》书籍作者,刚开始记录,之后会加上感悟与code,最后只会留下感悟与code:

    知道的都说了,随便转,随便喷,想要的你们带走,别打扰我自言自语。

    一、配置覆盖

    Skywalking(下文有时简写为SW),提供了agent.config配置文件,做为全局的配置;但是还是可以选择一些方式,覆盖binary文件中的配置信息。

    配置优先级如下:

    探针参数 > 系统属性 > 系统环境变量 > 配置文件


    探针参数:

    格式:

    -javaagent:/path/to/skywalking-agent.jar=[option1]=[value1],[option2]=[value2]

    应用场景:

    现实的场景里,我们会在各个环境中,比如生产环境,修改特定环境的配置,比如,开发人员会在开发环境设置好大部分的生产配置,而有些开发人员无法接触到的特殊生产信息,运维角色的管理员,有必要修改,比如生产部署机器的端口覆盖。

    系统属性

    格式:

    skywalking + agent.config中属性名

    应用场景:

    类似于探针属性,更接近开发人员的习惯,特别指定某一属性。

    例子:

    -Dskywalking.agent.service_name=sw-demo

    系统环境变量

    格式:

    SW有很多SW开头的系统属性配置,如下表:

    应用场景:

    初始化一个环境,我们想配置一个环境,并提供一定的默认值,可以先用统一的环境初始化脚本,对环境初始化一遍。

    属性环境变量默认值说明agent.namespaceSW_AGENT_NAMESPACEdefault-namespace命名空间agent.service_nameSW_AGENT_NAME 服务名agent.sample_n_per_3_secsSW_AGENT_SAMPLE-1每3秒采样数量,负数表示尽可能多的采集数据agent.authenticationSW_AGENT_AUTHENTICATION 认证信息,需结合oap application.yaml中配置agent.span_limit_per_segmentSW_AGENT_SPAN_LIMIT300单个segment中最大spans数,sw通过这项配置预估应用内存消耗agent.ignore_suffixSW_AGENT_IGNORE_SUFFIX 需要忽略的采样数据后缀,如设置为:”.jpg,.js,.css”agent.is_open_debugging_classSW_AGENT_OPEN_DEBUGtrue启用后sw将保存instrumented classes 到 /debugging 目录,sw团队可能会申请使用这个文件来解决问题agent.operation_name_thresholdSW_AGENT_OPERATION_NAME_THRESHOLD500operationName的最大长度collector.backend_serviceSW_AGENT_COLLECTOR_BACKEND_SERVICES127.0.0.1:11800OAP 后端 endpointlogging.file_nameSW_LOGGING_FILE_NAMEskywalking-api.log日志文件名logging.levelSW_LOGGING_LEVELDEBUG日志级别logging.dirSW_LOGGING_DIR“”日志目录logging.max_file_sizeSW_LOGGING_MAX_FILE_SIZE314572800日志文件大小,默认300Mlogging.max_history_filesSW_LOGGING_MAX_HISTORY_FILES-1最大历史日志文件数量plugin.mysql.trace_sql_parametersSW_MYSQL_TRACE_SQL_PARAMETERSfalse

     

    二、自定义配置文件

    如果同一个skywalking安装实例,监控多个不同应用时,可能需要不同配置文件,我们就用上面提到的系统属性来指定特定配置文件:

    -Dskywalking_cofig=/path/to/cust_agent.config

    指定agent的配置文件,优先级会高于默认的配置文件(agent.config)

     

    三、客户端采样

    为了固定设置对应用增加的负载,我们可以设置单位时间内采样的数量,这时候需要用到参数agent.sample_n_per_3_secs。代表每三秒采样的次数。

    例子:

    agent.sample_n_per_3_secs=400,代表每三秒采样400次。

     

    四、TLS

    agent端采集的数据,可能会有敏感信息,所以需要加密传输到采集器中,skywalking会通过gRPC TLS来保证通信安全。其鉴权模式只支持no mutual auth。

    开启方法:

    通过SW自带脚本生成ca.crt、server.crt和server.pem

    开启并配置TLS:

    配置分agent端和服务端:

    agent端配置:

    讲ca.crt放在agent目录下的/ca目录中,ca目录需自己创建;当agent检测到/ca/ca.crt后,会自动开启TLS。

    服务端配置:

    将application.yml/core/default的TLS配置设置为如下:

    gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:true} gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:"/path/to/server.prem"} gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:"/path/to/server.crt"} gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:"/path/to/ca.crt"}

    五、命名空间

    收集器以及监控阈值可能根据不同公司不同,所以需要不同的命名空间。

    设置配置agent.skywaling=命名空间。

    修改后会对header有影响,默认的header的key位sw6,修改命名空间后,header变为:namespace+ -sw6

     

    六、Application Tookit API

    如何在日志中打印Trace上下文:

    在SW子工程apm-application-toolkit里有如下模块:

     apm-toolkit-log4j-1.x         apm-toolkit-log4j-2.x         apm-toolkit-logback-1.x         apm-toolkit-meter         apm-toolkit-micrometer-registry         apm-toolkit-opentracing apm-toolkit-trace

    前三个就是目前支持的日志模块。

    友人提醒我是通过Slf4j MDC机制实现的,特别去看了下是怎么回事,果真有点意思。咱们就挑logback开始聊:

    如果要在应用日志中打印出trace id,要走几步:

    第一:引入依赖

    <dependency> <groupId>org.apache.skywalking</groupId> <artifactId>apm-toolkit-logback-1.x</artifactId> <version>8.0.1</version> </dependency>

    第二:

    修改logback.xml,指定layout的class位SW提供的layout类型,并且在模板中增加tid的锚点。

    <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>%d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] .....</Pattern>

            </layout>

        </encoder>

    </appender>

    首先这个layout类代码并不多,我们贴出来分析一下,SW用LogbackMDCPatternConverter类覆写了logback里的MDCConverter,成功替换了自己的实现:

    看看logback的PatternLayout里熟悉配方以及MDC的模板埋点:

     

    SW是如何覆写MDCConverter,看来还是有很多关子(TODO:感觉要绕到logback中):

     

    其实我最后还有一个疑问留作TODO项,之后来解析:

    SW提供了两个layout类型:org.apache.skywalking.apm.toolkit.log.logback.v1.x.mdc.TraceIdMDCPatternLogbackLayout

    还有一个是org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout

    看来一定要深入了解下logback的源码,把这个框架摸清楚。

    如何通过注解或SkyWalking的本地API读取/补充Trace上下文

    trace的跨线程传递

    如何使用OpeningTracing API

     

    先抄书抄到这,之后继续。

    Processed: 0.013, SQL: 8