百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

ccwgpt 2025-05-30 13:12 7 浏览 0 评论

目录

  • go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
  • zipkin使用demo
  • 数据持久化

本节简单搭建一下zipkin,zipkin是Twitter基于google的分布式监控系统Dapper(论文)的开发源实现,zipkin用于跟踪分布式服务之间的应用数据链路,分析处理延时,帮助我们改进系统的性能和定位故障。

同时kratos基于opentracing语义,可以将zipkin集成了进去

搭建 Zipkin ,启动一个zipkin服务,最简单的办法是直接使用 Zipkin 官方的 Docker 镜像。

如果只是为了测试用,可以pull 下来直接启动一个,数据会在内存里面,我这里docker pull需要FQ.

启动zipkin

docker run -d --restart always -v /etc/localtime:/etc/localtime:ro -p 9411:9411 --name zipkin openzipkin/zipkin


127..0.0.1:9411查看



zipkin使用demo

照惯例new 一个demo 服务

在main函数内进行初始化,添加如下代码:

func main(){
    zipkin.Init(&zipkin.Config{
        Endpoint: "http://localhost:9411/api/v2/spans",
    })
    // 忽略其他代码
}

调用一下sayhello接口

再看看zipkin 是否有数据

数据持久化

生产环境中,可能会需要做数据的持久化,官方提供了很多支持,这里举例mysql、同样docker运行一份mysql服务。

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest

官方建表语句 : mysql.sql

--
-- Copyright 2015-2019 The OpenZipkin Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
-- in compliance with the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software distributed under the License
-- is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
-- or implied. See the License for the specific language governing permissions and limitations under
-- the License.
--

