1.SkyWalking 是什么?
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
2.SkyWalking 有哪些功能?
- 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
- 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
- 轻量高效。无需大数据平台,和大量的服务器资源。
- 模块化。UI、存储、集群管理都有多种机制可选。
- 支持告警。
- 优秀的可视化解决方案。
3.整体架构
整个架构,分成上、下、左、右四部分:
考虑到让描述更简单,我们舍弃掉 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 :负责提供控台,查看链路等等。
4.搭建 SkyWalking 单机环境
4.1使用各种数据库作为skywalking数据存储的地方,可以是es,mysql,h2等
4.2在官网下载skywalking
Index of /dist/skywalkinghttps://archive.apache.org/dist/skywalking/
将下载好的包上传至服务器,并解压
mkdir -p /Users/yunai/skywalking
cd /Users/yunai/skywalking
tar -zxvf 文件名
$ ls -ls4 drwxr-xr-x 8 root root 4096 Sep 9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 bin # 执行脚本4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep 9 14:32 LICENSE4 drwxr-xr-x 3 root root 4096 Sep 9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep 9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep 9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root 1978 Sep 9 14:32 README.txt4 drwxr-xr-x 2 root root 4096 Sep 9 15:44 webapp # SkyWalking UI
4.3 启动步骤
正文
Skywalking
整体分为 3 个部分:agent
,backend
,UI
agent
代理,应用启动的时候后,通过该agent
收集数据并上报backend
。backend
数据收集器,agent
收集的数据会发送给backend
,然后数据处理后入库。ui
也就是提供可视化服务的界面。
在安装前,请在官方网址进行下载:下载地址,下载的时候,请一定注意了不是第一行的Source Code
而是第二行的Binary Distribution
。
backend
如上所述:backend
的目的是收集agent
的上报的数据,然后持久化到存储中,起到承上启下的功能,所以首先安装backend
。
前置知识
与之先关的目录和文件主要是如下几个:
bin
目录下的oapService.sh
,它就是backend
的启动脚本config
目录下的application.yml
,它是backend
的配置信息oap-libs
是backend
启动需要的所有jar
包logs
目录下的skywalking-oap-server.log
是启动后的日志文件。
启动步骤
以下内容是 基于MySQL
作为存储来讲解的。
第一步:修改config
下的配置文件application.yml
storage.selector
修改为mysql
,默认是用于演示的h2
,你也可以选择自己的存储介质。- 然后找到
store
下的mysql
节点 - 修改
mysql.properties
中基本信息:jdbcUrl
/dataSource.user
/dataSource.password
2020年08月10日 补充
低估了 skywalking 使用数据空间的能力,差点导致了生产事故,幸好收到了短信提示,及时处理。这里补充下注意事项
在 该配置文件下还有:
recordDataTTL
和metricsDataTTL
,表示的数据数据保存的时间,单位是天,分别为 3天 和 7天。我这个服务有 3 个服务节点,12 个小时就占用了18G 的内存空间,这样算下来,基本上一个节点一小时最起码就占用了 0.5G 的空间。
所以请大家一定要注意评估你数据库的存储空间!
第二步:将mysql
的驱动包,拷贝到opa-libs
目录中。官方可没有自带mysql
的驱动包,所以请自行下载后拷贝到这个目录。
mysql8
一定要找对应的mysql8
的jar
包,不要找mysql5.7
的驱动包,MySql8驱动mysql5.7
的数据库,最好也是5.7
的(理论上 8 的也是兼容),MySQL5.7驱动
如果上述流程完成后,尝试运行bin
目录下的oapService.sh
sh oapService.sh
然后查看logs/skywalking-oap-server.log
的日志,如果失败会有日志,接下来你就见招拆招吧。
启动后,你可以通过如下几种方式观察是否成功。
第一就是可以通过查看端口运行情况判定:
lsof -i:12800 #数据上报端口,很重要的端口
lsof -i:11800
如果端口被占用,日志又没有错误保存,那么基本启动成功了。
第二就是查看jdbcUrl
对应的数据库是否已经默认创建好了数据表。
Bug1
我在本文的时候,发现日志报错了一个错误,提示:Data too long for column 'statement' at row 1
。
简单查了下应该是Segment
表的字段statement
,原本是 200的长度,我将其改为 2000后,该问题目前为止没有再输出。
还有就是top_n_database_staement
有这个字段,我暂时也将其修改到了2000
。
同时提了issue
官方也很快做出了响应,建议修改为2000
。直达地址
Bug2
提示:Specified key was too long; max key length is 767 bytes
最简单的方法就是将参数:innodb_large_prefix
修改为ON
,其他方法请自行百度了解
ui
该组件将数据可视化出来,供大家更直观的查看数据。
前置知识
与之关联的目录和文件大体如下:
bin
下的webappService.sh
为UI
的启动脚本webapp
目录,其中包括了 2 个重要的东西webapp.yml
,包括UI
启动的端口和上报地址skywalking-webapp.jar
,启动 jar包
- logs下的文件
webapp.log
启动步骤
第一步:修改webapp.yml
,其默认的端口是经典的8080
,所以还是修改为一个特殊点的端口,避免启动出错。
第二部:修改collecotr.ribbon.listofServers
的 ip
实际运行的 ip
第三步:通过 bin 下的webappService.sh
启动
sh webappService.sh
不要看到控制台输出SkyWalking Web Application started successfully!
就认为 OK 了。
还是要自己看看日志webapp.log
有没有报错内容。、
agent
agent
的作用是同应用一起启动,将应用的指标数据上传。agent
我记得是可以共享的,就是所有的应用都用同一个 agent
,但是为了安全,还是建议每个应用一个 agent
。
与之相关的目录为agent
,其中最关键的就是agent/config/agent.config
这个配置文件
以下是使用步骤:
- 拷贝一份
agent
到任意一个你喜欢的地方,我喜欢放在 jar包的同级目录。 - 修改
agent.config
中的参数agent.service_name
修改实际的,同一个应用多个实例,其service_name
相同agent.instance_name
每个实例都应该是唯一的,建议自行修改,这样UI上可视化后,更有意义。collector.backend_service
修改为实际的backend
所在主机的ip
和端口。
- 在 jar包启动脚本中添加如下命令
-javaagent:/xxx/agent/skywalking-agent.jar