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

内容抄书而来,感谢《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 后端 endpoint
logging.file_nameSW_LOGGING_FILE_NAMEskywalking-api.log日志文件名
logging.levelSW_LOGGING_LEVELDEBUG日志级别
logging.dirSW_LOGGING_DIR“”日志目录
logging.max_file_sizeSW_LOGGING_MAX_FILE_SIZE314572800日志文件大小,默认300M
logging.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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值