K8S SWCK SkyWalking全链路跟踪工具安装
官方参考:
如何使用java探针注入器?
配置两个demo,建立调用关系,
首先创建一个基础镜像dockerfile
from centos
先安装java
参考: linux rpm方式安装java
JAVA_HOME=/usr/java/jdk1.8.0-x64
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
vi /etc/profile
source /etc/profile
java -version
需要安装maven,并修改镜像地址为阿里的,方便下载
参考:Linux中maven下载、安装、配置详细教程
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
vim /etc/profile
export MAVEN_HOME=/root/maven/apache-maven-3.8.8
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
source /etc/profile
mvn -version
build the springboot and springcloudgateway image
推送到仓库
harbor/yourharbor/base:v0.0.1
下载这两个demo的代码
$ git clone https://github.com/dashanji/swck-spring-cloud-k8s-demo
$ cd swck-spring-cloud-k8s-demo && make
打成镜像并推送至仓库
使用es作为存储,需要创建storage
参考:Storage Usage
vi storage-swck.yamlapiVersion: operator.skywalking.apache.org/v1alpha1
kind: Storage
metadata:name: swck-storagenamespace: develop
spec:type: elasticsearchconnectType: externaladdress: "http://your-elasticsearch:9200" #ES地址,如果在其它命令空间,需要在域名后面添加命名空间,例如:.develop#security: #user:# secretName: defaultkubectl apply -f storage-swck.yaml
检查安装是否成功
kubectl get storage -n develop
安装证书管理器(cert-manger)
wget https://github.com/jetstack/cert-manager/releases/download/v1.13.3/cert-manager.yaml
kubectl apply -f cert-manager.yaml
检查安装是否成功
kubectl get pod -n cert-manager
安装SWCK operator
mkdir swck & cd swck
wget https://archive.apache.org/dist/skywalking/swck/0.6.1/skywalking-swck-0.6.1-bin.tgz
tar -xvf skywalking-swck-0.6.1-bin.tgz
operator有个镜像需要修改
参考:(问题解决) 缺少gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0

