Mac搭建Skywalking
一 概述
SkyWalking 是什么?
FROM http://skywalking.apache.org/
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
SkyWalking 有哪些功能?
FROM http://skywalking.apache.org/
多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
轻量高效。无需大数据平台,和大量的服务器资源。
模块化。UI、存储、集群管理都有多种机制可选。
支持告警。
优秀的可视化解决方案。
二 整体架构
整个架构,分成上、下、左、右四部分:
考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。
- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
官方文档
- 英文文档 :https://github.com/apache/skywalking/tree/master/docs
- 中文文档 : https://github.com/SkyAPM/document-cn-translation-of-skywalking
考虑大家使用 SkyWalking 的目的,是实现分布式链路追踪的功能,所以最好去了解下相关的知识。这里推荐阅读文章 - 《OpenTracing 官方标准 —— 中文版》
三 环境准备
3.1 搭建Elasticsearch(如果存储源需要用ES的话,则需要安装)
参考我的另一篇博文Mac搭建ES
3.2 下载 SkyWalking 软件包
于 SkyWalking 的软件包,有两种方式获取:
手动编译
官方包
一般情况下,我们建议使用官方包。手动编译,更多是尝鲜或者等着急修复的 BUG 的版本。
3.2.1 官方包
在 http://skywalking.apache.org/downloads/ 下,我们下载操作系统对应的发布版。
这里,我们选择 Binary Distribution for ElasticSearch 7 (Linux) 版本,因为艿艿是 Mac 环境,再加上想使用 Elasticsearch 7.X 版本作为存储。如果你想用 Elasticsearch 6.X 版本作为存储,记得下载 Binary Distribution 版本。
下载:
官网下载地址:http://skywalking.apache.org/downloads/
然后
或者直接:
# 创建目录:
$ mkdir -p /Users/admin/tool/trace
$ cd/Users/admin/tool/trace
$ wget https://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-6.6.0.tar.gz
解压:
# 解压
$ tar -zxvf apache-skywalking-apm-6.6.0.tar.gz
$ cd apache-skywalking-apm-bin
$ ls -ls
total 136
64 -rwxr-xr-x 1 admin staff 29138 Dec 24 14:10 LICENSE
64 -rwxr-xr-x 1 admin staff 31850 Dec 24 14:10 NOTICE
8 -rw-r--r-- 1 admin staff 1978 Dec 24 14:10 README.txt
0 drwxr-xr-x 9 admin staff 288 Dec 24 14:21 agent
0 drwxr-xr-x 12 admin staff 384 Apr 14 14:04 bin
0 drwxr-xr-x 11 admin staff 352 Apr 14 14:07 config
0 drwxr-xr-x 36 admin staff 1152 Dec 24 14:10 licenses
0 drwxr-xr-x 6 admin staff 192 Apr 14 14:09 logs
0 drwxr-xr-x 5 admin staff 160 Apr 15 08:05 mesh-buffer
0 drwxr-xr-x 207 admin staff 6624 Dec 24 14:28 oap-libs
0 drwxr-xr-x 6 admin staff 192 Apr 15 08:05 trace-buffer
0 drwxr-xr-x 4 admin staff 128 Apr 14 14:04 webapp
3.3 SkyWalking OAP 搭建
- 修改OAP配置文件 (我使用的是默认存储器h2)
$ vi config/application.yml
storage:
# elasticsearch:
# nameSpace: ${SW_NAMESPACE:"elasticsearch"}
# clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost: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}
# elasticsearch7:
# nameSpace: ${SW_NAMESPACE:""}
# clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost: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}
h2:
driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
user: ${SW_STORAGE_H2_USER:sa}
metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
- 修改agent配置文件
$ vi agent/agent.config
# The service name in UI
agent.service_name=${SW_AGENT_NAME:demo-application}
- 启动oap service
☁ apache-skywalking-apm-bin : bin/startup.sh
- 验证
http://127.0.0.1:8080/
四应用接入
4.1 编写简单的springboot demo,并打一个jar包
启动应用采用如下命令:
java -javaagent:/Users/admin/tool/trace/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=demo-application -jar demo-application.jar
4.2 效果
调用链