SkyWalking使用案例-2

news2024/12/25 12:28:41

文章目录

      • SkyWalking实现基于容器环境Dubbo微服务链路跟踪
        • 部署Dubbo Provider
          • 构建Dubbo Provider镜像
          • 运行dubbo-provider
        • 部署Dubbo Consumer
          • 构建Dubbo Consumer镜像
          • 运行dubbo-consumer
        • 验证
      • SkyWalking收集python项目数据
      • Skywalking告警
        • Skywalking指标
        • Skywalking告警规则

SkyWalking实现基于容器环境Dubbo微服务链路跟踪

在这里插入图片描述

在k8s中运行zookeeper集群可以参考https://blog.csdn.net/weixin_43266367/article/details/126856526?spm=1001.2014.3001.5501

这里已经提前再K8s集群中运行了一个zookeeper集群,如下图:
在这里插入图片描述

部署Dubbo Provider

构建Dubbo Provider镜像

Dockerfile如下:

FROM harbor-server.linux.io/base-images/ubuntu-jdk-base:8u131

LABEl maintainer="admin@163.com"

RUN mkdir -p /apps/dubbo/provider
ADD skywalking-agent /apps/dubbo/provider/skywalking-agent
ADD dubbo-server.jar /apps/dubbo/provider/
ADD run_java.sh /apps/dubbo/provider/

