千家信息网

搭建 SkyWalking 服务(For ElasticSearch 7)

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,[TOC]搭建 SkyWalking 服务(For ElasticSearch 7)关于SkyWalking的基础使用参考:基于 SkyWalking 实现服务链路追踪官方文档:SkyWalking
千家信息网最后更新 2025年01月22日搭建 SkyWalking 服务(For ElasticSearch 7)

[TOC]

搭建 SkyWalking 服务(For ElasticSearch 7)

关于SkyWalking的基础使用参考:

  • 基于 SkyWalking 实现服务链路追踪

官方文档:

  • SkyWalking 文档中文版(社区提供)
  • Apache 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 88Kdrwxr-xr-x 2 root root   53 Dec 28 18:22 webapp-rw-rw-r-- 1 1001 1002 2.0K Dec 24 14:10 README.txtdrwxrwxr-x 2 1001 1002  12K Dec 24 14:28 oap-libs-rwxrwxr-x 1 1001 1002  32K Dec 24 14:10 NOTICEdrwxrwxr-x 3 1001 1002 4.0K Dec 28 18:22 licenses-rwxrwxr-x 1 1001 1002  29K Dec 24 14:10 LICENSEdrwxr-xr-x 2 root root  221 Dec 28 18:22 configdrwxr-xr-x 2 root root  241 Dec 28 18:22 bindrwxrwxr-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.shSkyWalking 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 --permanentsuccess[root@localhost /usr/local/skywalking]# firewall-cmd --reloadsuccess[root@localhost /usr/local/skywalking]#

若希望允许远程传输,则还需要开放11800(gRPC)和12800(rest)端口,远程agent将通过该端口传输收集的数据:

[root@localhost /usr/local/skywalking]# firewall-cmd --zone=public --add-port=11800/tcp --permanentsuccess[root@localhost /usr/local/skywalking]# firewall-cmd --zone=public --add-port=12800/tcp --permanentsuccess[root@localhost /usr/local/skywalking]# firewall-cmd --reloadsuccess[root@localhost /usr/local/skywalking]#

正常启动成功后,使用浏览器访问主页如下:

  • Tips:如果skywalking是初次连接elasticsearch服务,启动会比较慢,因为skywalking需要向es服务创建很多的index。所以在未创建完成之前,访问这个页面会是空白的。此时可以通过查看日志来判断启动是否完成,日志路径: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启动参数。如下:

  • producer服务也是按照上图一样的配置,改一下服务名称即可

分别启动两个项目,然后访问/consumer接口:

此时,到SkyWalking的监控页面上,进入"追踪"页面,并选择正确的时间范围,就可以看到该接口的链路追踪信息:


其他功能

服务拓扑图:

服务监控:

服务实例监控:

端点监控:

如果项目正确集成agent成功后,却依旧发现监控页面上没有数据,日志里又没有错误信息的话,很有可能是时间范围没有选择正确:

0