当前位置: 首页 > news >正文

可观测之调用链Skywalking

简介

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

  • 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。

  • 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。

  • 轻量高效。无需大数据平台,和大量的服务器资源。

  • 模块化。UI、存储、集群管理都有多种机制可选。

  • 支持告警。

  • 优秀的可视化解决方案。

官方中文文档:https://skyapm.github.io/document-cn-translation-of-skywalking/zh/8.0.0/

下面我们简单来使用下

部署

这里采用docker- composet进行部署

version: '3.3'
services:skywalking-oap:image: apache/skywalking-oap-server:8.0.1-es7container_name: skywalking-oaprestart: alwaysports:- 11800:11800- 12800:12800environment:SW_STORAGE: h2skywalking-ui:image: apache/skywalking-ui:8.0.1container_name: skywalking-uidepends_on:- skywalking-oaplinks:- skywalking-oaprestart: alwaysports:- 8080:8080environment:SW_OAP_ADDRESS: skywalking-oap:12800

上面安装了server端和ui控制台

go2sky

skywalking是业界比较常用的一款APM监控工具,采用java开发,对java应用适配比较好,应用不需要埋点上报,只需要在启动时加上 -javaagent: 参数即可。
而对于go应用想要上报指标到skywalking,则需要通过埋点的方式注入。skywalking官方提供了golang版的库github.com/SkyAPM/go2sky

demo代码:https://github.com/SkyAPM/go2sky/blob/38c3b84741dd6c0609965e9df0fcc633915d3ea5/test/e2e/example-server/main.go

和所有的链路监控工具一样,skywalking也遵循Open Tracing协议,首先需要创建一个Trace,表示一个调用链,然后再调用链上创建span和子span,每个span表示一次调用,因为span和子span是有关联关系的,所以通过span和子span可以了解链路的上下游调用情况。

在go-sky里,可以创建三种类型的span

LocalSpan:可以用来表示本程序内的一次调用。

span, ctx, err := tracer.CreateLocalSpan(context.Background())

EntrySpan:用来从下游服务提取context信息。

span, ctx, err := h.tracer.CreateEntrySpan(r.Context(), getOperationName(h.name, r), func() (string, error) {return r.Header.Get(propagation.Header), nil
})

ExitSpan:用来向上游服务注入context信息。

span, err := t.tracer.CreateExitSpan(req.Context(), getOperationName(t.name, req), req.Host, func(header string) error {req.Header.Set(propagation.Header, header)return nil
})

其实在发起http请求时,也是注入式地上报skywalking,只不过通过github.com/SkyAPM/go2sky/plugins/http这个包进行了封装而已,其核心逻辑是创建span,并将span信息写入到header里来传递到上游服务。
Server端在处理请求时,其核心逻辑是从header里解析出下游的span信息,并基于此构造自己的span,并将span上报到skywalking。

http://www.lryc.cn/news/98279.html

相关文章:

  • linux上适用的反汇编调试软件(对标od)
  • 基于高斯混合模型聚类的风电场短期功率预测方法(Pythonmatlab代码实现)
  • 【深入了解pytorch】PyTorch循环神经网络(RNN)
  • 电商运营的方法
  • Swift 如何确定 scrollView 已经滑动结束
  • html学习2(css、图像)
  • 微服务探索之路06篇k8s配置文件Yaml部署Redis使用Helm部署MongoDB和kafka
  • Microsoft todo 数据导出
  • SSIS对SQL Server向Mysql数据转发表数据 (二)
  • 【Vue3】reactive 直接赋值会导致 Vue 无法正确地监听到属性的变化,从而无法触发视图更新
  • 服务器出现丢包的原因103.88.35.x
  • pytest study
  • 0基础学习VR全景平台篇 第73篇:VR直播-如何自定义邀请二维码(直播邀请)
  • idea常用技巧/idea常见问题
  • 数据结构---并查集
  • iOS transform rotate总结
  • 关于axios请求java接口中的@RequestParam、@PathVariable及@RequestBody不同接参类型的用法
  • 两个点云的重叠部分查找(附open3d python 代码)
  • PDF文件转换成word软件有哪些?分享两个文件格式转换软件
  • redis数据库
  • SpringMVC-mybatis,SQL语句中误用了desc关键字,导致报错。
  • adb笔记
  • RocketMQ教程-(5)-功能特性-顺序消息
  • Oracle TNS侦听器远程中毒(CVE-2012-1675)
  • Springboot+Netty
  • window.location.href is not a function
  • STM32+FPGA的导常振动信号采集存储系统
  • Eclipse memory analyzer 分析GC dump日志定位代码问题
  • DSA之图(3):图的遍历
  • 从零开始学习 Java:简单易懂的入门指南之for循环(四)