RUN useradd -m -u 2023 user1 && chown -R user1:user1 /apps/  && chmod +x /apps/dubbo/provider/*.sh

CMD ["/apps/dubbo/provider/run_java.sh"]

所有构建文件如下图所示:

在这里插入图片描述

其中skywalking-agent目录是SkyWalking Java Agent解压后的目录,需要修改其中的配置文件指定服务名称和SkyWalking Server的地址

vim kywalking-agent/config/agent.config	
########################################
 20 agent.service_name=${SW_AGENT_NAME:dubbo-provider}	#agent监控的项目或服务在SkyWalking UI上对应的服务名称
 21
 22 # The agent namespace
 23 agent.namespace=${SW_AGENT_NAMESPACE:n70}	#agent所在的名称空间,可以用来标示服务所属项目
104 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.122.28:11800}	#指定SkyWalking Server的地址和端口

dubbo-server.jar是项目代码,里面的配置文件config.properties已经指定了zookerper的地址

root@sw-agent-node-01:~/dubbo-server# cat config.properties
dubbo.registry=zookeeper://zookeeper3.default.svc.cluster.local:2181?backup=zookeeper2.default.svc.cluster.local:2181,zookeeper1.default.svc.cluster.local:2181
dubbo.port=20880

run_java.sh是服务启动脚本,内容如下:

#!/bin/bash
su - user1 -c "java -javaagent:/apps/dubbo/provider/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/provider/dubbo-server.jar"

执行构建,上传镜像到仓库

docker build -t harbor-server.linux.io/n70/dubbo-provider:v1.0 .
docker push harbor-server.linux.io/n70/dubbo-provider:v1.0
运行dubbo-provider

在K8s集群上运行dubbo-provider,部署文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-provider
spec:
  selector:
    matchLabels:
      app: dubbo-provider
  replicas: 2
  template:
    metadata:
      labels:
        app: dubbo-provider
    spec:
      containers:
      - name: dubbo-provider
        image: harbor-server.linux.io/n70/dubbo-provider:v1.0
        imagePullPolicy: Always
        ports:
        - containerPort: 20880

将部署文件应用到集群上,等到Pod就绪
在这里插入图片描述
查看Pod的日志确保服务已经正常启动
在这里插入图片描述

部署Dubbo Consumer

构建Dubbo Consumer镜像

DockerFile如下:

FROM harbor-server.linux.io/base-images/ubuntu-jdk-base:8u131

LABEl maintainer="admin@163.com"

RUN mkdir -p /apps/dubbo/consumer
ADD skywalking-agent /apps/dubbo/consumer/skywalking-agent
ADD dubbo-client.jar /apps/dubbo/consumer/
ADD run_java.sh /apps/dubbo/consumer/

RUN useradd -m -u 2023 user1 && chown -R user1:user1 /apps/  && chmod +x /apps/dubbo/consumer/*.sh

CMD ["/apps/dubbo/consumer/run_java.sh"]

所有构建文件如下图所示:

在这里插入图片描述

其中skywalking-agent目录是SkyWalking Java Agent解压后的目录,需要修改其中的配置文件指定服务名称和SkyWalking Server的地址

vim kywalking-agent/config/agent.config	
########################################
 20 agent.service_name=${SW_AGENT_NAME:dubbo-consumer}
 21
 22 # The agent namespace
 23 agent.namespace=${SW_AGENT_NAMESPACE:n70}
104 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.122.28:11800}

run_java.sh是服务启动脚本,内容如下:

#!/bin/bash
su - user1 -c "java -javaagent:/apps/dubbo/consumer/skywalking-agent/skywalking-agent.jar -jar /apps/dubbo/consumer/dubbo-client.jar"

dubbo-client.jar是项目代码,里面的配置文件config.properties已经指定了zookerper的地址

root@sw-agent-node-01:~/dubbo-client# cat config.properties
dubbo.registry=zookeeper://zookeeper1.default.svc.cluster.local:2181?backup=zookeeper2.default.svc.cluster.local:2181,zookeeper3.default.svc.cluster.local:2181

执行构建,上传镜像

docker build -t harbor-server.linux.io/n70/dubbo-consumer:v1.0 .
dockers push harbor-server.linux.io/n70/dubbo-consumer:v1.0
运行dubbo-consumer

在K8s集群上运行dubbo-consumer,部署文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubbo-consumer
spec:
  selector:
    matchLabels:
      app: dubbo-consumer
  replicas: 2
  template:
    metadata:
      labels:
        app: dubbo-consumer
    spec:
      containers:
      - name: dubbo-consumer
        image: harbor-server.linux.io/n70/dubbo-consumer:v1.0
        imagePullPolicy: Always
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: dubbo-consumer-svc
spec:
  type: NodePort
  selector:
    app: dubbo-consumer
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP
    nodePort: 30080

将部署文件应用到集群上,等到Pod就绪
在这里插入图片描述
在这里插入图片描述

查看Pod的日志确保服务已经正常启动
在这里插入图片描述

验证

通过nodeport访问dubbo-consumer 产生一些数据
在这里插入图片描述

在SkyWalking中查看对应Service的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SkyWalking收集python项目数据

skywalking python-agent官方文档:https://skywalking.apache.org/docs/skywalking-python/v1.0.0/readme/

创建一个Django测试项目

pip3 install Django
django-admin startproject mysite
cd mysite/
python3 manage.py startapp app1
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuse

在这里插入图片描述

安装skywalking python-agent

pip3 install apache-skywalking

通过环境变量传递一些配置给skywalking python-agent,其他可以使用的变量可以参考:https://skywalking.apache.org/docs/skywalking-python/v1.0.0/en/setup/configuration/

export SW_AGENT_NAME='python-app1'
export SW_AGENT_NAMESPACE='n70'
export export SW_AGENT_COLLECTOR_BACKEND_SERVICES=192.168.122.28:11800

启动Django项目

sw-python -d run python3 manage.py runserver 192.168.122.32:80

sw-python是skywalking python-agent提供的一个命令行工具,使用它运行python项目就可以收集数据发送到skywalking server

访问Django页面,产生一些数据

在这里插入图片描述
在这里插入图片描述

在SkyWalking UI上查看对应的数据
在这里插入图片描述
在这里插入图片描述

Skywalking告警

Skywalking告警设置官方文档:https://skywalking.apache.org/docs/main/v9.3.0/en/setup/backend/backend-alarm/

Skywalking指标

Skywalking的告警流程和Prometheus类似,首先定义一个告警规则文件,根据里面rule的定义判断指标是否超过阈值,是否需要触发告警,告警触发后再通过wenhook发送给接收者。

Skywalking的指标是通过查询后端存储中的数据生成的,而不是通过agent收集的。Skywalking默认已经提供了一些指标定义文件(.oal文件),存放在Skywalking安装目录下的config/oal/目录下。
在这里插入图片描述

指标定义的格式是:

<metrics_name> = <Query SQL>

在这里插入图片描述

core.oal文件中有一些常用指标:

service_resp_time	#服务响应时间
service_sla		#服务的请求成功率SLA, 比如99%
service_cpm		#服务每分钟的吞吐量
service_percentile	#指定最近多少数据范围内的响应时间百分比,即p99、p95、p90在内的数据统计结果
service_apdex		#服务性能指标评分

endpoint_cpm	#端点每分钟吞吐量
endpoint_resp_time		#端点响应时间
endpoint_sla	#端点的请求成功率SLA, 比如99%
endpoint_percentile		#指定最近多少数据范围内的响应时间百分比,即p99、p95、p90在内的数据统计结果

Skywalking告警规则

Skywalking默认提供了一个告警规则示例文件,Skywalking安装目录下的config/alarm-settings.yml

Skywalking的告警规则文件主要包含两部分:一部分是rule定义;另一半部分是webhook定义,用于指定告警接收人

告警规则rule定义格式:

  service_resp_time_rule:	#规则名称,唯一的,必须以_rule结尾
    metrics-name: service_resp_time		#指标名称
    op: ">"		#操作符,支持>、<、>=、<=、==
    threshold: 1000		#指标阈值
    period: 10		#检测间隔周期,单位分钟
    count: 3	#匹配成功多少次才会触发告警
    silence-period: 5	#告警后的静默时间,单位分钟
    message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.	#告警信息

下面是一个示例文件:

root@sw-node-01:/usr/local/src/apache-skywalking-apm-bin# cat config/alarm-settings.yml
rules:
  service_cpm_rule:	#监控所有服务的每分钟请求量,如果超过1就告警
    metrics-name: service_cpm
    op: ">"
    threshold: 1	#为了测试,故意设置为1
    period: 10
    count: 1
    silence-period: 5
    message: Cpm of service {name} is more than 1 in last 10 minutes.


dingtalkHooks:	#钉钉接收者定义
  textTemplate: |-	#消息模板
    {
      "msgtype": "text",
      "text": {
          "content": "Apache SkyWalking Alarm \n alertname: %s."
       }
     }
  webhooks:	#钉钉webhook地址
    - url: https://oapi.dingtalk.com/robot/send?access_token=a013ec66bf3cf4dc338e167982f349bf9bd2f3013830850e8e1ba4c1168330c5

访问前面的dubbo-consumer,使skywalking产生告警

在这里插入图片描述

钉钉收到的告警信息

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

62. 不同路径

62. 不同路径 一个机器人位于一个 m∗nm * nm∗n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路…

virtualbox7虚拟机中安装苹果macOS big sur系统详细教程

第1步&#xff0c;在 Windows 10/11 PC 上启用虚拟化。 现在的电脑一般都默认开启虚拟化技术了。 如果你遇到一些报错&#xff0c;比如收到错误消息“无法在虚拟机上打开会话”&#xff0c;可以查看 如果没有遇到问题&#xff0c;可以直接进入到第二步。 第2步&#xff0c;在…

【Spark分布式内存计算框架——Spark Streaming】12. 偏移量管理(上)代码重构与Checkpoint 恢复

6. 偏移量管理 针对前面实现【百度热搜排行榜Top10】实时状态统计应用来说&#xff0c;当应用关闭以后&#xff0c;再次启动&#xff08;Restart&#xff09;执行&#xff0c;并没有继续从上次消费偏移量读取数据和获取以前状态信息&#xff0c;而是从最新偏移量&#xff08;L…

JVM 不同垃圾回收器的日志格式分析

1、GC日志采集 在服务器上我们需要配置一些参数才能采集到历史的GC日志信息&#xff0c;这些参数通常在项目启动的时候就需要指定&#xff0c; 如果你项目是jar包&#xff0c;可以按照下面方式指定这些GC参数即可。 下面这些参数意思是把GC日志记录到/opt/app/abc-user/ard-…

蓝桥杯备赛——Echarts学习

文章目录前言学习 ECharts 的方法快速上手基础知识option 配置选项可选配置title 标题组件tooltip 提示框组件axisPointer 坐标轴指示器legend 图例组件toolbox 工具栏坐标轴xAxis和yAxisseries &#xff08;[ ]用数组表示,数组里是一个个数据对象&#xff09;饼状图散点图交互…

盘点代码情诗集合❤,程序员表白的巅峰之作,特此奉献

程序员怎么表白&#xff1f;写代码啊&#xff01;每到情人节&#xff0c;程序员们就纷纷出动&#xff0c;各种别出心裁的表白代码倾囊相送。我曾被大批表白代码砸晕&#xff0c;沉浸在“虚拟的”幸福感中不能自拔。我在众多代码中精选了以下几十条&#xff0c;每一条都是文学素…

Python中的遍历字典的键和值

一、Python的字典在项目的开发过程中&#xff0c;如果遇到有映射关系的内容可以考虑使用Python中的字典进行存储数据&#xff0c;字典中冒号前的数据称为【键】、冒号后的数据称为【值】。二、Python字典的用法2.1、Python的定义#Python字典的定义 字典名称{键1:值1,键2:值2,键…

JavaScript Date 日期对象

文章目录JavaScript Date 日期对象Date 对象Date 对象属性Date 对象方法创建日期设置日期两个日期比较JavaScript Date 日期对象 日期对象用于处理日期和时间。 Date 对象 Date 对象用于处理日期与实际。 创建 Date 对象&#xff1a; new Date(). 以上四种方法同样可以创建…

Validate端口使用手册

知行之桥EDI系统从2020版本开始引入了Validate端口&#xff0c;用来实现对XML数据文件进行一些规则的验证&#xff0c;保证XML数据文件的有效性。本文将介绍如何使用Validate端口。 端口创建 同其他功能性端口一样&#xff0c;只需要将Validata端口从左侧的端口清单拖拽到右侧…

子数组达到规定累加和的最大长度系列问题

文章目录1、题目一&#xff1a;正整数数组中子数组累加和 KKK 最大长度1.1 题目描述1.2 思路分析1.3 代码实现2、题目二&#xff1a;整数数组中子数组累加和为 KKK 的最大长度2.1 题目描述2.2 思路分析2.3 代码实现2.4 引申变形2.5 技巧应用题2.5.1 剑指 Offer II 010. 和为 k …

关于HTTP/3的小知识点

客户端用 TCP 发送了三个包&#xff0c;但服务器所在的操作系统只收到了后两个包&#xff0c;第一个包丢了。那么内核里的 TCP 协议栈就只能把已经收到的包暂存起来&#xff0c;“停下”等着客户端重传那个丢失的包&#xff0c;这样就又出现了“队头阻塞”。由于这种“队头阻塞…

Kubernetes之存储管理(中)

NFS网络存储 emptyDir和hostPath存储&#xff0c;都仅仅是把数据存储在pod所在的节点上&#xff0c;并没有同步到其他节点&#xff0c;如果pod出现问题&#xff0c;通过deployment会产生一个新的pod&#xff0c;如果新的pod不在之前的节点&#xff0c;则会出现问题&#xff0c…

CV——day81(1) 读论文: 基于自监督一致性学习的驾驶场景交通事故检测(有源码)

Traffic Accident Detection via Self-Supervised Consistency Learning in Driving Scenarios 基于自监督一致性学习的驾驶场景交通事故检测I. INTRODUCTIONIII. OUR APPROACHA. 帧预测B. 物体位置预测C. 驾驶场景上下文表示(DSCR)D. 协作多任务一致性学习E.交通事故判定IV. E…

UART串口通信协议

一、协议 1.1 消息格式 串口协议是一种全双工、异步通信协议&#xff0c;不需要同步时钟&#xff0c;数据的发送是一位一位的发送&#xff0c;完整的一帧数据通常由起始位、数据、奇偶校验位和停止位组成 1.2 波特率 为确保正确的收发信息&#xff0c;双方必须设置相同的波…

火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品&#xff0c;帮助用户快速完成数据集成、开发、运维、治理、资产、安全等全套数据中台建设&#x…

MySQL 中的锁有哪些类型,MySQL 中加锁的原则

锁的类型MySQL 找那个根据加锁的范围&#xff0c;大致可以分成全局锁&#xff0c;表级锁和行级锁。全局锁全局锁&#xff0c;就是对整个数据库加锁。加锁flush tables with read lock解锁unlock tables全局锁会让整个库处于只读状态&#xff0c;之后所有的更新操作都会被阻塞&a…

OB运维 | 连接 kill 中的 session_id

作者&#xff1a;姚嵩 外星人… 本文来源&#xff1a;原创投稿 *爱可生开源社区出品&#xff0c;原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。 背景&#xff1a; 通过 obproxy 连接 OB 后&#xff0c;发现&#xff1a; kill 命令使⽤ show processli…

如何写出让人看不懂的MATLAB代码?

最近呢有不少好奇的伙伴私下问咱这是怎么实现大幅度降低matlab代码可读性。于是咱准备将相关的资源分享给大家&#xff0c;这个工具的根来源于大神thrynae (Rik)公开分享一款名叫minify的小工具图片。 咱也不藏着掖着&#xff0c;其实大家用minify作为关键词检索&#xff0c;不…

学生成绩管理系统/学生信息管理系统

文章目录项目介绍一、技术栈二、项目功能介绍三、功能页面展示四、获取代码项目介绍 一、技术栈 编程语言&#xff1a;Java 技术栈&#xff1a;ServletJspJdbcEasyUIjQueryAjax面向接口编程 二、项目功能介绍 用户角色&#xff1a;学生、教师、系统管理员。&#xff1b; 管…

Nuxt 3.0 全栈开发

Nuxt 3.0 全栈开发 - 杨村长 - 掘金小册核心知识 工程架构 全栈进阶 项目实战&#xff0c;快速精通 Nuxt3 开发&#xff01;。「Nuxt 3.0 全栈开发」由杨村长撰写&#xff0c;299人购买https://s.juejin.cn/ds/S6p7MVo/ 这门课我会全面讲解 Nuxt3 核心知识&#xff0c;然后…