phpwind 做的网站/seo网站推广什么意思
本文介绍![如何使用Opentelemetry+jaeger实现分布式链路追踪]
关于opentelemetry的介绍可以看下面的文章
https://blog.csdn.net/qq_62368250/article/details/143516314
本文中相关图片以及源代码地址
https://github.com/wuchenyanghaoshuai/others/blob/main/step39/README.md
如果有在测试用有任何使用当中的问题请与我联系
1. 安装CertManager 首选 step01
# 地址在 https://cert-manager.io/docs/installation/kubectl
# 请注意我部署的时候k8s集群1.23.1 如果是低于我这个版本的话,会对go环境支持的不是这么友好
# 去官方github去下载跟k8s集群版本对应的yaml文件,我这里使用的是v1.13.6
# 可以先wget下来,然后查看yaml里的具体内容然后再apply
# 如果你的空k8s版本低于1.19.0 可以去github里寻找低版本的yaml,一般会有版本对照表
2. 安装Jaeger all-in-one模式 step02
# 我这里使用的ingress暴露的,你也可以使用nodeport或者ingress暴露
# 关于image,我这里使用的是官方的镜像转存到阿里云cr的apiVersion: apps/v1
kind: Deployment
metadata:name: jaeger
spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:containers:- name: jaegerimage: jaegertracing/all-in-one:latest# image: registry.cn-hangzhou.aliyuncs.com/wuchenyang/jaegertracing-all-in-one:latest # 阿里云镜像env:- name: COLLECTOR_OTLP_ENABLEDvalue: "true"ports:- containerPort: 16686- containerPort: 14268
---
apiVersion: v1
kind: Service
metadata:name: jaeger
spec:selector:app: jaegertype: ClusterIPports:- name: uiport: 16686targetPort: 16686- name: collectorport: 14268targetPort: 14268- name: httpprotocol: TCPport: 4318targetPort: 4318- name: grpcprotocol: TCPport: 4317targetPort: 4317
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-jagernamespace: default
spec:ingressClassName: nginxrules:- host: jager.wuchenyangzhendehaoshuai.comhttp:paths:- backend:service:name: jaegerport:number: 16686path: /pathType: ImplementationSpecific
3. 安装opentelemetry-operator step03
#opentelemetry-operator与k8s版本有关,需要根据k8s版本进行安装,具体看具体看下面的地址
# https://github.com/open-telemetry/opentelemetry-operator/blob/main/docs/compatibility.md
# 如果你的k8s集群高于1.23 直接看这个md里的对照表就行,如果低于1.23,需要看下面的地址(本人1.23.1)里的对照关系
# https://github.com/open-telemetry/opentelemetry-operator/tree/v0.85.0 || k8s 1.22.1
# 然后在tag里找到v0.100.0 的installation manifest for kubernetes 右键复制链接地址 ,然后在终端wget 即可
# 在终端执行
kubectl apply -f opentelemetry-operator-v0.100.0.yaml
# 查看是否安装成功
kubectl get pod -n opentelemetry-operator-system# 如果下载不了image可以使用我的镜像(我pull下来tag的)
#registry.cn-hangzhou.aliyuncs.com/wuchenyang/kube-rbac-proxy:v0.13.1
#registry.cn-hangzhou.aliyuncs.com/wuchenyang/opentelemetry-operator:0.100.0
#实际使用的时候也可以将镜像pull下来,tag成官方的image
4. 部署otel-collector 跟Instrumentation step04
# cat 04otlp/Instrumentation.yaml
#这个因为我是java的demo所以下面那块写了java,如果是python或者go去官方照文档即可都是一样的,这里刚刚好有一个go的demo跟一个java的demo
# 有了这个配置以后,你可以在你的deploy里添加一个annotation instrumentation.opentelemetry.io/inject-java: "true"
#下面有我的deployoy 配置
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:name: instrumentation-sample
spec:propagators:- tracecontext- baggage- b3sampler:type: parentbased_traceidratioargument: "1"env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: otel-collector.default:4318java: env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: http://otel-collector.default:4317go: env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: http://otel-collector.default:4318
#其他配置的代码
java: # Java 特定配置env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://otel-collector.default:4317" # gRPC 端点(可选覆盖全局)python: # Python 特定配置env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://otel-collector.default:4317" # gRPC 端点(可选覆盖全局)go: # Go 特定配置(实验性 eBPF)env:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://otel-collector.default:4318" # gRPC 端点(可选覆盖全局)
# cat 04otlp/otlp.yaml
#这个配置就是otel-collector的配置,这里我使用的是jaeger的exporter,你也可以使用其他的exporter
#因为jager的后端没有配置es等存储,我这里使用的本机,所以数据保存不了30天往上
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:name: otel
spec:config:receivers:otlp:protocols:grpc: {}http: {}processors:memory_limiter:check_interval: 1slimit_percentage: 75spike_limit_percentage: 15batch:send_batch_size: 10000timeout: 10sexporters:otlp/jaeger:endpoint: "jaeger.default:4317"tls:insecure: trueservice:pipelines:traces:receivers: [otlp]processors: [memory_limiter, batch] # 添加 processorsexporters: [otlp/jaeger]
5. 部署Java-Demo step05
#可以直接使用我的yaml
#svc那块你可以直接用ingress或者nodeport都可以,我是用了ingress,本地做了域名映射
#可以清晰的看到下面的yaml使用了annotation instrumentation.opentelemetry.io/inject-java: "true"
#如果是go项目的话需要添加instrumentation.opentelemetry.io/inject-go: "true",还有一个需要注意的地方,go项目需要单独提权限,而且是必须的
# 具体看官方文档的267行-287行,https://github.com/open-telemetry/opentelemetry-operator/blob/v0.85.0/README.md
#```yaml
#securityContext:
# capabilities:
# add:
# - SYS_PTRACE
# privileged: true
# runAsUser: 0
#```
apiVersion: apps/v1
kind: Deployment
metadata:name: java-demo
spec:strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 1replicas: 1selector:matchLabels:app: java-demotemplate:metadata:labels:app: java-demoannotations:prometheus.io/scrape: "true"prometheus.io/port: "9180"prometheus.io/path: /metricsinstrumentation.opentelemetry.io/inject-java: "true"spec:containers:- name: java-demoimage: registry.cn-hangzhou.aliyuncs.com/wuchenyang/java-demo:test-b0cbb8ports:- containerPort: 8080readinessProbe:httpGet:path: /port: 8080initialDelaySeconds: 20periodSeconds: 5timeoutSeconds: 3failureThreshold: 2resources:requests:memory: "512Mi"cpu: "0.5"limits:memory: "1024Mi"cpu: "1"env:- name: "JAVA_OPTS"value: "-Xms1g -Xmx1g -javaagent:/data/agent/skywalking-agent.jar -javaagent:/data/agent/jmx_prometheus_javaagent-0.14.0.jar=9180:/data/agent/jmx_exporter.yml"- name : PROFILEvalue: test
---
apiVersion: v1
kind: Service
metadata:name: java-demo
spec:selector:app: java-demoports:- protocol: TCPport: 8080targetPort: 8080nodePort: 30000type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-java-demo
spec:ingressClassName: nginxrules:- host: test.wuchenyangzhendehaoshuai.comhttp:paths:- backend:service:name: java-demoport:number: 8080path: /pathType: ImplementationSpecific
6. 访问java-demo以及jaeger-ui
浏览器输入 http://test.wuchenyangzhendehaoshuai.com/
点击页面选择数据选择提交
浏览器输入 http://jager.wuchenyangzhendehaoshuai.com/
查询刚刚提提交动作m的trace
7. Go项目demo step06
注意
如果你要使用我的go程序,需要提前在你的环境里准备好mysql环境,并且创建好数据库,表结构可以参考我的sql文件,具体看docker目录中详细解释
由于go的ebpf插桩在operator的0.88版本开始,我的k8s版本为1.23.1,所以我本次使用的是v0.100.0,做测试的时候,一定要看好自己的k8s版本与operator版本的对应关系
按照官方文档,需要在注解里添加主程序的位置
Go 自动注入的实现依赖于 eBPF(uprobe),但当前环境不支持所需的内核功能。
由于我的系统使用的是centos7.9,内核版本默认的是3.10.x,所以需要升级内核版本,要不然的话在go自动插桩的时候那个会直接报错,但是不会影响服务正常
如果你是centos7.9的话得需要升级一下,如果你的内核高于我这个版本5.2.x就可以,则不需要
go跟java服务不一样的地方在于java是以initcontainer的方式,go是sidcar的方式,go项目启动以后是2/2的方式,如果你kubectl get pods 去看的话
升级步骤如下(所有节点都需要执行):参考文档: https://www.jb51.net/article/265146.htm下载地址: http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/wget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.6.14-1.el7.elrepo.x86_64.rpmwget http://193.49.22.109/elrepo/kernel/el7/x86_64/RPMS/kernel-ml-5.6.14-1.el7.elrepo.x86_64.rpmrpm -ivh *.rpmgrub2-set-default 0grub2-mkconfig -o /boot/grub2/grub.cfgreboot[root@km ~]# uname -r5.6.14-1.el7.elrepo.x86_64
# 我是使用ingress暴露,可以根据自身情况选择使用nodeport,
apiVersion: apps/v1
kind: Deployment
metadata:name: gin-demo
spec:replicas: 1selector:matchLabels:app: gin-demostrategy:type: RollingUpdaterollingUpdate:maxSurge:maxUnavailable: 0minReadySeconds: 5revisionHistoryLimit: 10template:metadata:labels:app: gin-demoannotations:instrumentation.opentelemetry.io/inject-go: "true"instrumentation.opentelemetry.io/otel-go-auto-target-exe: "/app/main"instrumentation.opentelemetry.io/container-names: "gin-demo"spec:containers:- name: gin-demoimage: registry.cn-hangzhou.aliyuncs.com/wuchenyang/gin-demo:v4securityContext:privileged: truerunAsUser: 0imagePullPolicy: Alwaysports:- containerPort: 8081readinessProbe:httpGet:path: /pingport: 8081initialDelaySeconds: 20periodSeconds: 5timeoutSeconds: 3failureThreshold: 2resources:requests:memory: "256Mi"cpu: 0.5limits:memory: "512Mi"cpu: 1
---
apiVersion: v1
kind: Service
metadata:name: gin-demo-servicenamespace: default
spec:ports:- name: httpport: 8081targetPort: 8081protocol: TCPtype: NodePortselector:app: gin-demo
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-gin-demo
spec:ingressClassName: nginxrules:- host: gin.wuchenyangzhendehaoshuai.comhttp:paths:- backend:service:name: gin-demo-serviceport:number: 8081path: /pathType: ImplementationSpecific
8. 访问Go项目以及jaeger-ui
浏览器输入 gin.wuchenyangzhendehaoshuai.com
登录后台系统(用户名密码为admin/password),默认是/login页面,也可以直接/home跳过登录
浏览器输入 jaeger.wuchenyangzhendehaoshuai.com,选择相对应的服务
相关文章:

