skywalking是一个优秀的国产开源框架,2015年由个人吴晟(华为开发者)开源 , 2017年加入Apache孵化器。短短两年就被Apache收入麾下,实力可见一斑。 skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功能较完善。
官网:https://skywalking.apache.org/
Skywalking架构
SkyWalking 逻辑上分为四部分: 探针, 平台后端, 存储和用户界面。
docker-compose使用方法请自行学习,这里不做赘述。docker-compose.yml文件如下:
version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6 container_name: elasticsearch restart: always ports: - 9200:9200 - 9300:9300 environment: - discovery.type=single-node - TZ=Asia/Shanghai - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" volumes: - /skywalking/elasticsearch/data:/usr/share/elasticsearch/data ulimits: memlock: soft: -1 hard: -1 oap: image: docker.io/apache/skywalking-oap-server:9.4.0 container_name: oap depends_on: - elasticsearch restart: always ports: - 11800:11800 - 12800:12800 environment: SW_CORE_RECORD_DATA_TTL: 15 SW_CORE_METRICS_DATA_TTL: 15 SW_STORAGE: elasticsearch SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200 SW_ENABLE_UPDATE_UI_TEMPLATE: true TZ: Asia/Shanghai JAVA_OPTS: "-Xms2048m -Xmx2048m" ui: image: docker.io/apache/skywalking-ui:9.4.0 container_name: ui depends_on: - oap links: - oap restart: always ports: - 8080:8080 environment: SW_OAP_ADDRESS: http://oap:12800 SW_ZIPKIN_ADDRESS: http://oap:9412
正常执行之后,大概需要1分钟左右的时间等待,在浏览器端输入 http://IP:8080,即可看到如下的界面,刚启动没有数据的(不需要登录)。整个过程没有坑点,一次就好。
UI的使用在后文中介绍。
准备一个简单的springboot web工程。
注意:agent版本和oap版本需要适配,版本不适配可能会出现页面无法访问、agent上报不到页面等问题。
下载地址: https://skywalking.apache.org/downloads/
作者用的skywalking版本为9.4.0,下载v8.16.0版本的client没有问题,亲测可用。
代码结构如下图所示:
需要配置skywalking-agent文件夹下,config/agent.config配置文件,列出最关键的两个配置,其他配置大家可以自行摸索。
agent.service_name=${SW_AGENT_NAME:HS} collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.54.53:11800}
在skywalking的UI端有一个日志的模块,用于收集客户端的日志,默认是没有数据的,那么需要如何将日志数据传输到skywalking中呢?
skywalking支持如下方式的的日志接入方式
下来使用springboot默认的logback为例子介绍一下如何配置,
org.apache.skywalking apm-toolkit-logback-1.x 8.12.0 org.apache.skywalking apm-toolkit-trace 8.12.0
新建一个logback-spring.xml放在resource目录下,配置如下:
${CONSOLE_LOG_PATTERN} ${log.path}/debug.log ${log.path}/%d{yyyy-MM, aux}/debug.%d{yyyy-MM-dd}.%i.log.gz 50MB 30 %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n ${log.path}/error.log ${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz 50MB 30 %date [%thread] %-5level [%logger{50}] %file:%line - %msg%n ERROR %d{yyyy-MM-dd HH:mm:ss.SSS} [%tid] [%thread] %-5level %logger{36} -%msg%n %d{yyyy-MM-dd HH:mm:ss.SSS} [%X{tid}] [%thread] %-5level %logger{36} -%msg%n
@RequestMapping(value = "/test", method = RequestMethod.GET) @ApiOperation(value = "测试") public ModelMap test(){ ModelMap modelMap = new ModelMap(); modelMap.addAttribute("code", "success"); log.info(modelMap.toString()); return modelMap; }
配置VM options
javaagent配置的参数即skywalking-agent的绝对路径。
-javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar
启动工程
会发现Skywalking里已经有了日志,与idea控制台的日志一致。
与idea一样,启动时配置VM options即可
java -javaagent:D:\code\test\HS\src\main\skywalking-agent\skywalking-agent.jar -Dskywalking.agent.service_name=HS -Dskywalking.collector.backend_service=192.168.54.53:11800 -jar app.jar
调用web接口
skywalking上手与springboot集成过程中,基本没遇到啥坑点,整个过程比较顺利,不亏是Apache的顶级项目。过程记录下来,希望能帮到各位,下一篇主要介绍skywalking与Apisix的集成,敬请期待!
打完手工。