一、skywalking基本介绍
SkyWalking是一个开源的观测平台,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至可以观测横跨不同云的系统,SkyWalking 更像是一种现代的应用程序性能监控(Application Performance Monitoring,即APM)工具,专为云原生,基于容器以及分布式系统而设计。
1、探针:基于不同的来源探针可能是不一样的,但作用都是收集数据,将数据格式化为SkyWalking 适用的格式。例如在Java中则是做字节码植入,无侵入式的收集,并通过 HTTP 或者 gRPC 方式发送数据到平台后端 通过Agent技术 代理主函数
2、存储:是开放式的,可以选择一个既有的存储系统,如ElasticSearch、H2 或 MySQL 集群(Sharding-Sphere 管理),也可以选择自己实现一个存储系统。
用户界面:也就是SkyWalking的可视化界面,UI非常炫酷且强大,同样它也是可定制以匹配你已存在的后端的
3、SkyWalking 为观察和监控分布式系统提供了许多不同场景下的解决方案。例如为Java、C#及Node.js提供语言自动探针,无侵入式的收集。同时也为一些编译型语言C++、GO等提供了手动打点 SDK(目前还未支持)。除此之外,还可以使用服务网格基础探针来收集数据,以帮助了解整个分布式系统。
4、多种监控手段,语言探针和服务网格(Service Mesh)
模块化,UI、存储、集群管理多种机制可选。支持告警
二、skywalking架构原理
1、skywalking agent
2、oapservice
是负责处理监控数据的,比如接受skywalking agent的监控数据,并存储在数据库中(例如elasticsearch、mysql中等);接受skywalking webapp的前端请求,从数据库查询数据,并返回数据给前端。,Skywalking oapservice通常以集群的形式存在;
3、skywalking webapp
4、用于存储监控数据的数据库
三、skywalking 环境安装(windows为例)
1、下载
http://skywalking.apache.org/
这里我使用的是skywalking6.5.0的版本
2、启动
3、查看界面
默认端口是8080。
http://127.0.0.1:8080/
1、修改端口
进入apache-skywalking-apm-bin\webapp中,修改webapp.yml
4、项目启动监听
1、如果是idea启动测试监听,增加VM options
--采用探针和指定实例名称-javaagent:D:/apache-skywalking-apm-bin/agent/skywalking-agent.jar-Dskywalking.agent.service_name=eduApp
2、如果是jar包启动的话,执行
java -javaagent:D:/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=eduApp -jar service-edu-1.0-SNAPSHOT.jar
3、如果部署多台服务器服务
1、复制apache-skywalking-apm-bin/agent文件夹到不同服务器上面
2、然后启动的时候把探针指向的服务器地址修改。可以修改配置文件D:\apache-skywalking-apm-bin\agent\config\agent.config
也可以启动的时候附带上命令,指向探针
java -javaagent:/usr/local/src/agent/skywalking-agent.jar -Dskywalking.agent.service_name=eduApp -Dskywalking.collector.backend_service=192.168.20.121:11800 -jar service-edu-1.0-SNAPSHOT.jar
同时,不同的服务器上也可以使用相同的服务别名实例名,所有的服务追踪器都能追踪到。我在自己本机和虚拟机上,设置了相同的实例名,结果都能追踪
5、监听成功界面展示
1、首界面会展示目前有监听的服务、端点、以及连接的数据库,接口名称和耗时
2、然后拓扑图的话,可以看到服务与服务之间的调用
3、追踪可以看到接口的耗时、名称、每个步骤的操作详情,如果是分布式的话,服务之间的调用也会详细的列出来(重)
4、告警功能
SkyWalking 的默认提供config/alarm-settings.yml文件,里面预先定义了一些常用的告警规则。如下:
1.过去3分钟内服务平均响应时间超过1秒
2.服务成功率在过去2分钟内低于80%
3.服务90%响应时间在过去3分钟内低于1000毫秒
4.服务实例在过去2分钟内的平均响应时间超过1秒
5.端点平均响应时间过去2分钟超过1秒
--entitypackage com.haoker.serviceedu.entity.police;/*** 封装报警参数的对象*/public class AlarmMessageDto {private int scopeId;private String name;private int id0;private int id1;private String alarmMessage;private long startTime;public int getScopeId() {return scopeId;}public String getName() {return name;}public int getId0() {return id0;}public int getId1() {return id1;}public String getAlarmMessage() {return alarmMessage;}public long getStartTime() {return startTime;}public void setScopeId(int scopeId) {this.scopeId = scopeId;}public void setName(String name) {this.name = name;}public void setId0(int id0) {this.id0 = id0;}public void setId1(int id1) {this.id1 = id1;}public void setAlarmMessage(String alarmMessage) {this.alarmMessage = alarmMessage;}public void setStartTime(long startTime) {this.startTime = startTime;}}--controllerpackage com.haoker.serviceedu.controller.skywalkingPolice;import com.haoker.serviceedu.entity.police.AlarmMessageDto;import org.springframework.web.bind.annotation.*;import java.util.ArrayList;import java.util.List;@RestController@RequestMapping("/eduservice")@CrossOriginpublic class PoliceController {private List<List<AlarmMessageDto>> listAlarmMessage = new ArrayList<>();/*** 存放告警信息** @param alarmMessageList*/@RequestMapping(value = "/police", method = RequestMethod.POST)public void alarm(@RequestBody List<AlarmMessageDto> alarmMessageList) {listAlarmMessage.add(alarmMessageList);}/*** 打印告警信息** @return*/@RequestMapping("/getListAlarmMessageDto")public List<List<AlarmMessageDto>> getListAlarmMessageDto() {return listAlarmMessage;}}
四、skywalking数据保存持久化
默认的情况下skywalking是没有持久化的,下次重启后,上次的数据就消失了。下面我们集成es来做数据持久化.
1、先安装docker
https://www.yuque.com/docs/share/14ce8852-eef5-48d5-8cdd-deeb086ce37c?# 《kafka结合ELK实现日志采集》
2、通过docker安装es
--这里我们安装es6.5.0版本的,对应skywalking版本docker run -it --name es -e "discovery.type=single-node" -d -p 9200:9200 -p 9300:9300 -p 5601:5601 elasticsearch:6.5.0
3、安装kinba
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.212.5:9200 --name kibana --network=container:es kibana:6.5.0



