skywalking的快速集成

1. 安装

(1)下载

这里要下载两个包,一个是SkyWalking APM,它提供后端服务和UI服务,另一个是Java Agent,用于在应用程序中集成。
① 在官网下载页面中找到SkyWalking APM,点击Distribution选择一个版本下载。这个包是skywalking的基础服务,包括后端服务和UI服务。
② 在官网下载页面找到Java Agent,点击Distribution选择一个版本下载。这个包是java应用的探针,用来在集成到应用程序中采集日志用的。

(2)目录说明

  1. SkyWalking APM
    SkyWalking APM解压后得到apache-skywalking-apm-bin文件,重点关注以下3个目录:

① bin目录下是启动脚本,一般都用startup脚本一键启动:

② config目录下是配置文件,主要关注一下application.yml文件,里面配置存储策略和服务端口、查询策略等等。

  1. Java Agent
    Java Agent解压后得到skywalking-agent文件:

    ① skywalking-agent.jar:探针包,使用了java agent技术,可以拦截java应用的执行。
    ② plugins目录:这个目录下主要放日志采集的插件,并且支持自定义插件。skywalking官方已经开发了大部分框架的插件,例如springmvc、dubbo等等。这个设计给skywalking赋予了极强的扩展性。
    ③ optional-plugins:备用插件库,这里的插件在执行时不会被加载,只有放在plugins目录下的插件才会被加载。这个目录相当于仓库,需要启用什么功能的日志采集,就把对应的插件拷贝到plugins目录。同理,如果想要不采集某种日志,就把对应的插件从plugins目录中删掉即可。
    ④ config目录:这里是探针和插件的配置。比如说配置应用名称(会体现在UI中)。

(3)配置

  • SkyWalking APM配置日志存储的仓库

这里介绍apache-skywalking-apm-bin/config/application.yml的配置,首先要搭建一个es服务(当然也可以选择其他存储引擎,比如mysql)。

storage: 
  # 配置存储方式为es
  selector: ${SW_STORAGE:elasticsearch}
  elasticsearch:
    # 配置es存储地址
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200}
core:
  selector: ${SW_CORE:default}
  default:
    # 后端服务暴露的端口
    gRPCPort: ${SW_CORE_GRPC_PORT:11800}

(4)启动

启动前要保证es服务是可用的。

直接执行sh startup.sh启动后端服务和UI服务。启动后,后端服务默认暴露的通信端口是11800,这个端口在agent中会用到。UI服务默认暴露的端口是8080,可以在apache-skywalking-apm-bin/webapp/webapp.yml中修改。UI服务启动后如下:

2. 普通项目集成

这里以SpringBoot项目为例。要将skywalking-agent放在应用程序运行的服务器上,这样才能正常地使用探针功能。

(1)探针配置

配置文件:skywalking-agent/config/agent.config

# 应用名称
agent.service_name=${SW_AGENT_NAME:itp-service-device}
# 命名空间,可以是项目的名称
agent.namespace=${SW_AGENT_NAMESPACE:itp}
# 后端地址
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

(2)集成探针

  • java agent
    这里简单的介绍下,java agent是java提供的探针技术,它可以拦截jar应用程序的执行,在应用程序执行前或执行后,执行一段探针代码,类似于代理。java agent集成的方式为:
java -javaagent:/path/agent.jar -jar app.jar
  • skywalking-agent
    配置应用程序的启动变量:
-javaagent:D:\path\skywalking-agent-8.8.0\skywalking-agent.jar -Dskywalking.agent.service_name=app
  • 环境变量
    探针配置文件agent.config中的配置项支持在环境变量中配置,必须要以skywalking.开头,后面跟配置项,如:
    -Dskywalking.agent.service_name=app

(3)启动应用程序

启动应用程序后,探针会与skywalking后端服务连接,将应用程序注册进去。如下图:

3. Docker项目集成

要将skywalking-agent和应用程序一起打成镜像。

(1)Dockerfile文件

# jdk基础镜像
FROM registry.xxx.com/xxx/oraclejdk8:1.0.0

# 添加探针包
ADD skywalking-agent /usr/skywalking/agent
# 添加应用程序jar包
ADD app.jar app.jar

# 暴露端口
EXPOSE 8080
# 启动命令
ENTRYPOINT [ "sh", "-c", "java -javaagent:/usr/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=app -jar /app.jar" ]

(2)构建镜像

此命令要在Dockerfile所在目录下执行,如果不在该目录,需要将Dockerfile路径填入。

docker built -t app:1.0 ./

(3)启动镜像

docker run --name app -p 8080:8080 -d app:1.0

(4)实际应用的建议

  1. 建议将skywalking-agent放在构建服务器上,在每次构建应用程序的镜像时,将其打入镜像。如果后续要修改探针的配置,直接在构建服务器上修改即可,无需改动Dockerfile文件。
  2. agent.namespacecollector.backend_service建议配置在agent.config文件中,agent.service_name建议配置在启动变量中。

4. UI服务的使用

在浏览器中访问127.0.0.1:8080,打开UI界面。

skywalking提供了丰富的监控项,这里主要关注仪盘表、追踪、告警。

(1)仪盘表

仪表盘中会展示对所有服务和端点统计分析的结果,比如这里会展示出服务平均响应时间的列表 。

这里对几个概念做下说明:
① 服务(Service):指某一类具备相同功能的应用,比如说app服务,无论部署多少个节点,它们都属于app这个服务。
② 端点(Endpoint):指服务中的某一个方法或者接口,提供具体某个能力的功能点。
③ 不健康服务(Un-Health Service):这里会根据服务中每个端点的响应时间和响应失败计算出一个健康值,1代表健康的服务,健康值越小越不健康。

(2)追踪

这里可以看到所有服务的调用链,skywalking会为每一个调用链生成一个唯一ID,用于追踪。调用链中可以采集端点的一些核心信息,并用于查询。

这里对几个概念做下说明:
① 实例:服务部署的某一个具体的节点。
② 追踪ID:这是skywalking生成的链路ID,将具体某一个链路串联起来。

(3)告警

这里展示系统中一些异常数据,比如某个服务在一定时间内响应时间过长,会在这里展示出来。具体的告警规则可以自行配置,这里不做详细介绍。

5. 自定义追踪条件

skywalking默认采集的链路日志可能不满足我们的业务查询需要,因此一般情况都要根据业务自定义追踪条件。

(1)配置业务追踪字段

apache-skywalking-apm-bin/config/application.yml中可以自定义业务追踪字段。

配置后要将skywalking后端服务重启。

core:
  selector: ${SW_CORE:default}
  default:
    # 链路追踪标签配置,以逗号分隔。这里我们加了一个userId业务字段,前面是它默认的配置
    searchableTracesTags: ${SW_SEARCHABLE_TAG_KEYS:http.method,http.status_code,rpc.status_code,db.type,db.instance,mq.queue,mq.topic,mq.broker,userId}

(2)使用配置的字段查询

UI服务的追踪页,在标记中填入自定义的条件,即可查询。

  • 查询方式:

在标记中填入业务字段=条件值,如userId=xxxxx。这里支持填入多个条件。

  • 前提:

当然这里要将业务字段作为独立的字段记录下来,才能在这里查询到,如下是记录的字段(后面会介绍如何记录自定义字段):

posted @ 2023-03-31 10:15  是秃子迟早会发光的  阅读(175)  评论(0编辑  收藏  举报