Istio 使用 Apache SkyWalking 进行服务链路追踪、链路监控告警

一、Istio 使用 Apache SkyWalking 链路追踪和告警

SkyWalking是一个开源的观测平台,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至可以观测横跨不同云的系统,SkyWalking 更像是一种现代的应用程序性能监控(Application Performance Monitoring,即APM)工具,专为云原生,基于容器以及分布式系统而设计。

此外,SkyWalking 还提供了链路监控告警功能,允许用户在服务性能指标异常时及时得到通知。用户可以定义多种告警规则,如服务响应时间、成功率等指标的阈值,当指标超过阈值时触发告警。系统还会记录所有告警的历史信息,便于用户回顾和分析系统的稳定性问题。

在这里插入图片描述

Istio 针对链路追踪本身就支持多种方式,包括 Zipkin、JaegerSkyWalking,默认支持 Zipkin 格式的追踪数据,本篇文章实验 Istio 使用 SkyWalking 进行服务链路追踪和监控告警,其中告警本次采用钉钉机器人,所以在开启前请准备好一个钉钉机器人,机器人的安全验证模式,这里我采用的加签模式:

在这里插入图片描述

二、K8s 部署 Apache SkyWalking

这里将 SkyWalking 的数据存储至 ES 中,需要有一个可用的 ES 服务,如果没有可以参考下面文章在 K8s 中部署一个:

K8s 部署 elasticsearch-7.14.0 集群 及 kibana 客户端

编写 skywalking.yml 清单,注意其中 ES 和钉钉机器人的信息换成你的环境下的:

