成都网站建设设计

将想法与焦点和您一起共享

搭建SkyWalking服务(ForElasticSearch7)

[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:
搭建 SkyWalking 服务(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]#

正常启动成功后,使用浏览器访问主页如下:
搭建 SkyWalking 服务(For ElasticSearch 7)

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

使用

接下为项目集成java agent探针,看看skywalking是否能正常监控到数据。首先创建两个简单的Spring Cloud项目,分别是consumer和producer:
搭建 SkyWalking 服务(For ElasticSearch 7)

这两个项目中均包含基础的组件依赖: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包,所以得到之前的下载页面中下载对应平台的压缩包:
搭建 SkyWalking 服务(For ElasticSearch 7)

解压后的目录文件内容如下:
搭建 SkyWalking 服务(For ElasticSearch 7)

我们主要是使用到agent目录下的jar包:
搭建 SkyWalking 服务(For ElasticSearch 7)

为了方便起见,这里就不单独为每个服务拷贝一个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启动参数。如下:
搭建 SkyWalking 服务(For ElasticSearch 7)

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

分别启动两个项目,然后访问/consumer接口:
搭建 SkyWalking 服务(For ElasticSearch 7)

此时,到SkyWalking的监控页面上,进入“追踪”页面,并选择正确的时间范围,就可以看到该接口的链路追踪信息:
搭建 SkyWalking 服务(For ElasticSearch 7)


其他功能

服务拓扑图:
搭建 SkyWalking 服务(For ElasticSearch 7)

服务监控:
搭建 SkyWalking 服务(For ElasticSearch 7)

服务实例监控:
搭建 SkyWalking 服务(For ElasticSearch 7)

端点监控:
搭建 SkyWalking 服务(For ElasticSearch 7)

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


当前题目:搭建SkyWalking服务(ForElasticSearch7)
网页URL:http://chengdu.cdxwcx.cn/article/jehdeo.html