SkyWalking 是一个开源可观察性平台,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。 SkyWalking 提供了一种简单的方法来维护分布式系统的清晰视图,即使是跨云也是如此。它是一种现代 APM,专为云原生、基于容器的分布式系统而设计。
1.为什么使用?
SkyWalking 提供了在许多不同场景中观察和监控分布式系统的解决方案。首先,与传统方式一样,SkyWalking 为 Java、C#、Node.js、Go、PHP 和 Nginx LUA 等服务提供自动仪表代理。 (包括对 Python 和 C++ SDK 贡献的呼吁)。在多语言、持续部署的环境中,云原生基础架构变得更加强大,但也更加复杂。 SkyWalking 的服务网格接收器允许 SkyWalking 从 Istio/Envoy 和 Linkerd 等服务网格框架接收遥测数据,让用户了解整个分布式系统。
2.下载解压
官网:https://skywalking.apache.org/
下载链接:https://skywalking.apache.org/downloads/
因为这里连接elasticsearch7.x,所以下载apache-skywalking-apm-es7-8.5.tar.gz安装包
解压
/data/
tar -zxvf apache-skywalking-apm-es7-8.5.tar.gz
3.oap配置
配置application,这里支持`zookeeper`、`consul`、`etcd`、`nacos`等
vim apache-skywalking-apm-bin-es7/config/application.yml
elasticsearch7:
nameSpace: ${SW_NAMESPACE:"skywalking"}
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:172.16.253.10:9200} #这里配置es的地址
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}
trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
dayStep: ${SW_STORAGE_DAY_STEP:1}
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1}
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1}
superDatasetDayStep: ${SW_SUPERDATASET_STORAGE_DAY_STEP:-1}
superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5}
superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0}
user: ${SW_ES_USER:"aimm_skywalking"} #配置es的用户名
password: ${SW_ES_PASSWORD:"Pass!234"} #配置es的密码
secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""}
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000}
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
为了性能考虑,官方建议在elasticsearch.yml
配置中加入如下配置
thread_pool.index.queue_size: 1000 #只适用于ElasticSearch 6
thread_pool.write.queue_size: 1000 #适用于ElasticSearch 6 and 7
index.max_result_window: 1000000 #trace页面出错时记得设置
4.webapp配置
webapp的配置文件在/webapp/webapp.yml
中
vim apache-skywalking-apm-bin-es7/webapp/webapp.yml
server:
port: 8080 #访问web使用的端口
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 127.0.0.1:12800
这里默认使用graphql
方式访问oap的数据收集端口,因此监听的是12800端口,并且因为我把oap和webapp部署在同一台服务器上,地址默认就使用了127.0.0.1,如果部署在不同的服务器,就需要修改为相应的服务器地址。
5.启动
在/bin
目录下已经有了完备的脚本,可以通过startup .sh
同时启动oap和webapp进程,该脚本实际做的事情也就是调用同目录下的oapService.sh
和webappService.sh
脚本,脚本内容如下所示。因此如果我们考虑分开部署这两个进程的话可以单独调用对应的脚本来运行。
vim apache-skywalking-apm-bin-es7/bin/startup.sh
PRG="$0"
PRGDIR=`dirname "$PRG"`
OAP_EXE=oapService.sh
WEBAPP_EXE=webappService.sh
"$PRGDIR"/"$OAP_EXE"
"$PRGDIR"/"$WEBAPP_EXE"
6.agent配置
agent的使用需要将/agent
整个目录拷贝到对应需要监控的服务器上,并修改/agent/config
下的agent.config
配置
vim apache-skywalking-apm-bin-es7/agent/config/agent.config
# 不同的namespace会导致调用链路追踪中断
agent.namespace=${SW_AGENT_NAMESPACE:hmall}
# 页面上展示的service的名称,也可以通过-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:gateway}
# 平台的调用地址,也可以通过-Dskywalking.collector.backend_service=127.0.0.1:80指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:172.16.0.11:11800}
# 忽略指定后缀的请求收集
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}
# 每3秒的采样率,负数代表100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
修改完成后在启动java进程时增加-javaagent:/data/aimm/tools/agent/skywalking-agent.jar=agent.service_name=${project_name}
以加载agent,这里${project_name}代表对应的项目名称。
例如一个完整的启动命令
java -jar -Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/service-message/ -Djava.io.tmpdir=/data/tmp -javaagent:/data/agent/skywalking-agent.jar=agent.service_name=service-message -Dspring.profiles.active=prod /data/service-message-2.2.5.jar
SkyWalking 在逻辑上分为四个部分:探针、平台后端、存储和 UI。
- 探针:探针收集数据并根据 SkyWalking 要求重新格式化它们(不同的探针支持不同的来源)。
- 平台后端:平台后端支持数据聚合、分析和流处理,包括跟踪、指标和日志。
- 存储:存储通过开放/可插拔接口存储 SkyWalking 数据。您可以选择现有的实现,例如 ElasticSearch、H2、MySQL、TiDB、InfluxDB,或者实现您自己的。欢迎新存储实现者的补丁!
- UI:UI 是高度可定制的基于 Web 的界面,允许 SkyWalking 最终用户可视化和管理 SkyWalking 数据。