kubectl apply -f /config/operator-bundle.yaml
检查安装是否成功
kubectl get pod -n skywalking-swck-system
部署oap和ui
在 develop 命名空间中部署 OAPServer 组件和 UI 组件。
wget https://raw.githubusercontent.com/apache/skywalking-swck/master/operator/config/samples/default.yaml
cp default.yaml oap-ui-default.xmlvi oap-ui-default.xml
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: OAPServer
metadata:name: defaultnamespace: develop
spec:version: 9.2.0instances: 1image: apache/skywalking-oap-server:9.2.0service:template:type: ClusterIPstorage:name: swck-storage
---
apiVersion: operator.skywalking.apache.org/v1alpha1
kind: UI
metadata:name: defaultnamespace: develop
spec:version: 9.2.0instances: 1image: apache/skywalking-ui:9.2.0OAPServerAddress: http://default-oap:12800service:template:type: NodePortingress:host: demo.ui.skywalking
#yaml中的9.2.0版本不需要修改,
9.5和9.7版本均不能自动生成sw_record索引
(Skywalking is missing the 'sw_records-all' index. #10910);
name: default也要修改,改完之后各种异常
安装
kubectl apply -f oap-ui-default.xmlkubectl get oapserver -n develop
kubectl get ui -n developkubectl get pod -A|grep def
查看oap和ui的日志,看否成功
kibana检查数据是否进入ES
查看SW开头的索引
修改configMap中的oap地址
kubectl edit configmap skywalking-swck-java-agent-configmap -n skywalking-swck-system
改成develop空间的地址,前面已安装到develop空间中了,default-oap.develop:11800
在当前空间中使用这个oap地址,
注意:如果在develop空间中的服务也需要使用这个默认配置,可以在develop空间中修改这个configmap
部署 spring boot 应用
创建 springboot-system 命名空间。
$ kubectl create namespace springboot-system
给 springboot-system 命名空间打上标签使能 java 探针注入器。
$ kubectl label namespace springboot-system swck-injection=enabled
接下来为 spring boot 应用对应的部署文件 springboot.yaml ,其中使用了 annotation 覆盖默认的探针配置,比如 service_name ,将其覆盖为 backend-service 。
[root@yourLinux swck]# vi springboot.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: demo-springbootnamespace: springboot-system
spec:selector:matchLabels:app: demo-springboottemplate:metadata:labels:swck-java-agent-injected: "true" # enable the java agent injectorapp: demo-springbootannotations:strategy.skywalking.apache.org/agent.Overlay: "true" # enable the agent overlayagent.skywalking.apache.org/agent.service_name: "backend-service" # agent.skywalking.apache.org/collector.backend_service: "default-oap.default:11800"spec:containers:- name: springbootimagePullPolicy: IfNotPresentimage: yourharborIP/yourharbor/app:v0.0.1command: ["java"]args: ["-jar","/app.jar"]
---
apiVersion: v1
kind: Service
metadata:name: demonamespace: springboot-system
spec:type: ClusterIPports:- name: 8085-tcpport: 8085protocol: TCPtargetPort: 8085selector:app: demo-springboot
在 springboot-system 命名空间中部署 spring boot 应用。
$ kubectl apply -f springboot.yaml
查看部署情况。
$ kubectl get pod -n springboot-system
通过 JavaAgent 查看最终注入的 java 探针配置。
$ kubectl get javaagent -n springboot-system
部署 spring cloud gateway 应用
创建 gateway-system 命名空间。
$ kubectl create namespace gateway-system
给 gateway-system 命名空间打上标签使能 java 探针注入器。
$ kubectl label namespace gateway-system swck-injection=enabled
kubectl get ns --show-labels
接下来为 spring cloud gateway 应用对应的部署文件 springgateway.yaml ,其中使用了 annotation 覆盖默认的探针配置,比如 service_name ,将其覆盖为 gateway-service 。此外,在使用 spring cloud gateway 时,我们需要在探针配置中添加 spring cloud gateway 插件。
容器中:/sky/agent/optional-plugins/目录下有这个apm(cloud-gateway-3.x)
需要注意的是,在使用 annotation 覆盖探针配置之前,需要增加 strategy.skywalking.apache.org/agent.Overlay: "true" 来使覆盖生效。
[root@yourLinux swck]# cat springgateway.yaml
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: demo-gatewayname: demo-gatewaynamespace: gateway-system
spec:selector:matchLabels:app: demo-gatewaytemplate:metadata:labels:swck-java-agent-injected: "true"app: demo-gatewayannotations:strategy.skywalking.apache.org/agent.Overlay: "true"agent.skywalking.apache.org/agent.service_name: "gateway-service" # agent.skywalking.apache.org/collector.backend_service: "default-oap.default:11800"optional.skywalking.apache.org: "cloud-gateway-3.x" # add spring cloud gateway pluginspec:containers:- image: yourharborIP/yourharbor/gateway:v0.0.1name: gatewaycommand: ["java"]args: ["-jar","/gateway.jar"]
---
apiVersion: v1
kind: Service
metadata:name: service-gatewaynamespace: gateway-system
spec:type: ClusterIPports:- name: 9999-tcpport: 9999protocol: TCPtargetPort: 9999selector:app: demo-gateway
在 gateway-system 命名空间中部署 spring cloud gateway 应用。
$ kubectl apply -f springgateway.yaml
查看部署情况。
$ kubectl get pod -n gateway-system
通过 JavaAgent 获取最终注入的java探针配置。
检查javaagent
$ kubectl get javaagent -n gateway-system
查看UI暴露的nodePort
kubectl get service default-ui -n develop
查看gateway地址及端口
kubectl get service service-gateway -n gateway-system
跑几百个请求测试一下
for i in {1..100}; do curl http://yourip:9999/gateway/hello && echo ""; done
打开ui查看
一个服务启动后,通过如下命令可以看到是否探针是否启动成功,oap使用的是哪个
kubectl get javaagent -A
通过describe命令可以观察一下initContainer中,javaagent是如何加到你的app中的
kubectl describe pod -l app=demo-springboot -n springboot-systemkubectl describe pod -l app=demo-gateway -n gateway-system
日志
pom.xml引入依赖:
<groupId>org.apache.skywalking</groupId>
<artifactId>apm-toolkit-logback-1.x</artifactId>
logback.xml添加appender
参考:
kywalking部署之后日志不显示
相关文章:
K8S SWCK SkyWalking全链路跟踪工具安装
官方参考:如何使用java探针注入器? 配置两个demo,建立调用关系, 首先创建一个基础镜像dockerfile from centos 先安装java 参考: linux rpm方式安装java JAVA_HOME/usr/java/jdk1.8.0-x64 CLASSPATH.:$JAVA_HOME/lib/tools.jar PATH…...
Apache Omid Idea Debug 环境搭建
IDEA 搭建 Apache Omid 源码 DEBUG 环境 Apache Omid 在 Apache HBase 之上提供了多行分布式事务的能力,支持全局 MVCC 功能。简单介绍编译过程。 1.下载 HBase2 并启动 https://dlcdn.apache.org/hbase/ 配置环境变量 export HBASE_HOME/xxx/hbase-2.4.18 exp…...
【面试宝藏】Go并发编程面试题
深入Go语言并发编程 Go语言以其简洁、高效的并发处理能力而闻名。在Go中,通过各种同步机制和原子操作,可以轻松地实现高性能并发编程。本文将深入探讨Go语言中的并发编程,包括Mutex、RWMutex、Cond、WaitGroup、原子操作等内容。 1. Mutex几…...
④单细胞学习-cellchat细胞间通讯
目录 1,原理基础 流程 受体配体概念 方法比较 计算原理 2,数据 3,代码运行 1,原理基础 原文学习Inference and analysis of cell-cell communication using CellChat - PMC (nih.gov) GitHub - sqjin/CellChat: R toolk…...
即时通讯平台及门户系统WorkPlus打造移动应用管理平台
在全球化和数字化时代,企业管理和沟通的方式正发生着巨大的变化。为了实现高效的协作和资源共享,企业越来越倾向于使用即时通讯及门户系统。这两种系统结合起来,可以提供一套完整的沟通和信息发布平台,促进内部协作和信息管理。 …...
React@16.x(12)ref 转发-forwardRef
目录 1,介绍2,类组件如何使用4,应用场景-高阶组件HOC 1,介绍 上篇文章中提到,ref 只能对类组件使用,不能对函数组件使用。 而 ref 转发可以对函数组件实现类似的功能。 使用举例: import Re…...
电脑世界的大冒险:用人体比喻让孩子轻松理解电脑20240603
电脑世界的大冒险:用人体比喻让孩子轻松理解电脑 作为一名在IT行业的老程序猿,我见证了电脑技术的飞速发展,也亲身体验了科技给生活带来的翻天覆地的变化。然而,在这个日新月异的数字时代,我意识到,与孩子…...
构建智慧银行保险系统的先进技术架构
随着科技的不断发展,智慧银行保险系统正日益受到关注。在这个数字化时代,构建一个先进的技术架构对于智慧银行保险系统至关重要。本文将探讨如何构建智慧银行保险系统的先进技术架构,以提升服务效率、降低风险并满足客户需求。 ### 1. 智慧银…...
来自大厂硬盘的降维打击!当希捷酷玩520 1TB SSD卷到369,请问阁下该怎么应对?
来自大厂硬盘的降维打击!当希捷酷玩520 1TB SSD卷到369,请问阁下该怎么应对? 哈喽小伙伴们好,我是Stark-C~ 今年4月份的时候因为电脑上的游戏盘突然挂掉,为了性价比选购了希捷酷玩520 1TB SSD,同时我也是…...
什么是封装?为什么是要封装?
封装是面向对象编程中的一种核心概念,它是将数据和操作数据的方法结合起来,形成一个整体,对外只暴露必要的接口,隐藏内部的具体实现细节。 封装的目的是为了实现信息隐藏和代码的模块化,具体原因如下: 1.…...
Spring Cloud | 服务 “注册与发现“ 框架 : Eureka框架
目录: Eureka 的 "工作机制" :一、Eureka 的 "工作原理" ( 两大组件 ) :1.1 Eureka Server ( 服务注册中心 )1.2 Eureka Client ( 服务/服务实例,其存在 "两种角色" : ①服务提供者 ②服务消费者 ) :Eureka Client 的 含义…...
编译链接问题
问题描述 C语言在编译的时候,提示链接的时候没有找到相应的方法 问题分析 代码文件结构: test.c test/1.c test/1.h test.c代码: #include “test/1.h” void main() { hello(); } test/1.c代码: void hello() { printf(“hel…...
电涡流的形成范围
电涡流的形成范围涉及多个方面,主要受到导体材料、磁场变化速度、导体形状和尺寸以及磁场方向的影响。以下是对这些因素的详细分析: 导体材料:金属和合金是最容易产生电涡流的材料,而非金属材料(如陶瓷、塑料等&#…...
学业辅导导师:文心一言智能体详细介绍和开发
一、前言 本期题目 开发方向:学习成长类 解读: AI技术在学习成长方向的应用正日益增多,本期赛题需围绕该方向开发智能体包括但不限于:作文辅导助手、个性化学习助手、考试助手、各垂类教育内容专家等 二、我的智能体:学业辅导…...
AI与NLP的完美结合:揭秘ChatGPT
AI与NLP的完美结合:揭秘ChatGPT 一、AI大模型的发展历程 AI大模型的发展可追溯到早期的深度学习技术。深度学习通过多层神经网络处理复杂的数据模式,显著提升了图像识别、语音识别等领域的性能。随后,研究人员将注意力转向NLP,开…...
提交一个Bug需要哪些信息?
软件在使用过程中存在的任何问题都叫做软件的缺陷,简称Bug,我认为要提交一个Bug首先得将这个Bug的核心内容说明一下,比如Bug的核心问题是什么、产生的前提、预期结果是什么、但实际结果是什么、以及附上一个证据图片。 然后提交时需要Bug报告…...
【Hive SQL 每日一题】统计每月用户购买商品的种类分布
文章目录 测试数据需求说明需求实现 测试数据 -- 创建 orders 表 DROP TABLE IF EXISTS orders; CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING );-- 插入 orders 数据 INSERT INTO orders VALUES (101, 1, 1001, 2023-01-01), (102, 1, 1…...
Nginx01-HTTP简介与Nginx简介(安装、命令介绍、目录介绍、配置文件介绍)
目录 HTTP简介HTTP原理查看访问网站的详细流程curl -vwget --debug 查看网站访问量HTTP协议版本HTTP协议交互HTTP 请求请求报文起始行请求头 HTTP响应响应报文起始行响应头 Nginx常见的Web服务常见网站服务 安装NginxNginx目录结构Nginx启动管理Nginx常用命令 Nginx配置文件主配…...
JAVA: 抽象类和接口
Java中可以可以定义不含方法体的方法,方法的方法体由其所在类的子类根据实际需求去实现,这样的方法称为抽象方法(Abstract Method),包含抽象方法的类必须是抽象类(Abstract Class)。 抽象方法和…...
风景的短视频一分钟:成都科成博通文化传媒公司
风景的短视频一分钟:时光凝固的画卷 在快节奏的现代生活中,我们常常被繁忙和琐碎所困扰,渴望在喧嚣中找到一丝宁静与美好。而风景的短视频,正是这样一份能够让我们在短时间内沉浸于自然之美的奇妙礼物。成都科成博通文化传媒公司…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
