SkyWalking是分布式的应用性能管理APM(Application Performance Monitoring)工具,也被称为分布式追踪系统。本文介绍使用阿里云Elasticsearch 7.4版本的实例与SkyWalking,实现对实例的全链路监控。
背景信息
SkyWalking具有以下特性:
全自动探针监控,不需要修改应用程序代码。
手动探针监控,提供了支持OpenTracing标准的SDK。覆盖范围扩大到OpenTracing-Java支持的组件。
说明OpenTracing支持的组件请参见OpenTracing Registry。
自动监控和手动监控可以同时使用,使用手动监控弥补自动监控不支持的组件,甚至私有化组件。
纯Java后端分析程序,提供RESTful服务,可为其他语言探针提供分析能力。
高性能纯流式分析。
SkyWalking的架构图如下。
SkyWalking的核心在于数据分析和度量结果的存储平台部分,通过HTTP或gRPC方式向SkyWalking Collector提交分析和度量数据。SkyWalking Collector对数据进行分析和聚合,存储到Elasticsearch、H2、MySQL、TiDB等其一即可,最后通过SkyWalking UI的可视化界面查看分析结果。Skywalking支持从多个来源和多种格式收集数据,支持多种语言的Skywalking Agent 、Zipkin v1/v2 、Istio勘测、Envoy度量等数据格式。
本文介绍SkyWalking与阿里云Elasticsearch 7.4版本的集成配置,您也可以通过Skywalking客户端上报Java应用数据,详细信息,请参见通过SkyWalking上报Java应用数据。SkyWalking支持的中间件和组件,请参见SkyWalking官方文档。
前提条件
您已完成以下操作:
创建阿里云Elasticsearch实例,本文使用7.4.0版本。
具体操作步骤,请参见创建阿里云Elasticsearch实例。
准备一台Linux服务器,并在服务器中安装JDK,要求JDK版本为1.8.0及以上版本。
建议您使用阿里云ECS服务器。购买ECS服务器的方法,请参见步骤一:创建ECS实例。
说明安装JDK的方式,请参见步骤三:安装JDK。如果未正确安装JDK,启动SkyWalking后查看日志,可能会显示Java not found或者java-xxx: No such file or directory报错。
确保Linux服务器的8080、10800、11800、12800端口不被占用。
关闭Linux服务器的防火墙及SELinux。
操作流程
步骤一:下载并安装SkyWalking
在Linux服务器中,下载SkyWalking。
本文使用的是Elasticsearch 7.4.0版本,选择Binary Distribution for ElasticSearch 7二进制包。下载命令如下。
wget https://archive.apache.org/dist/skywalking/7.0.0/apache-skywalking-apm-es7-7.0.0.tar.gz
解压。
tar -zxvf apache-skywalking-apm-es7-7.0.0.tar.gz
查看解压后的文件。
ls apache-skywalking-apm-bin-es7/
返回结果如下。
total 92 agent bin config LICENSE licenses NOTICE oap-libs README.txt tools webapp
步骤二:配置SkyWalking与Elasticsearch连通
在config目录下,打开application.yml文件。
cd apache-skywalking-apm-bin-es7/config/ vi application.yml
定位到
storage
部分,将默认的H2存储库改为elasticsearch7,并按照以下说明配置。storage: selector: ${SW_STORAGE:elasticsearch7} elasticsearch7: nameSpace: ${SW_NAMESPACE:"skywalking-index"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es-cn-4591kzdzk000i****.public.elasticsearch.aliyuncs.com: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:""} enablePackedDownsampling: ${SW_STORAGE_ENABLE_PACKED_DOWNSAMPLING:true} # Hour and Day metrics will be merged into minute index. dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index. user: ${SW_ES_USER:"elastic"} password: ${SW_ES_PASSWORD:"es_password"}
说明SkyWalking服务默认使用H2存储,不具有持久存储的特性,所以需要将存储组件修改为elasticsearch。
参数
说明
selector
存储选择器。本文设置为elasticsearch7。
nameSpace
命名空间。Elasticsearch实例中,所有索引的命名会使用此参数值作为前缀。
clusterNodes
指定Elasticsearch实例的访问地址。由于实例与SkyWalking不在同一专有网络VPC(Virtual Private Cloud)下,因此要使用公网访问地址,获取方式请参见查看实例的基本信息。
user
Elasticsearch实例的访问用户名,默认为elastic。
password
对应用户的密码。elastic用户的密码在创建实例时指定,如果忘记可重置。重置密码的注意事项和操作步骤,请参见重置实例访问密码。
重要配置中仅指定用户名和密码即可,请注释trustStorePath和trustStorePass,否则会报错NoSuchFileException:../es_keystore.jks。
可选:修改监听的IP地址或端口号。
SkyWalking默认使用12800作为Rest API通信端口,11800为gRPC API端口,可在application.yml文件的core中修改,本文使用默认配置。
core: selector: ${SW_CORE:default} 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}
可选:在webapp目录下,修改webapp.yml配置。
本文使用默认配置,您也可以根据具体需求修改。
server: port: 8080 collector: path: /graphql ribbon: ReadTimeout: 10000 # Point to all backend's restHost:restPort, split by , listOfServers: 127.0.0.1:12800
步骤三:验证结果
在Linux服务器中,启动SkyWalking。
cd ../bin ./startup.sh
重要在启动SkyWalking前,请确保Elasticsearch实例为正常状态。
执行
./startup.sh
命令,会同时启动Collector和UI。
启动成功后,返回如下结果。
SkyWalking OAP started successfully! SkyWalking Web Application started successfully!
在浏览器中,访问http://<Linux服务器的IP地址>:8080/。
说明初次使用SkyWalking连接Elasticsearch服务,启动会比较慢。因为SkyWalking需要向Elasticsearch服务创建大量的index,所以在未创建完成之前,访问这个页面会显示空白。此时您可以通过查看日志来判断启动是否完成,日志路径为
<SkyWalking的安装路径>logs/skywalking-oap-server.log
。参见登录Kibana控制台,登录对应Elasticsearch实例的Kibana控制台,执行
GET _cat/indices?v
命令查看索引数据。根据返回结果,可以看到Elasticsearch实例中包含了大量以
skywalking-index
开头的索引。