本文共 4754 字,大约阅读时间需要 15 分钟。
SkyWalking是一个开源的可观察性平台,用于收集,分析,聚合和可视化来自本地或者云服务中的数据。即使在整个云环境中,SkyWalking也能提供一种简便的方法来维护您的分布式系统的清晰视图。它是一个现代的APM(Application Performance Monitor 应用性能监测软件),专门为基于云、容器的分布式系统而设计。
SkyWalking提供了用于在许多不同情况下观察和监视分布式系统的解决方案,并通过agent方式,做到高性能、低损耗、无侵入性,与类似的功能组件如:Zipkin、Pinpoint、CAT相比,skywalking无论是从性能还是社区活跃度方面考虑,都具有一定的优势。
skywalking从三个维度提供可观察项功能,分别是:服务,服务实例,端点
从逻辑上看,skywalking分为四个部分:探针,平台后端,存储和UI。
直接进入官方下载:https://skywalking.apache.org/downloads/
本次教程选择8.2.0 ES6版本
下载很快,完成后直接上传到服务器中
tar -zxvf apache-skywalking-apm-8.2.0.tar.gz
cd apache-skywalking-apm-bin
cd到bin目录
执行./startup.sh直接同时启动 oap和web服务
访问你的服务器地址,8080端口,就可以进入skywalking的UI界面
默认情况下skywalking使用H2来存储数据,这肯定无法满足性能要求,所以我们使用ES来进行存储。
下载elasticsearch,本教程选择6.4.0版本
同样直接解压,并进入elasticsearch-6.4.0目录
进入bin目录,启动./elasticserach,你可能会遇到如下报错,表明不能使用root用户启动es
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.0.jar:6.4.0] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.0.jar:6.4.0]Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.0.jar:6.4.0] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.0.jar:6.4.0] ... 6 more
所以我们需要重新建一个用户,并用新用户启动es
比如我重新建立了一个用户就叫es
启动成功后,我们通过curl http://localhost:9200测试,看到如下内容就表示es启动成功。
你也可以使用如下命令,用后台方式启动。
./elasticsearch -d
如果遇到如下报错
[2] bootstrap checks failed[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536][2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
执行如下命令
vi /etc/security/limits.conf
在文件中新增
es soft nofile 65536es hard nofile 65536es soft nproc 4096es hard nproc 4096
再次重启,可能还会遇到如下错误
ERROR: [1] bootstrap checks failed[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
同样执行如下命令
vi /etc/sysctl.conf
新增
vm.max_map_count=262144保存退出后执行,让配置生效
sysctl -p
此时再启动就正常了,但是你现在可能无法通过外部访问
cd到elasticsearch的config目录中
修改elasticsearch.yml文件,找到network.host配置项,默认是注释着的,打开注释,并修改为0.0.0.0,保存退出,重启es服务即可。
vi elasticsearch.yml
那么现在就可以通过外部访问了
现在es服务已经配置完成了,我们cd到skywalking的 config目录下
修改application.yml文件
找到存储源的配置,直接把h2改成es即可
默认配置:
替换成:elasticsearch保存并启动skywalking
看到日志中有创建一些es索引的过程,表示已经成功使用es作为存储源了。
现在skywalking还无法监控服务,需要我们配置agent,skywalking提供的agent本身就是一个jar包,所以启动时直接新增javaagent配置项,指定好skywalking-agent.jar的所在的路径即可。
为了演示方便,直接使用idea配置启动。
首先配置javaagent:指定agent目录下的skywalking-agent.jar所在的路径 service_name名称根据自己的情况定义 然后注意backend_service,端口为11800 grpc访问的端口
-javaagent:D:/learn/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar-Dskywalking.agent.service_name=order-Dskywalking.collector.backend_service=10.0.0.189:11800
配置完启动服务,此时再访问就可以看到你的服务了
搞了接口测试一下
我们可以看到,本身Rocketbot UI,也为我们从4个角度进行了监控,全局的,服务、实例、端点,一开始也提到过后面3个本身也是skywalking的监控维度
那我们再启动一个微服务,并且通过feign的方式,进行微服务之间的调用,那我们可以看到结果如下,skywalking可以为我们监控到每一次请求所执行的路径,已经每个路径上的耗时时间。
skywalking拥有完整的APM和调用链路功能,扩展性强、二次开发简单,使用agent采集数据,并经过collector简单处理数据、aggregator聚合数据统计分析并持久化、alarm监控告警,最终提供query查询,和UI呈现。
转载地址:http://lhlrb.baihongyu.com/