vi skywalking.yml
kind: ConfigMap
apiVersion: v1
metadata:name: alarm-settingsnamespace: istio-system
data:alarm-settings.yml: |-rules:# Rule unique name, must be ended with `_rule`.service_resp_time_rule: ## 服务的平均响应时间超过1000毫秒时,如果在过去10分钟内发生3次,就会触发告警。metrics-name: service_resp_time op: ">"threshold: 1000period: 10count: 3silence-period: 5message: Response time of service {name} is more than 1000ms in 3 minutes of last 10 minutes.service_sla_rule: ## 服务的成功响应率低于80%(即8000/10000)时,如果在过去10分钟内发生2次,就会触发告警。# Metrics value need to be long, double or intmetrics-name: service_slaop: "<"threshold: 8000# The length of time to evaluate the metricsperiod: 10# How many times after the metrics match the condition, will trigger alarmcount: 2# How many times of checks, the alarm keeps silence after alarm triggered, default as same as period.silence-period: 3message: Successful rate of service {name} is lower than 80% in 2 minutes of last 10 minutesservice_resp_time_percentile_rule: ## 服务的响应时间百分位数(p50, p75, p90, p95, p99)中的任何一个超过1000毫秒时,如果在过去10分钟内发生3次,就会触发告警。# Metrics value need to be long, double or intmetrics-name: service_percentileop: ">"threshold: 1000,1000,1000,1000,1000period: 10count: 3silence-period: 5message: Percentile response time of service {name} alarm in 3 minutes of last 10 minutes, due to more than one condition of p50 > 1000, p75 > 1000, p90 > 1000, p95 > 1000, p99 > 1000service_instance_resp_time_rule: ## 服务实例的平均响应时间metrics-name: service_instance_resp_timeop: ">"threshold: 1000period: 10count: 2silence-period: 5message: Response time of service instance {name} is more than 1000ms in 2 minutes of last 10 minutesdatabase_access_resp_time_rule: ## 数据库访问的平均响应时间metrics-name: database_access_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of database access {name} is more than 1000ms in 2 minutes of last 10 minutesendpoint_relation_resp_time_rule: ## 端点关系的平均响应时间metrics-name: endpoint_relation_resp_timethreshold: 1000op: ">"period: 10count: 2message: Response time of endpoint relation {name} is more than 1000ms in 2 minutes of last 10 minutes#  Active endpoint related metrics alarm will cost more memory than service and service instance metrics alarm.#  Because the number of endpoint is much more than service and instance.##  endpoint_resp_time_rule:#    metrics-name: endpoint_resp_time#    op: ">"#    threshold: 1000#    period: 10#    count: 2#    silence-period: 5#    message: Response time of endpoint {name} is more than 1000ms in 2 minutes of last 10 minutesdingtalkHooks:textTemplate: |-{"msgtype": "text","text": {"content": "Apache SkyWalking Alarm: \n %s."} }webhooks:- url: https://oapi.dingtalk.com/robot/send?access_token=你的机器人tokensecret: 你的Secret---
apiVersion: apps/v1
kind: Deployment
metadata:name: skywalking-oapnamespace: istio-systemlabels:app: skywalking-oap
spec:selector:matchLabels:app: skywalking-oaptemplate:metadata:labels:app: skywalking-oapsidecar.istio.io/inject: "false"spec:containers:- name: skywalking-oapimage: apache/skywalking-oap-server:9.1.0env:- name: SW_HEALTH_CHECKERvalue: default- name: SW_STORAGEvalue: elasticsearch- name: SW_STORAGE_ES_CLUSTER_NODESvalue: es.default.svc.cluster.local:9200- name: SW_ES_USERvalue: esuser- name: SW_ES_PASSWORDvalue: espasswordvolumeMounts:- name: alarm-settingsmountPath: /skywalking/config/alarm-settings.ymlsubPath: alarm-settings.ymlreadinessProbe:exec:command:- /skywalking/bin/swctl- healthinitialDelaySeconds: 30periodSeconds: 5volumes:- name: alarm-settingsconfigMap:                                name: alarm-settings---
apiVersion: v1
kind: Service
metadata:name: tracingnamespace: istio-systemlabels:app: skywalking-oap
spec:type: ClusterIPports:- name: grpcport: 11800protocol: TCPtargetPort: 11800- name: http-queryport: 12800protocol: TCPtargetPort: 12800selector:app: skywalking-oap
---
apiVersion: v1
kind: Service
metadata:labels:name: skywalking-oapname: skywalking-oapnamespace: istio-system
spec:ports:- port: 11800targetPort: 11800name: grpc- port: 12800targetPort: 12800name: http-queryselector:app: skywalking-oap
---
apiVersion: apps/v1
kind: Deployment
metadata:name: skywalking-uinamespace: istio-systemlabels:app: skywalking-ui
spec:selector:matchLabels:app: skywalking-uitemplate:metadata:labels:app: skywalking-uiannotations:sidecar.istio.io/inject: "false"spec:containers:- name: skywalking-uiimage: apache/skywalking-ui:9.1.0env:- name: SW_OAP_ADDRESSvalue: http://skywalking-oap:12800readinessProbe:httpGet:path: /port: 8080initialDelaySeconds: 30periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:name: tracing-uinamespace: istio-systemlabels:app: skywalking-ui
spec:type: ClusterIPports:- name: httpport: 8080protocol: TCPtargetPort: 8080selector:app: skywalking-ui
---
apiVersion: v1
kind: Service
metadata:labels:name: skywalking-uiname: skywalking-uinamespace: istio-system
spec:type: NodePortports:- port: 8080targetPort: 8080name: httpselector:app: skywalking-ui

其中告警规则字段的解释如下:

metrics-name:监控的指标名称。
op:比较操作符(例如 > 表示大于)。
threshold:触发告警的阈值。
period:评估指标的周期(分钟)。
count:在周期内满足条件的最小次数,以触发告警。
silence-period:告警触发后的静默期(分钟)。
message:告警消息,其中 {name} 将被替换为实际的服务名、实例名或端点名。

提交:

kubectl apply -f skywalking.yml

查看 pod

kubectl get pods -n istio-system

在这里插入图片描述

查看 skywalking-uiNodePort 端口:

kubectl get svc -n istio-system

在这里插入图片描述

浏览器访问:http://{node ip}:32327:

在这里插入图片描述