CREATE TABLE IF NOT EXISTS zipkin_spans (
  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` BIGINT NOT NULL,
  `id` BIGINT NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  `remote_service_name` VARCHAR(255),
  `parent_id` BIGINT,
  `debug` BIT(1),
  `start_ts` BIGINT COMMENT 'Span.timestamp(): epoch micros used for endTs query and to implement TTL',
  `duration` BIGINT COMMENT 'Span.duration(): micros used for minDuration and maxDuration query',
  PRIMARY KEY (`trace_id_high`, `trace_id`, `id`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_spans ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTracesByIds';
ALTER TABLE zipkin_spans ADD INDEX(`name`) COMMENT 'for getTraces and getSpanNames';
ALTER TABLE zipkin_spans ADD INDEX(`remote_service_name`) COMMENT 'for getTraces and getRemoteServiceNames';
ALTER TABLE zipkin_spans ADD INDEX(`start_ts`) COMMENT 'for getTraces ordering and range';

CREATE TABLE IF NOT EXISTS zipkin_annotations (
  `trace_id_high` BIGINT NOT NULL DEFAULT 0 COMMENT 'If non zero, this means the trace uses 128 bit traceIds instead of 64 bit',
  `trace_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.trace_id',
  `span_id` BIGINT NOT NULL COMMENT 'coincides with zipkin_spans.id',
  `a_key` VARCHAR(255) NOT NULL COMMENT 'BinaryAnnotation.key or Annotation.value if type == -1',
  `a_value` BLOB COMMENT 'BinaryAnnotation.value(), which must be smaller than 64KB',
  `a_type` INT NOT NULL COMMENT 'BinaryAnnotation.type() or -1 if Annotation',
  `a_timestamp` BIGINT COMMENT 'Used to implement TTL; Annotation.timestamp or zipkin_spans.timestamp',
  `endpoint_ipv4` INT COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_ipv6` BINARY(16) COMMENT 'Null when Binary/Annotation.endpoint is null, or no IPv6 address',
  `endpoint_port` SMALLINT COMMENT 'Null when Binary/Annotation.endpoint is null',
  `endpoint_service_name` VARCHAR(255) COMMENT 'Null when Binary/Annotation.endpoint is null'
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

ALTER TABLE zipkin_annotations ADD UNIQUE KEY(`trace_id_high`, `trace_id`, `span_id`, `a_key`, `a_timestamp`) COMMENT 'Ignore insert on duplicate';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`, `span_id`) COMMENT 'for joining with zipkin_spans';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id_high`, `trace_id`) COMMENT 'for getTraces/ByIds';
ALTER TABLE zipkin_annotations ADD INDEX(`endpoint_service_name`) COMMENT 'for getTraces and getServiceNames';
ALTER TABLE zipkin_annotations ADD INDEX(`a_type`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`a_key`) COMMENT 'for getTraces and autocomplete values';
ALTER TABLE zipkin_annotations ADD INDEX(`trace_id`, `span_id`, `a_key`) COMMENT 'for dependencies job';

CREATE TABLE IF NOT EXISTS zipkin_dependencies (
  `day` DATE NOT NULL,
  `parent` VARCHAR(255) NOT NULL,
  `child` VARCHAR(255) NOT NULL,
  `call_count` BIGINT,
  `error_count` BIGINT,
  PRIMARY KEY (`day`, `parent`, `child`)
) ENGINE=InnoDB ROW_FORMAT=COMPRESSED CHARACTER SET=utf8 COLLATE utf8_general_ci;

zpkin : docker-compose.yml :

version: '2'

services:
  # The zipkin process services the UI, and also exposes a POST endpoint that
  # instrumentation can send trace data to. Scribe is disabled by default.
  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    environment:
      - STORAGE_TYPE=mysql
      # Point the zipkin at the storage backend
      - MYSQL_DB=zipkin
      - MYSQL_USER=root
      - MYSQL_PASS=123456
      - MYSQL_HOST=127.0.0.1
      - MYSQL_TCP_PORT=3306
      # Uncomment to enable scribe
      # - SCRIBE_ENABLED=true
      # Uncomment to enable self-tracing
      # - SELF_TRACING_ENABLED=true
      # Uncomment to enable debug logging
      # - JAVA_OPTS=-Dlogging.level.zipkin=DEBUG -Dlogging.level.zipkin2=DEBUG
    ports:
      # Port used for the Zipkin UI and HTTP Api
      - 9411:9411
      # Uncomment if you set SCRIBE_ENABLED=true
      # - 9410:9410
    #networks: 
    #  - default 
    #  - my_net #创建网路 docker network create my_net 删除网络 docker network rm my_net
#networks: 
  #my_net: 
    #external: true

相关推荐

鸿蒙操作系统的核心组件(五):分布式文件系统

HarmonyOS的文件系统是其分布式架构的核心组成部分,具备本地高效存储与跨设备协同的双重优势。文件系统架构与层级设计HarmonyOS文件系统遵循分层设计,由内核层、系统服务层、框架层和应用层构成...

分布式系统架构终极指南:一文吃透核心技术栈与高薪进阶秘籍!

“为什么阿里、腾讯的系统能扛住双11亿级流量?为什么你的项目一上云就崩?凌晨3点,张工程师盯着监控大屏上飙升的CPU曲线和雪崩式的服务超时报警,手指发抖地敲下了一行kill-9——这已经是本周第3次...

Zookeeper:分布式架构详解、分布式技术详解、分布式事务

优质文章,及时送达作者|Java高级互联网架构链接|toutiao.com/a6742369092881089028/一、分布式架构详解1、分布式发展历程1.1单点集中式特点:App、DB...

如果让你自己设计一个分布式架构的中间件系统,该怎么做?

目录1、Master-Slave架构2、异步日志持久化机制3、检查点机制:定时持久化全量数据4、引入检查点节点5、总结&思考这篇文章,给大家来聊一个生产级的中间件系统的架构设计实践,希望给对中间件...

400亿参数大模型:分布式算力,DeepSeek架构,3090单卡部署

闻乐发自凹非寺量子位|公众号QbitAI打破科技巨头算力垄断,个人开发者联手也能训练超大规模AI模型?NousResearch宣布推出PsycheNetwork,可以将全球算力整合起来训...

go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

目录go微服务框架kratos学习笔记九(kratos全链路追踪zipkin)zipkin使用demo数据持久化本节简单搭建一下zipkin,zipkin是Twitter基于google的分布式监...

组图丨安全生产管理思维导图

...

《孙子兵法》十三篇思维导图,值得收藏

...

高中化学思维导图整理汇总(必修+选修),建议转发收藏

化学必修1化学必修2化学选修3化学选修4化学选修5...

【思维导图】高中生物知识点框架导图

刑诉法知识框架思维导图,建议打印收藏

为了让各位宝子们复习效率更高,今天合合菌为大家整理了刑诉法学科的思维导图。大家可以利用思维导图来加深对刑诉法各个知识点的理解,搭建知识框架。刑诉法学科思维导图后续合合菌还会为大家准备其他学科的思维导图...

一定要收藏的面试思维导图

我是可爱又迷人:1.常见面试题有哪些?主要从以下一些知识点做了准备:常用的分析方法、Excel、SQL、A/B测试、产品分析。然后每份面试针对职位要求,还有前期和HR聊天一点点了解这个职位之后,定...

八年级地理知识点思维导图梳理,这样记节省80%的时间,抓紧收藏

右上角关注我,每天分享这方面的技巧!点击左上角“我的头像”,【最上方】更多实用内容!不怕同桌是学霸,就怕学霸有方法。很多家长总是觉得孩子学习不努力,写作业没有耐心,听课没有效率。所以总是在不停...

思维导图:比喻和拟人使用大全,家长收藏好,孩子把作文写“活”

学生在写作文的时候必须要用到各种修辞手法,才会使得作文形象生动,比较常用的修辞手法有比喻、比拟、排比、反复、借代、借喻、设问、反问、夸张、对偶等。但很多孩子不清楚比喻、比拟的区别。所以使用起来经常不到...

《易经》思维导图,一图读懂古人智慧(收藏)

《易经》算是一部关于万象变化的古老经典了,一度被誉为“诸经之首,大道之源”,相传成书于西周时期,作者为伏羲。很多朋友将《易经》与《周易》混为一潭,实际上它们并不是一回事,《易经》分为三部易书,分别是《...

取消回复欢迎 发表评论: