贵州交通建设集团网站,用网站做CAN总线通信好吗,wordpress 插件 前端,遵义网约车资格证一、Skywalking概述 随着互联网架构的扩张#xff0c;分布式系统变得日趋复杂#xff0c;越来越多的组件开始走向分布式化#xff0c;如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用#xff0c;这些组件共同构成了繁杂的分布式网络。  思考以下…一、Skywalking概述 随着互联网架构的扩张分布式系统变得日趋复杂越来越多的组件开始走向分布式化如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用这些组件共同构成了繁杂的分布式网络。  思考以下几个问题 1.一个请求经过了这些服务之后出现了一个调用失败的问题如何定位问题发生的地方 2.如何计算每一个节点访问流量 3.流量波动的时候增加了哪些节点集群服务 这些问题想要得到解决一定是有数据支撑绝不是靠开发人员或者运维人员的直觉。所以为了解决分布式应用、微服务系统面临的这些挑战APM系统运营而生。 
1.1微服务系统监控的三要素 Logging就是记录系统行为的离散事件例如服务在处理某个请求时打印的错误日志我们可以将这些日志信息记录到 ElasticSearch 或是其他存储中然后通过 Kibana 或是其他工具来分析   这些日志了解服务的行为和状态。大多数情况下日志记录的数据很分散并且相互独立比如错 误日志、请求处理过程中关键步骤的日志等等。Metrics是系统在一段时间内某一方面的某个度量例如电商系统在一分钟内的请求次数。我们 常见的监控系统中记录的数据都属于这个范畴例如 Promethus、Open-Falcon 等这些监控系  统最终给运维人员展示的是一张张二维的折线图。  Metrics 是可以聚合的例如为电商系统中每  个 HTTP 接口添加一个计数器计算每个接口的 QPS之后我们就可以通过简单的加和计算得到    系统的总负载情况。Tracing即我们常说的分布式链路追踪。在微服务架构系统中一个请求会经过很多服务处理调用 链路会非常长要确定中间哪个服务出现异常是非常麻烦的一件事。通过分布式链路追踪运维人 员就可以构建一个请求的视图这个视图上展示了一个请求从进入系统开始到返回响应的整个流程。这样就可以从中了解到所有服务的异常情况、网络调用以及系统的性能瓶颈等。 
1.2 什么是链路追踪 谷歌在 2010 年 4 月发表了一篇论文《Dapper, a Large-Scale Distributed Systems Tracing 
Infrastructure》介绍了分布式追踪的概念之后很多互联网公司都开始根据这篇论文打造自己的分布 式链路追踪系统。前面提到的 APM 系统的核心技术就是分布式链路追踪。 OpenTracing提供了一个标准的、与供应商无关的框架这意味着如果开发者想要尝试一种不同的分布 式追踪系统开发者只需要简单地修改Tracer配置即可而不需要替换整个分布式追踪系统。 现在OpenTracing API目前支持的语言众多 1.2.1 链路追踪 下面通过官方的一个示例简单介绍说明什么是 Tracing,把Tracing学完后更有助于大家运用Skywalking UI进行数据分析。 在一个分布式系统中追踪一个事务或者调用流程可以用下图方式描绘出来。这类流程图可以看清各 组件的组合关系但它并不能看出一次调用触发了哪个组件调用、什么时间调用、是串行调用还是并行调用。 一种更有效的展现方式就是下图这样这是一个典型的 trace视图这种展现方式增加显示了执行时间 的上下文相关服务间的层次关系进程或者任务的串行或并行调用关系。这样的视图有助于发现系统 调用的关键路径。通过关注关键路径的执行过程开发团队就可以专注于优化路径中的关键服务最大 幅度的提升系统性能。例如下图中我们可以看到请求串行的调用了授权服务、订单服务以及资源服务在资源服务中又并行的执行了三个子任务。我们还可以看到在这整个请求的生命周期中资源服 务耗时是最长的。 1.2.2 OpenTracing 学好OpenTracing更有助于我们运用Skywalking UI进行数据分析。 
Trace  一个Trace代表一个事物、请求或者是流程在分布式系中的执行过程。 OpenTracing 中的一条 Trace被 认为是一个由多个 Span 组成的有向无环图  DAG 图一个 Span 代表系统中具有开始时间和执行时 长的逻辑单元Span一般会有一个名称一条 Trace 中 Span 是首尾连接的。 
Span Span 代表系统中具有开始时间和执行时长的逻辑单元Span 之间通过嵌套或者顺序排列建立逻辑因果 关系。换句话就是到某个服务这个服务的为一个span。 每个 Span 中可以包含以下的信息 1.操作名称例如访问的具体 RPC 服务访问的 URL 地址等 2.起始时间 3.结束时间 4.Span Tag:一组键值对构成的Span标签集合其中键必须为字符串类型值可以是字符串、  bool 值或者数字 5 Span Log 一组 Span 的日志集合 6.SpanContextTrace 的全局上下文信息 7.ReferencesSpan 之间的引用关系下面详细说明 Span 之间的引用关系 在一个 Trace 中一个 Span 可以和一个或者多个 Span 间存在因果关系。目前OpenTracing 定义了 ChildOf 和 FollowsFrom 两种 Span 之间的引用关系。这两种引用类型代表了子节点和父节点间的直接 因果关系。 1.ChildOf 关系 一个 Span 可能是一个父级 Span 的孩子即为 ChildOf 关系。下面这些情况会构 成 ChildOf 关系; 1.1:一个 HTTP 请求之中被调用的服务端产生的 Span与发起调用的客户端产生的 Span就 构成了 ChildOf 关系 1.2: 一个 SQL Insert 操作的 Span和 ORM 的 save 方法的 Span 构成 ChildOf 关系。  很明显上述 ChildOf 关系中的父级 Span 都要等待子 Span 的返回子 Span 的执行时间影响了其所   在父级 Span 的执行时间父级 Span 依赖子 Span 的执行结果。除了串行的任务之外我们的逻辑中   还有很多并行的任务它们对应的 Span 也是并行的这种情况下一个父级 Span 可以合并所有子 Span 的执行结果并等待所有并行子 Span 结束。    FollowsFrom 关系在分布式系统中一些上游系统父节点不以任何方式依赖下游系统子节点的执行结果例如上游系统通过消息队列向下游系统发送消息。这种情况下下游系统对应的子 Span 和上游系统对应的父级 Span 之间是 FollowsFrom关系。 
1.3 常见的APM系统 我们前面提到了APM系统APM 系统Application Performance Management即应用性能管理 是对企业的应用系统进行实时监控实现对应用性能管理和故障定位的系统化解决方案在运维中常用。 
CAT开源由国内美团点评开源的基于Java开发目前提供 Java、C/C、 Node.js、 Python、Go 等语言的客户端监控数据会全量统计。国内很多公司在用例如美团点评、携程、 拼多多等。  CAT 需要开发人员手动在应用程序中埋点对代码侵入性比较强。ZipKin(开源)由 Twitter 公司开发并开源Java 语言实现。侵入性相对于 CAT 要低一点需 要对web.xml 等相关配置文件进行修改但依然对系统有一定的侵入性。Zipkin 可以轻松与Spring Cloud 进行集成也是 Spring Cloud 推荐的 APM 系统。 Pinpoint开源韩国团队开源的 APM 产品运用了字节码增强技术只需要在启动时添加    启动参数即可实现 APM 功能对代码无侵入。目前支持 Java 和 PHP 语言底层采用 HBase 来存储数据探针收集的数据粒度非常细但性能损耗较大因其出现的时间较长完成度也很高文档也较为丰富应用的公司较多。   SkyWalking开源国人开源的产品2019 年 4 月 17 日 SkyWalking 从 Apache 基金会的 孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java、.Net、 Node.js 等探针数据存储支持  MySQL、 ElasticSearch等。  还有很多不开源的APM系统例如淘宝鹰眼、华为云APM等  1.4 Skywalking 介绍  Skywalking是一个可观测性分析平台和应用性能管理系统它也是基于OpenTracing规范、开源的AMP 系统。 Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。支持Java .Net Core, PHP, NodeJS, Golang, LUA, c代理。支持Istio 特使服务网格 SkyWalking 核心功能 
服务、服务实例、端点指标分析服务拓扑图分析服务、服务实例喝端点SLA分析慢查询检测告警 
SkyWalking 特点 
多语言自动探针支持Java、.NET等多种语言为多种开源项目提供了插件为tomcat、HttpClient、Spring、RabbitMQ、Mysql等常见基础设施提供了自动探针微内核插件的架构存储、集群关丽丽、使用插件集合都可以进行自行选择支持告警优秀的可视化效果  Skywalking架构图 SkyWalking 分为三个核心部分 Agent探针  Agent 运行在各个服务实例中负责采集服务实例的 Trace 、 Metrics 等数据 然后通过 gRPC 方式上报给 SkyWalking 后端。 OAPSkyWalking 的后端服务其主要责任有两个,一个是负责接收 Agent 上报上来的 Trace、 Metrics 等数据交给 Analysis Core  涉及SkyWalking OAP 中的多个模块进行流式分析最终将分析得到的结果写入持久化存储中。SkyWalking 可以使用 ElasticSearch、 H2、 MySQL 等作为其持久化存储一般线上使用 ElasticSearch 集群作为其后端存储。另一个是负责响应 SkyWalking UI 界面发送来的查询请求将前面持久化的数据查询出来 组成正确的响应结果返回给 UI 界面进行展示。  UI 界面 SkyWalking 前后端进行分离该 UI 界面负责将用户的查询操作封装为 GraphQL 请求 提交给 OAP 后端触发后续的查询操作待拿到查询结果之后会在前端负责展示。 1.4.1 Skywalking 安装  Skywalking数据存储方式有2种分别为H2(内存)和elasticsearch如果数据量比较大建议使用后 者工作中也建议使用后者。 Skywalking自身提供了UI管理控制台我们安装的组件 1:elasticsearch,建议使用elasticsearch7.x 2:elasticsearch-hq,elasticsearch的管理工具更方便管理elasticsearch 3:Skywalking 4:Skywalking-UI 1.4.2 elasticsearch安装 1)系统资源配置修改      elasticsearch占用系统资源比较大我们需要修改下系统资源配置这样才能很好的运行 elasticsearch修改虚拟机配置  vi /etc/security/limits.conf 追加内容: 
* soft nofile 65535
* hard nofile 65535修改 vi /etc/sysctl.conf 追加内容 : 
vm.max_map_count655360 让配置立即生效 
/sbin/sysctl -p 2)安装elasticsearch 建议安装elasticsearch7.x 我们这里选择7.6.2,并且采用容器的安装方式安装如下 
docker run --name elasticsearch -p 9200:9200  -p 9300:9300 -e discovery.typesingle-node -e ES_JAVA_OPTS-Xms84m -Xmx512m -d elasticsearch:7.6.2 此时就会从远程镜像仓库中拉取对应的镜像。 3)elasticsearch跨域配置 elasticsearch默认是没有开启跨域我们需要配置跨域并配置集群节点名字 
#进入容器
docker exec -it elasticsearch /bin/bash 修改容器中 /usr/share/elasticsearch/config/elasticsearch.yml 文件添加配置如下 
cluster.name: elasticsearch
http.cors.enabled: true
http.cors.allow-origin: *
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1 参数说明 cluster.name:集群服务名字 http.cors.enabled:开启跨域 http.cors.allow-origin: 允许跨域域名*代表所有域名 network.host: 外部访问的IP discovery.zen.minimum_master_nodes: 最小主节点个数 安装完成后重启容器 docker restart elasticsearch 再访问 http://ip:9200/ 效果如下 安装 ElasticSearch管理界面elasticsearch-hq  
docker run -d --name elastic-hq -p 5000:5000 --restart always elastichq/elasticsearch-hq 安装完成后访问控制台地址 http://IP:5000/#!/clusters/elasticsearch 1.4.3 Skywalking安装  Skywalking的安装我们也采用Docker安装方式同时我们需要为Skywalking指定存储服务 
##通过docker安装skywalking
docker run --name skywalking -d -p 1234:1234 -p 11800:11800 -p 12800:12800 --restart always --link elasticsearch:elasticsearch -e SW_STORAGEelasticsearch7 - e SW_STORAGE_ES_CLUSTER_NODESelasticsearch:9200 apache/skywalking-oap-server 参数说明 --link elasticsearch:elasticsearch:存储服务使用elasticsearch -e SW_STORAGEelasticsearch7存储服务elasticsearch的版本 -e SW_STORAGE_ES_CLUSTER_NODESelasticsearch:9200:存储服务elasticsearch的链接地址 接下来安装Skywalking-UI需要指定Skywalking服务名字 
docker run --name skywalking-ui -d -p 8080:8080 --link skywalking:skywalking -e SW_OAP_ADDRESSskywalking:12800 --restart always apache/skywalking-ui 安装完成后我们接下来访问Skywalking控制台 http://ip:8080 
1.5 Skywalking的使用  相关术语 skywalking-collector:链路数据归集器数据可以落地ElasticSearch/H2 skywalking-ui:web可视化平台用来展示落地的数据 skywalking-agent:探针用来收集和发送数据到归集器 1.5.1 agent下载 Skywalking-agent它简称探针用来收集和发送数据到归集器我们先来学习下探针使用探针对应 的jar包在Skywalking源码中我们需要先下载源码。 Skywalking源码下载地址  Index of /dist/skywalking   我们当前使用的版本是 8.3.0 选择下载对应版本。 agent目录结构如下 目录结构说明 activations 当前skywalking正在使用的功能组件。  agent.config 文件是 SkyWalking Agent 的唯一配置文件。 plugins 目录存储了当前 Agent 生效的插件。  optional-plugins 目录存储了一些可选的插件这些插件可能会影响整个系统的性能或是有版权问 题如果需要使用这些插件需将相应 jar 包移动到 plugins 目录下。  skywalking-agent.jar 是 Agent 的核心 jar 包 由它负责读取 agent.config 配置文件加载 上述插件 jar 包运行时收集到 的 Trace 和 Metrics 数据也是由它发送到 OAP 集群的。 1.5.2 agent应用 项目使用agent如果是开发环境可以使用IDEA集成如果是生产环境需要将项目打包上传到服务 器。为了使用agent我们同时需要将下载的 apache-skywalking-apm-bin文件包上传到服务器上去。 不过无论是开发环境还是生产环境使用agent 对项目都是无侵入式的。 
1.5.3 应用名配置 我们需要用到 agent 此时需要将 agent/config/agent.config配置文件拷贝到每个需要集成 
Skywalking工程的resource目录下我们将 agent.config拷贝到 工程\hailtaxi-parent 的每个子工 程目录下并修改其中的 agent.service_name 修改如下 hailtaxi-gateway:  agent.service_name${SW_AGENT_NAME:hailtaxi-gateway}  hailtaxi-driver:  agent.service_name${SW_AGENT_NAME:hailtaxi-driver}  hailtaxi-order:  agent.service_name${SW_AGENT_NAME:hailtaxi-order}  agent.config 是一个 KV 结构的配置文件类似于  properties 文件value 部分使用 ${} 包裹 其中使用冒号  : 分为两部分前半部分是可以覆盖该配置项的系统环境变量名称后半部分为默 认值。例如这里的 agent.service_name 配置项如果系统环境变量中指定了 SW_AGENT_NAME 值注意全是大写则优先使用环境变量中指定的值如果环境变量未指定则使用 hailtaxi-driver这个默认值。 
1.5.4 生产环境中使用agent 生产环境使用因此我们需要将agent和每个项目的jar包上传到服务器上上传apache-skywalking-apm-bin至 /usr/local/server/skywalking 再将工程hailtaxi-parent 中的项目打包并分别上 传到服务器上如下三个工程 hailtaxi-order-1.0-SNAPSHOT.jar hailtaxi-gateway-1.0-SNAPSHOT.jar hailtaxi-driver-1.0-SNAPSHOT.jar 1)启动hailtaxi-gateway          
java -javaagent:/usr/local/server/skywalking/apache-skywalking-apm-
bin/agent/skywalking-agent.jar -Dskywalking.agent.service_namehailtaxi-gateway -jar hailtaxi-gateway-1.0-SNAPSHOT.jar  我只就是指定对应的agent包以及覆盖skywalking的服务名称 大家在生产环境中可以在挂在目录中存放agent包然后存放统一的config文件然后再通过命令行覆盖对应的服务名就好了。 1.6Rocketbot 前面我们已经完成了SkyWalking环境搭建和项目应用agent使用我们来看如何使用 SkyWalking 提供 的 UI 界面—— Skywalking Rocketbot。 OAP服务和Rocket其实就是个web项目均已启动。 1.6.1Rockerbot仪表盘