三、Istio 配置向 SkyWalking 发送链路追踪

Istio 代理默认不向 SkyWalking 发送链路追踪,需要修改 Istio 配置文件,在 k8s 中是以 ConfigMap 的方式存储的:

kubectl get cm -n istio-system

在这里插入图片描述

修改 istio

kubectl edit cm istio -n istio-system

defaultProviders 下增加 :

    defaultProviders:metrics:- prometheustracing:- "skywalking"

extensionProvidersskywalking 的地址指向上面部署的服务:

    extensionProviders:- name: skywalkingskywalking:port: 11800service: tracing.istio-system.svc.cluster.local

整体配置如下:

在这里插入图片描述
保存后自动生效。

四、链路追踪测试

这里部署 istio 官方使用的 Bookinfo 示例应用,测试链路追踪,该应用的结构如下:

在这里插入图片描述

创建一个命名空间,将Bookinfo 服务放在该空间下:

kubectl create ns test

给该命名空间添加标签,指示在部署应用的时候,自动注入 Envoy 边车代理:

kubectl label namespace test istio-injection=enabled

部署 Bookinfo 示例应用:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.21/samples/bookinfo/platform/kube/bookinfo.yaml -n test

查看 pod

kubectl get pods -n test

在这里插入图片描述

部署 Bookinfo 应用的 GatewayVirtualService ,允许外部访问:

kubectl apply -f https://raw.githubusercontent.com/istio/istio/release-1.21/samples/bookinfo/networking/bookinfo-gateway.yaml -n test

查看 istio-ingressgateway 入口的 NodePort 端口:

kubectl get svc istio-ingressgateway -n istio-system

在这里插入图片描述

80端口对应的是 30868 ,然后使用浏览器访问 http://{node port}:30868/productpage ,可以打开 Bookinfo的示例页面:

在这里插入图片描述
然后多刷新访问几次后,去 SkyWalking 中查看,可以看到服务信息已经记录上来了:

在这里插入图片描述

点击 Topology 可以看到服务链路模型

在这里插入图片描述

点击 Trace 可以看到详细追踪信息:

在这里插入图片描述

五、链路监控告警测试

修改 Bookinfo 应用 review 的访问规则,使用 VirtualService 注入随机故障:

vi reviews-vs.yml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:name: reviews-drnamespace: test
spec:host: reviewssubsets:- name: v1labels:version: v1- name: v2labels:version: v2- name: v3labels:version: v3---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:name: reviews-vsnamespace: test
spec:hosts:- "reviews"http:- route:- destination:host: reviewsport:number: 9080subset: v1weight: 30- destination:host: reviewsport:number: 9080subset: v2weight: 30- destination:host: reviewsport:number: 9080subset: v3weight: 40fault:delay:percentage:value: 20fixedDelay: 5sabort:percentage:value: 80httpStatus: 500

这里随机注入了 20% 的请求产生 5 秒的延时,80% 的请求直接中止返回 500 状态码。

下面在浏览器多次访问 http://{node port}:30868/productpage ,等待片刻后观察 SkyWalking 中的告警信息:

在这里插入图片描述

已经出现告警了,此时钉钉机器人应该也收到了告警信息:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10分钟解决你电脑带不动3dmax渲染的问题‼️

你是否经常遇到这样的窘境&#xff1a; “创意如泉涌&#xff0c;操作如猛虎&#xff0c;却在渲染的关键时刻遭遇电脑崩溃&#xff0c;且发现工作成果未保存…” “在作业截止日期临近时&#xff0c;你的笔记本电脑突然罢工&#xff0c;迫使你不得不在网吧度过漫漫长夜来完成…

【工具】Office/WPS 插件|AI 赋能自动化生成 PPT 插件测评 —— 必优科技 ChatPPT

本文参加百度的有奖征文活动&#xff0c;更主要的也是借此机会去体验一下 AI 生成 PPT 的产品的现状&#xff0c;因此本文是设身处地从用户的角度去体验、使用这个产品&#xff0c;并反馈最真实的建议和意见&#xff0c;除了明确该产品的优点之外&#xff0c;也发现了不少缺陷和…

