[TOC]
关于SkyWalking的基础使用参考:
官方文档:
首先我们需要获取到SkyWalking的下载地址,官方下载地址如下:
http://skywalking.apache.org/downloads/
这里我选择当前最新的6.6.0版本的二进制包,由于一会需要对接的es服务版本为7.x,所以这里得选择for ElasticSearch 7:
复制下载地址到服务器上进行下载并解压,具体步骤如下:
[root@localhost ~]# cd /usr/local/src [root@localhost /usr/local/src]# wget http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz [root@localhost /usr/local/src]# mkdir ../skywalking && tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz -C ../skywalking --strip-components 1 [root@localhost /usr/local/src]# cd ../skywalking/ [root@localhost /usr/local/skywalking]# ll -rh # 解压后的目录文件如下 total 88K drwxr-xr-x 2 root root 53 Dec 28 18:22 webapp -rw-rw-r-- 1 1001 1002 2.0K Dec 24 14:10 README.txt drwxrwxr-x 2 1001 1002 12K Dec 24 14:28 oap-libs -rwxrwxr-x 1 1001 1002 32K Dec 24 14:10 NOTICE drwxrwxr-x 3 1001 1002 4.0K Dec 28 18:22 licenses -rwxrwxr-x 1 1001 1002 29K Dec 24 14:10 LICENSE drwxr-xr-x 2 root root 221 Dec 28 18:22 config drwxr-xr-x 2 root root 241 Dec 28 18:22 bin drwxrwxr-x 8 1001 1002 143 Dec 24 14:21 agent [root@localhost /usr/local/skywalking]#
SkyWalking 的组成在逻辑上分为四部分:探针、平台后端、存储和用户界面。其中平台后端服务是用于收集agent上传的监控数据,其核心配置文件位于:config/application.yml
。
如果没有任何要求,基本上是无需修改配置就可以直接启动 SkyWalking 服务。但通常线上都对监控数据有持久化需求,而SkyWalking 默认使用的是H2这种内存数据库,不具有持久存储的特性。所以我们需要修改其存储配置,接入elasticsearch服务作为存储组件。
首先将默认的H2数据库配置给注释掉:
[root@ip-236-048 skywalking]# vim config/application.yml # h3: # driver: ${SW_STORAGE_H2_DRIVER:org.h3.jdbcx.JdbcDataSource} # url: ${SW_STORAGE_H2_URL:jdbc:h3:mem:skywalking-oap-db} # user: ${SW_STORAGE_H2_USER:sa} # metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
然后将elasticsearch7配置的注释解开,并修改如下:
storage: elasticsearch7: # nameSpace: ${SW_NAMESPACE:""} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.3.10:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} # trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"} # trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""} # user: ${SW_ES_USER:""} # password: ${SW_ES_PASSWORD:""} indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2} indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} # Those data TTL settings will override the same settings in core module. recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000} metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000} segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200} advanced: ${SW_STORAGE_ES_ADVANCED:""}
另外一个常见需求就是修改监听的ip和端口号,skywalking默认12800为rest api通信端口,默认11800为gRPC api通信端口。这些都可以在配置文件中进行修改,而我这里保持默认:
core: default: # Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate # Receiver: Receive agent data, Level 1 aggregate # Aggregator: Level 2 aggregate role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator restHost: ${SW_CORE_REST_HOST:0.0.0.0} restPort: ${SW_CORE_REST_PORT:12800} restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/} gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0} gRPCPort: ${SW_CORE_GRPC_PORT:11800}
完成以上配置后,运行bin
目录下的startup.sh
脚本即可启动skywalking服务:
[root@localhost /usr/local/skywalking]# bin/startup.sh SkyWalking OAP started successfully! SkyWalking Web Application started successfully! [root@localhost /usr/local/skywalking]#
SkyWalking控制台服务默认监听8080端口,若有防火墙需要开放该端口:
[root@localhost /usr/local/skywalking]# firewall-cmd --zone=public --add-port=8080/tcp --permanent success [root@localhost /usr/local/skywalking]# firewall-cmd --reload success [root@localhost /usr/local/skywalking]#
若希望允许远程传输,则还需要开放11800(gRPC)和12800(rest)端口,远程agent将通过该端口传输收集的数据:
[root@localhost /usr/local/skywalking]# firewall-cmd --zone=public --add-port=11800/tcp --permanent success [root@localhost /usr/local/skywalking]# firewall-cmd --zone=public --add-port=12800/tcp --permanent success [root@localhost /usr/local/skywalking]# firewall-cmd --reload success [root@localhost /usr/local/skywalking]#
正常启动成功后,使用浏览器访问主页如下:
logs/skywalking-oap-server.log
接下为项目集成java agent探针,看看skywalking是否能正常监控到数据。首先创建两个简单的Spring Cloud项目,分别是consumer和producer:
这两个项目中均包含基础的组件依赖:nacos-discovery、openfeign及web。因为SkyWalking是通过Java agent这种语言探针的方式进行数据的收集和上传,所以不需要像zipkin那样添加额外的依赖和配置。
consumer将调用producer提供的接口,以达到后续在SkyWalking上展示一个简单的调用链路效果。故在producer中编写一个接口,代码如下:
@Slf4j @RestController @RequestMapping("/producer") public class ProducerController { @GetMapping public String producer() { log.info("received a request"); return "this message from producer"; } }
而consumer也有一个接口,该接口内则是调用了producer的接口。代码如下:
@Slf4j @RestController @RequiredArgsConstructor @RequestMapping("/consumer") public class ConsumerController { private final ProducerClient producerClient; @GetMapping public String consumer() { log.info("consumer something"); // 通过feign调用 String result = producerClient.producer(); return "consumer: " + result; } }
ProducerClient
代码如下:
@FeignClient("producer") public interface ProducerClient { @GetMapping("/producer") String producer(); }
由于本地调试需要使用到SkyWalking提供的Java Agent jar包,所以得到之前的下载页面中下载对应平台的压缩包:
解压后的目录文件内容如下:
我们主要是使用到agent目录下的jar包:
为了方便起见,这里就不单独为每个服务拷贝一个agent目录了。通过添加JVM启动参数的方式来覆写配置项:
# 指定java agent的jar包路径 -javaagent:E:\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar # 指定skywalking agent的服务名称,通常对应项目的服务名称 -Dskywalking.agent.service_name=consumer # 指定skywalking后端平台收集服务的连接ip及端口号 -Dskywalking.collector.backend_service=192.168.10.6:11800
完成以上步骤后,在IDEA中引导类的配置界面里设置JVM启动参数。如下:
分别启动两个项目,然后访问/consumer
接口:
此时,到SkyWalking的监控页面上,进入“追踪”页面,并选择正确的时间范围,就可以看到该接口的链路追踪信息:
服务拓扑图:
服务监控:
服务实例监控:
端点监控:
如果项目正确集成agent成功后,却依旧发现监控页面上没有数据,日志里又没有错误信息的话,很有可能是时间范围没有选择正确:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。