如何使用Opentelemetry+jaeger对Go与Java项目实现分布式链路追踪
本文介绍![如何使用Opentelemetryjaeger实现分布式链路追踪] 关于opentelemetry的介绍可以看下面的文章 https://blog.csdn.net/qq_62368250/article/details/143516314本文中相关图片以及源代码地址 https://github.com/wuchenyanghaoshuai/others/blob/main/step39/README.…...

LabVIEW闭环控制系统硬件选型与实时性能
在LabVIEW闭环控制系统的开发中,硬件选型直接影响系统的实时性、精度与稳定性。需综合考虑数据采集速度(采样率、接口带宽)、计算延迟(算法复杂度、处理器性能)、输出响应时间(执行器延迟、控制周期&#x…...

Html5学习教程,从入门到精通, HTML5超链接应用的详细语法知识点和案例代码(18)
HTML5超链接应用的详细语法知识点和案例代码 超链接(Hyperlink),也称为跃点链接,是互联网和文档编辑中的一种重要概念。 超链接的定义 超链接是指从一个网页指向一个目标的连接关系,这个目标可以是另一个网页&#…...

STM32 HAL库 CAN过滤器配置
之前在STM32 f407 CAN收发 基于HAL库和Cubemx配置_stm32f407can收发程序-CSDN博客这篇博文里写了一下配置CAN收发的方法,当时由于并没有使用过滤器的现实需求,所以就也没仔细研究。现在工作中确实需要用到过滤器了,有些项目中控制器和发动机E…...

【前端面试题】Vu3常见的面试题
1.Vue3与 Vue2的核心区别有哪些? 响应式系统 : Vue2:通过Object.defineProperty 实现响应式。这种方式在处理对象属性的添加和删除时存在局限性,且无法直接监控数组的变化 ;Vue3:采用Proxy 实现响应式&…...

【数据分享】2001-2024年我国逐年植被净初级生产力(NPP)数据
植被净初级生产力(Net Primary Productivity,NPP)是生态学中的一个重要概念,表示单位面积植被在特定时间内吸收的净光合有机物,是衡量生态系统中植物通过光合作用所产生的有机物质减去植物呼吸作用消耗的有机物质的量&…...

java-正则表达式
一、正则表达式能干什么? ✅ 验证格式:手机号、邮箱、日期✅ 提取数据:从日志/文本中抓取关键信息✅ 替换文本:批量修改字符串内容 二、Java正则核心API Java中用 java.util.regex 包的两个类: Pattern:…...

正则表达式(复习)
文章目录 一、[]: 一个字符集合二、{}: 重复次数三、特殊符号四、(): 分组五、python代码示例六、注意 正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个…...

sonarqube+SonarScanner+postpresql+jenkins
本地执行参考这篇 sonarqubeSonarScannerPostgreSQL实现代码质量扫描(windows)_sonarqube 10.7部署-CSDN博客 集成到Jenkins中操作如下 在 Jenkins 中安装 SonarQube Scanner 和配置 Job 1、安装 SonarQube Scanner 插件: 在 Jenkins 的管理…...
牛客周赛Round 84
本场比赛难度不大,也是本人第一次AK,最后一题用组合数学推公式,本篇博客主要讲解最后一题的思路 G-小红的陡峭值(五)(hard)_牛客周赛 Round 84 思路:本题要我们求p/q mod M ,即p*&am…...

TDengine 配置 ODBC 数据源
简介 TDengine ODBC 是为 TDengine 实现的 ODBC 驱动程序,支持 Windows 系统的应用(如 PowerBI 等)以及用户自定义开发的应用程序,通过 ODBC 标准接口访问本地、远程和云服务的 TDengine 数据库。 TDengine ODBC 提供基于 WebSo…...

numpy常用函数详解
在深度神经网络代码中经常用到numpy库的一些函数,很多看过之后很容易忘记,本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数,该函数主要用于创建等差数列。它的使用方法如下所示: numpy.arange([star…...

deepseek 3FS编译
3FS在ubuntu22.04下的编译(记录下编译过程,方便后续使用) 环境信息 OS ubuntu 22.04内核版本 6.8.0-52-genericlibfuse 3.16.1rust 1.75.0FoundationDB 7.1.66meson 1.0.0ninja 1.10.1 libfuse编译 以下建议均在root下执行 pip3 install…...

【CXX】6.2 str — rust::Str
Rust::Str 公共 API // rust/cxx.hclass Str final { public:Str() noexcept;Str(const Str &) noexcept;Str(const String &) noexcept;// 如果输入不是 UTF-8,抛出 std::invalid_argument 异常。Str(const std::string &);Str(const char *);Str(con…...

制作三维软件学习路线
制作三维软件是一项复杂而富有挑战性的任务,涉及多个领域的知识。下面是一个建议的学习路线,涵盖从基础到高级的知识和技能。你可以根据自己的背景和兴趣进行调整。 ### 1. 编程基础 - **学习编程语言**:C或Python是常用的语言,了…...

【RabbitMQ】事务
事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的,该协议实现了事务机制,因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的,…...

常见的交换机端口类型
在计算机网络中,Access端口 和 Trunk端口 是两种常见的交换机端口类型,主要用于VLAN(虚拟局域网)的配置。它们的主要区别在于如何处理VLAN标签和数据帧。 1. Access端口 Access端口通常用于连接终端设备(如PC、打印机…...

Linux Shell 脚本编程极简入门指南
一、学习前提准备 ✅ 环境要求: Linux系统(Ubuntu/CentOS等)或 WSL (Windows用户) 任意文本编辑器(推荐VSCode/Vim) 基础命令行操作能力 🔍 验证环境: # 查看系统默认Shell echo $SHELL #…...

【医院管理会计专题】7.解锁本量利分析:医院医疗服务决策的智慧密码
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院管理面临着诸多挑战,如何实现高效运营、提升服务质量并控制成本成为关键问题。管理会计作为一种重要的管理工具,在医院管理中发挥着越来越重要的作用。本…...
Kotlin和Java区别
哈哈哈,前段时间,面试的时候,突然问到我Kotlin和Java的区别,一下子把我问懵逼了,确实没遇到问这个的,想了下,说了下Kotlin的编译时空检查机制,代码更简洁,很多封装好的AP…...

Taro 面试题
基础概念 1. Taro 是什么?它的核心特点有哪些? Taro 是京东开源的 多端统一开发框架,基于 React 语法,可编译到 微信小程序、H5、React Native 等多个端。 核心特点: 多端适配:一套代码运行多个端支持 …...

Java部署在window启动报unable tocreate tempdir
在Windows系统中,Java应用在运行时会试图在默认的临时目录中创建文件。该临时目录通常由系统环境变量TEMP或TMP指定。如果这些变量设置不正确、指向一个无效的路径,或者操作系统的权限不足,就会导致“Unable to create tempdir”错误。 解决…...

基于deepseek和开放题库,构建专业大模型微调在线答题系统
为什么要进行大模型微调 大模型微调是将预训练模型适配到特定任务或领域的关键技术,正常情况下大模型通过海量通用数据训练获得广泛知识,但其参数和表征空间面向通用场景,难以直接适配垂直领域或复杂任务。例如在通用医疗问答模型在具体病症诊…...

ios 小组件和数据共享
创建主工程就不必讲了 1 创建小组件 创建子工程 [new Target ] 选择 [ Widger Extension] 小组件入口是WidgetBundle文件,可以进行多个小组件的调试 TestWidget2文件是主要操作,小组件使用swiftUI布局,使用 AppIntent进行事件处理ÿ…...

LVTTL(Low Voltage Transistor-Transistor Logic)电平详解
一、LVTTL电平的定义与核心特性 LVTTL(低压晶体管-晶体管逻辑)是传统TTL(5V)的低电压版本,工作电压通常为3.3V,旨在降低功耗并适配现代低电压集成电路,同时保持与TTL的逻辑兼容性。其核心特点如…...

element tree树形结构默认展开全部
背景: el-tree树形结构,默认展开全部,使用属性default-expand-all【是否默认展开所有节点】;默认展开一级,设置default-expanded-keys【默认展开的节点的 key 的数组】属性值为数组。 因为我这里的数据第一级是四川【省…...

统计登录系统10秒内连续登录失败超过3次的用户
为防止暴力破解用户账号的行为,在输入账号和密码时一般都会限制用户尝试密码输出错误的次数,如果用户多次输错密码后,将在一段时间内锁定账号,常见的有银行类APP、个税App等应用,如下是用户账号密码输入错误的提示图&a…...

音视频软件工程师面试题
一、基础知识 编解码相关 H.264 和 H.265(HEVC)的主要区别是什么?视频编解码的基本流程是什么?关键技术有哪些?音频编解码(如 AAC、MP3、Opus)的区别和应用场景?什么是 B 帧、P 帧、I 帧?它们的作用是什么? 流媒体协议RTMP、HTTP-FLV、HLS、WebRTC 的区别和应用场景…...

架构师面试(十四):注册中心设计
问题 大家或多或少都接触过【注册中心】,对注册中心的基本功能,如:服务注册、服务发现、健康检查和变更通知 ,肯定是耳熟能详的;那么大家对注册中心的架构设计是否了解呢? 如果让你负责设计一个分布式的注…...

ctf-web: php原生类利用 -- GHCTF Popppppp
源代码 <?php error_reporting(0); class CherryBlossom { public $fruit1; public $fruit2; public function __construct($a) {$this->fruit1 $a; } function __destruct() { echo $this->fruit1; } public function __toString() { $newFunc …...