Ver:6.2。

概述

什么是SkyWorking

SkyWalking是观察性分析平台和应用性能管理系统。

提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
image

SkyWalking 的核心是数据分析和度量结果的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collecter 对数据进行分析和聚合,存储到 Elasticsearch、MySQL、TiDB 等其一即可,最后我们可以通过 SkyWalking UI 的可视化界面对最终的结果进行查看。

Skywalking 支持从多个来源和多种格式收集数据:多种语言的 Skywalking Agent 、Zipkin v1/v2 、Istio 勘测、Envoy 度量等数据格式。

特性

  • 多种监控手段,语言探针和service mesh
  • 多语言自动探针,Java,.NET Core和Node.JS
  • 轻量高效,不需要大数据
  • 模块化,UI、存储、集群管理多种机制可选
  • 支持告警
  • 优秀的可视化方案

为什么是SkyWorking

2019 年 4 月 24 日(北美时间),Apache 软件基金会宣布,Apache SkyWalking 毕业,成为 Apache 软件基金会顶级项目。

目前最主流的两个APM对比

image

Skyworking体验地址: link

6.2版本更新内容

Project

  • ElasticSearch implementation performance improved, and CHANGED totally. Must delete all existing indexes to do upgrade.
  • CI and Integration tests provided by ASF INFRA.
  • Plan to enhance tests including e2e, plugin tests in all pull requests, powered by ASF INFRA.
  • DataCarrier queue write index controller performance improvement. 3-5 times quicker than before.
  • Add windows compile support in CI.

Java Agent

  • Support collect SQL parameter in MySQL plugin.[Optional]
  • Support SolrJ plugin.
  • Support RESTEasy plugin.
  • Support Spring Gateway plugin for 2.1.x
  • TracingContext performance improvement.
  • Support Apache ShardingSphere(incubating) plugin.
  • Support span#error in application toolkit.
  • Fix OOM by empty stack of exception.
  • FIx wrong cause exception of stack in span log.
  • Fix unclear the running context in SpringMVC plugin.
  • Fix CPU usage accessor calculation issue.
  • Fix SpringMVC plugin span not stop bug when doing HTTP forward.
  • Fix lettuce plugin async commend bug and NPE.
  • Fix webflux plugin cast exception.
  • [CI]Support import check.

Backend

  • Support time serious ElasticSearch storage.
  • Provide dynamic configuration module and implementation. Slow SQL threshold supports dynamic config today.
  • Dynamic Configuration module provide multiple implementations, DCS(gRPC based), Zookeeper, Apollo, Nacos.
  • Provide P99/95/90/75/50 charts in topology edge.
  • New topology query protocol and implementation.
  • Support Envoy ALS in Service Mesh scenario.
  • Support Nacos cluster management.
  • Enhance metric exporter. Run in increment and total modes.
  • Fix module provider is loaded repeatedly.
  • Change TOP slow SQL storage in ES to Text from Keyword, as too long text issue.
  • Fix H2TopologyQuery tiny bug.
  • Fix H2 log query bug.(No feature provided yet)
  • Filtering pods not in ‘Running’ phase in mesh scenario.
  • Fix query alarm bug in MySQL and H2 storage.
  • Codes refactor.

UI

  • Fix some ID is null query(s).
  • Page refactor, especially time-picker, more friendly.
  • Login removed.
  • Trace timestamp visualization issue fixed.
  • Provide P99/95/90/75/50 charts in topology edge.
  • Change all P99/95/90/75/50 charts style. More readable.
  • Fix 404 in trace page.

Document

  • Go2Sky project has been donated to SkyAPM, change document link.
  • Add FAQ for ElasticSearch storage, and links from document.
  • Add FAQ fro WebSphere installation.
  • Add several open users.
  • Add alarm webhook document.

环境准备

  • 系统:CentOS 7.6
  • jdk:1.8
  • 存储:Elasticsearch 6.8.1

关闭SElinux和防火墙

1
2
3
4
systemctl stop firewalld
systemctl disable firewalld
sed -i 's#^SELINUX=.*#SELINUX=disabled#g' /etc/sysconfig/selinux
setenforce 0

修改最大打开进程数和文件句柄数

1
2
3
4
5
6
7
8
9
10
11
12
# 查看当前服务器最大打开进程数和文件句柄数
[root@test-01 ~]#ulimit -a|egrep 'open files|max user'
open files (-n) 1024
max user processes (-u) 7191

# 修改/etc/systemd/system.conf文件中的相关参数,与CentOS6修改的方式略有不同
[root@test-01 ~]#sed -i '/^#DefaultLimitNOFILE=/aDefaultLimitNOFILE=65535' /etc/systemd/system.conf
[root@test-01 ~]#sed -i '/^#DefaultLimitNPROC=/aDefaultLimitNPROC=65535' /etc/systemd/system.conf
[root@test-01 ~]#sed -i 's#nproc 4096#nproc 65535#' /etc/security/limits.d/20-nproc.conf

# 需要重启才能生效
[root@test-01 ~]#reboot

安装jdk

1
2
3
4
5
[root@test-01 ~]# yum install java-1.8.0-openjdk
[root@test-01 ~]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

安装Elasticsearch

1
2
3
4
5
6
7
8
9
10
mkdir -p /data/elasticsearch/logs

# 下载rpm安装包
wget -P /opt/downloads -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.1.rpm

# 安装
rpm -ivh /opt/downloads/elasticsearch-6.8.1.rpm

# 授权
chown -R elasticsearch.elasticsearch /data/elasticsearch

修改配置/etc/elasticsearch/elasticsearch.yml

1
2
3
path.data: /data/elasticsearch
path.logs: /data/elasticsearch/logs
network.host: 0.0.0.0

启动

1
systemctl start elasticsearch

部署SkyWorking

1
2
3
4
5
6
7
8
9
10
# 下载安装包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" -P /opt/downloads https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/6.2.0/apache-skywalking-apm-6.2.0.tar.gz

# 压缩
tar zxf /opt/downloads/apache-skywalking-apm-6.2.0.tar.gz -C /usr/local
mv apache-skywalking-apm-bin skyworking

# 启动
cd /usr/local/skyworking/bin
./startup.sh

确保8080,10800,11800,12800 端口不被占用,若有冲突,可以在webapp/webapp.yml中修改

打开UI,地址为http://服务器IP:8080
image

配置 java agent

参考地址:java agent

  1. 安装包中,找到 agent 的路径
  2. config/agent.config,设置agent.service_name
  3. config/agent.config,设置 collector.backend_service ,默认连接到 127.0.0.1:11800
  4. -jar前,将 -javaagent:/path/to/skywalking-package/agent/skywalking-agent.jar添加到表达式

agent目录下的文件和目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+-- agent
+-- activations
apm-toolkit-log4j-1.x-activation.jar
apm-toolkit-log4j-2.x-activation.jar
apm-toolkit-logback-1.x-activation.jar
...
+-- config
agent.config
+-- plugins
apm-dubbo-plugin.jar
apm-feign-default-http-9.x.jar
apm-httpClient-4.x-plugin.jar
.....
skywalking-agent.jar

支持的中间件

支持中间件列表

Install javaagent FAQs

  • Linux Tomcat 7, Tomcat 8
    Change the first line of tomcat/bin/catalina.sh.

    1
    CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS
  • Windows Tomcat 7, Tomcat 8
    Change the first line of tomcat/bin/catalina.bat.

    1
    set "CATALINA_OPTS=-javaagent:/path/to/skywalking-agent/skywalking-agent.jar"
  • JAR file
    Add -javaagent argument to command line in which you start your app. eg:

    1
    java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -jar yourApp.jar

Agent配置属性

以下为agent/config/agent.config的配置属性列表

property key Description Default
agent.namespace Namespace isolates headers in cross process propagation. The HEADER name will be HeaderName:Namespace. Not set
agent.service_name Application(5.x)/Service(6.x) code is showed in sky-walking-ui. Suggestion: set a unique name for each service, service instance nodes share the same code Your_ApplicationName
agent.sample_n_per_3_secs Negative or zero means off, by default.SAMPLE_N_PER_3_SECS means sampling N TraceSegment in 3 seconds tops. Not set
agent.authentication Authentication active is based on backend setting, see application.yml for more details.For most scenarios, this needs backend extensions, only basic match auth provided in default implementation. Not set
agent.span_limit_per_segment The max number of spans in a single segment. Through this config item, skywalking keep your application memory cost estimated. Not set
agent.ignore_suffix If the operation name of the first span is included in this set, this segment should be ignored. Not set
agent.is_open_debugging_class If true, skywalking agent will save all instrumented classes files in /debugging folder.Skywalking team may ask for these files in order to resolve compatible problem. Not set
agent.active_v2_header Active V2 header in default. true
agent.instance_uuid Instance uuid is the identity of an instance, skywalking treat same instance uuid as one instance.if empty, skywalking agent will generate an 32-bit uuid. ""
agent.cause_exception_depth How depth the agent goes, when log all cause exceptions. 5
agent.active_v1_header Deactive V1 header in default. false
collector.grpc_channel_check_interval grpc channel status check interval. 30
collector.app_and_service_register_check_interval application and service registry check interval. 3
collector.backend_service Collector skywalking trace receiver service addresses. 127.0.0.1:11800
logging.level The log level. Default is debug. DEBUG
logging.file_name Log file name. skywalking-api.log
logging.dir Log files directory. Default is blank string, means, use “system.out” to output logs. ""
logging.max_file_size The max size of log file. If the size is bigger than this, archive the current file, and write into a new file. 300 * 1024 * 1024
jvm.buffer_size The buffer size of collected JVM info. 60 * 10
buffer.channel_size The buffer channel size. 5
buffer.buffer_size The buffer size. 300
dictionary.service_code_buffer_size The buffer size of application codes and peer 10 * 10000
dictionary.endpoint_name_buffer_size The buffer size of endpoint names and peer 1000 * 10000
plugin.mongodb.trace_param If true, trace all the parameters in MongoDB access, default is false. Only trace the operation, not include parameters. false
plugin.elasticsearch.trace_dsl If true, trace all the DSL(Domain Specific Language) in ElasticSearch access, default is false. false
plugin.springmvc.use_qualified_name_as_endpoint_name If true, the fully qualified method name will be used as the endpoint name instead of the request URL, default is false. false
plugin.toolit.use_qualified_name_as_operation_name If true, the fully qualified method name will be used as the operation name instead of the given operation name, default is false. false
plugin.mysql.trace_sql_parameters If set to true, the parameters of the sql (typically java.sql.PreparedStatement) would be collected. false
plugin.mysql.sql_parameters_max_length If set to positive number, the db.sql.parameters would be truncated to this length, otherwise it would be completely saved, which may cause performance problem. 512
plugin.solrj.trace_statement If true, trace all the query parameters(include deleteByIds and deleteByQuery) in Solr query request, default is false. false
plugin.solrj.trace_ops_params If true, trace all the operation parameters in Solr request, default is false. false

关于插件

若需要使用第三方插件,可以将插件放入 /plugins路径下。
插件开发指南

测试

Java Agent Performance Test