Apache Skywalking实践

  Seves

    一、关于 Apache Skywalking(以下为官方的简介)

    SkyWalking是针对分布式系统的APM(应用性能监控)系统,项目开源,目前已经已被apache收录,github地址:https://github.com/apache/incubator-skywalking
    优点:
    1.Java自动探针,不需要修改应用程序源代码 ,并且支持多种开源中间件,框架与类库,如果想查看支持列表请到官方github地址。
    2.手动探针。它支持手动探针去追踪业务方法。
    3.核心的Collector为纯Java后端实现,提供RESTful和gRPC接口。兼容接受其他语言探针发送数据。
    4.提供了良好的可视化管理界面,包括应用、实例、服务性能指标分析、拓扑图、分布式追踪、性能预警。
    5.采用elasticsearch做数据存储,能够达到实时搜索、稳定、可靠。
    6.社区活跃度非常高,目前社区提供了.NET和Node.js探针。
    7.开发团队乐于帮助使用者,在github提issue和官方群谈论,很快会受到回复消息。

    二、部署
    skywalking支持单机版与集群模式部署,其中集群和单机的定义主要来源于elasticsearch和collector是否是单机或者集群,在个人实践中单机版可以几乎实现集群版的所有功能,只是可能要考虑单机es存储数据量和压力的问题,官方说明为单机版主要用于:预览、功能测试、演示和低压力系统。
    skywalking主要由3部分组成,分别为collector(主要为收集agent发送过来的数据,和为web提供接口服务)、web(主要提供UI监控服务)、agent(探针,获取应用信息),其中数据存储为elasticsearch(5.0版本以下单机支持本地h2)。

    collector和web部署比较简单可以按官方文档https://github.com/apache/incubator-skywalking/blob/master/docs/cn/Quick-start-CN.md 去操作。需要注意的是部署collector时默认地址localhost如果不是两个服务同时启在一台服务器的话最好改写为内网或者公网ip地址,如果说一个服务写localhost别的服务写的这台机器的ip,这样的话日志会报错,最好同时写成ip,另外collector支持定时清理elasticsearh数据,默认好像是7天,在collector配置文件中有一个ttl属性,这个就是设置定期清理时间的。web部署时,需要在启动脚本里传入elasticsearch地址,并且端口设置也在启动脚本中。

    agent的放置策略与实际场景有关,建议一个应用独立放一个探针,同一个应用的不同实例可以用一个探针。其中有一个问题是探针如何来放置?尤其在docker环境下去部署agent,如果每个应用都把agent打在镜像里去启动这样的话感觉资源有些浪费(5.0版本的agent大概好像是17m),目前个人解决方式为在配置dockerfile时,可以使用VOLUME指令创建一个agent路径(例如/usr/local/agent/,以下举例将采用这个测试路径),在启动服务时执行“docker run -v 主机路径:容器路径 ”可以把宿主机文件路径中的agent(agent中配置一下通用的配置,例如collector地址)映射到容器中,Dockerfile启动时命令可以这样写 java -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.application_code=应用名 -Dskywalking.logging.file_name=日志名.log -jar 应用.jar,用这种方式来部署比较方便,只需要在部署服务器上放置一个通用的配置的agent就好。

    三、Demo

    1.Dashboard


    2.Topology


    3.Application

    4.Trace

    5.Alarm

    四、应用总结

    在目前的微服务或者分布式架构下(目前个人采用的spring cloud架构体系),分布式追踪变得很重要,在开发测试可以帮助我们更快发现架构或者一些设计有问题的地方,在生产上可以帮我们统计和分析服务器性能和一些部署相关的问题,还可以帮我帮助我们解决或者分析一些未知的问题,skywalking的定位是apm,不仅提供了自动分布式追踪,还可以通过手动埋探针的方式去处理我们的一些特殊问题,同时他支持了很多中间件和jvm监控,这是目前一些分布式追踪未能解决的问题,例如个人原先使用的是spring cloud sleuth zipkin,不能解决kafka等一些中间件和jvm的问题,也不支持自己去追踪自己想要了解的链路信息。在这些方面skywalking做的还是比较好,通过探针的方式来进行监控做到代码0侵入性,而开销也不是很大,据官方说在4000tps目前只会多占你当前应用所占cpu的百分之十,意思你的应用占用10%的CPU,加上skywalking你的应用会占到11%,个人认为这种开销是都会被大家所接收的。但目前skywalking还属于apache孵化器,一些组件还不完善,目前5.0版本也还没有到正式版本,所以有些地方做的还不完美,目前笔者使用的是5.0beta版本测试效果还不错,期待尽早能发apache正式版。

    csdn地址:https://blog.csdn.net/qq_36236890

    微信订阅号:
    942d3f36d8214ebeafab7807027778c2-qrcodeforgh0250283075b22581.jpg

    手在键盘敲很轻,我写的代码很小心。
    533