排查 stable-diffusion-webui 局域网访问问题:详细解析配置步骤

排查 stable-diffusion-webui 局域网访问问题&#xff1a;详细解析配置步骤 引言&#xff1a; 在部署 stable-diffusion-webui 后&#xff0c;确保其在局域网内可访问是使用该工具的关键一步。如果您遇到了局域网无法访问的问题&#xff0c;本文将帮助您详细检查和配置 stable…

EasyNmon服务器性能监控工具环境搭建

一、安装jdk环境 1、看我这篇博客 https://blog.csdn.net/weixin_54542209/article/details/138704468 二、下载最新easyNmon包 1、下载地址 https://github.com/mzky/easyNmon/releases wget https://github.com/mzky/easyNmon/releases/download/v1.9/easyNmon_AMD64.tar.…

ES6-自学01

调用方法读取文件&#xff1a;如果失败就throw抛出err,成功则抛出data 2.使用promise封装&#xff0c;如果失败就改变状态为 reject(err) 如果成功就 resolve(返回成功的值) &#xff0c;然后then,就可以获取返回的值&#xff0c;值toString&#xff08;&#xff09;方法来把…

内存拆解分析表:学习版[图片]

对拆解system中主要是对比测试机和对比机之间的差距&#xff0c;测试机那些地方高于对比机 拆解表&#xff0c;作为理解 在拆解表中system测试机比对比机多出113M 这说明是有问题的 对system拆解&#xff1a; system12345对比机9102294380941069391081628测试机10252010331…

mac 讨厌百度网盘怎么办

一、别拦我 首先请允许我泄个愤&#xff0c;tmd百度网盘下个1g的文件下载速度竟然超不过200k&#xff0c;只要不放在所有已打开软件的最前面&#xff0c;它就给你降到10k以内&#xff0c;关键是你慢就慢了&#xff0c;我也不是很着急&#xff0c;关键是你日常下载失败并且总是…

【Pip】pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]解决方案

pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED] 大家好 我是寸铁&#x1f44a; 总结了一篇pip 安装第三方包异常:[SSL:CERTIFICATE_VERIFY_FAILED]✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 报错 今天在安装第三方包时报错如下: 解决方案 本质上是需要指定信任的镜像…

ITIL4视角下的IT监控与故障管理:守护服务健康的双刃剑

引言&#xff1a;监控的曙光 在IT服务管理的浩瀚星图中&#xff0c;"监控"这一璀璨星辰终于得到了应有的重视与聚焦。ITIL4的出台&#xff0c;不仅明确将监控告警纳入事件管理的广阔宇宙&#xff0c;而且强调了其在预防故障、保障服务连续性中的核心地位。当组织拥抱…

论文阅读-THE GENERALIZATION GAP IN OFFLINE REINFORCEMENT LEARNING(ICLR 2024)

1.Motivation 本文希望比较online RL、offline RL、序列决策和BC等方法的泛化能力(对于不同的初始状态、transition functions、reward functions&#xff0c;现阶段offline RL训练的方式都是在同一个环境下的数据集进行训练)。实验发现offline的算法相较于online算法对新环境…

计算机组成结构—指令和指令格式

目录 一、指令的基本格式 二、指令字长 1. 定长指令字结构 2.变长指令字结构 三、地址码 1.四地址指令 2.三地址指令 3.二地址指令 4.一地址指令 5. 零地址指令 四、操作码 1. 定长操作码指令格式 2. 扩展操作码指令格式 五、指令的操作数类型和操作类型 1. 操作…

什么可以替代iframe?

网页嵌套中&#xff0c;iframe曾几何时不可一世&#xff0c;没有其他更好的选择&#xff01; iframe即内联框架&#xff0c;作为网页设计中的一种技术&#xff0c;允许在一个网页内部嵌套另一个独立的HTML文档。尽管它在某些场景下提供了便利&#xff0c;但也存在多方面的缺陷…