本教程已加入 Istio 系列:https://istio.whuanle.cn

可观测性

Istio 集成了 Jaeger、Zipkin 和 Skywalking 等链路追踪应用,能够有效地捕获服务网格的结构,展示网络拓扑结构,并分析网格的健康状况。

这一切都得益于 Envoy 代理的实现。由于所有进出流量都需要经过 Envoy 代理,Envoy 可以捕获这些流量记录,并将其推送到相应的链路追踪系统中。这样一来,可以链路追踪系统轻松地监控和分析服务网格内的流量情况。

另外 Istio 还支持 Prometheus、 Grafana 收集指标数据。

下面我们将使用官方的模板部署 Kiali 、 还有 Jaeger,然后通过 Kiali 统一查看集群的指标信息。

Kiali 界面示例:

拉取 Istio 官方的仓库:

git clone https://github.com/istio/istio.git

samples/addons/ 目录中有以下目录或文件:

samples/addons/
├── extras
│   ├── prometheus-operator.yaml
│   ├── prometheus_vm_tls.yaml
│   ├── prometheus_vm.yaml
│   ├── skywalking.yaml
│   └── zipkin.yaml
├── grafana.yaml
├── jaeger.yaml
├── kiali.yaml
├── prometheus.yaml
└── README.md

我们启用 grafana.yamljaeger.yamlkiali.yamlprometheus.yaml 四个文件。

 kubectl apply -f samples/addons

这些服务默认安装在 istio-system 命名空间下,因此不需要自行设置。

Istio 默认使用 Jaeger 做链路追踪,我们也可以使用 Skywalking 来做追踪。extras 目录中的配置我们可以自行部署。

执行命令查看其 Service 对应的 IP 和端口:

kubectl get svc  -n istio-system

现在,我们有两种方式让 kiali 在外部访问,一种是修改 Service 配置,将其访问类型修改为 NodePort,另一种是使用 istio-ingressgateway 配置流量入口。

第二种方式比较麻烦,但是为了验证我们的学习成果,我们不妨使用 Gateway 的方式暴露服务。

通过 Gateway 访问 Kiali

首先,创建一个 Gateway 。

kiali_gateway.yaml

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: kiali-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 15029
name: http-kiali
protocol: HTTP
hosts:
- "*"
kubectl -n istio-system apply -f kiali_gateway.yaml

接下来,创建一个 VirtualService 资源,将 Gateway 路由到 Kiali 服务.

kiali_vs.yaml

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: kiali
spec:
hosts:
- "*"
gateways:
- kiali-gateway
http:
- match:
- uri:
prefix: /kiali
route:
- destination:
host: kiali.istio-system.svc.cluster.local
port:
number: 20001
kubectl -n istio-system apply -f kiali_vs.yaml

然后修改 istio-ingressgateway,新增加一个配置为 kiali 暴露服务。

kubectl edit svc istio-ingressgateway -n istio-system
  - name: kiali
nodePort: 32667
port: 15029
protocol: TCP
targetPort: 15029

然后访问:http://192.168.3.150:32667/kiali

查看链路追踪数据

现在我们在 Shell 执行命令轮询一段时间前面部署的微服务,以便给集群创造访问流量。

for i in `seq 1 1000`; do curl -s -o /dev/null http://192.168.3.150:30666/productpage; done

因为默认链路追踪采样率是 1%,所以可以将请求次数设置大一些。

最终会得到一张类似的图片。

Kiali 的 Graph 数据主要来自两个来源:Prometheus 和 Istio 本身的遥测数据。

Prometheus:Prometheus 是一个开源监控和警报工具,它用于收集和存储 Istio 服务网格中的指标数据。Istio 使用 Envoy 代理收集遥测数据,这些数据随后被 Prometheus 抓取和存储。Kiali 使用这些 Prometheus 数据来生成服务之间的流量、错误率、延迟等指标。

Istio 遥测数据:Istio 服务网格生成的遥测数据包括请求、响应、延迟以及 Envoy 代理的其他性能指标。这些数据由 Istio 组件(例如 Mixer 和 Pilot)以及 Envoy 代理本身生成。Kiali 从这些遥测数据中获取服务拓扑信息,以创建服务之间的依赖关系图。

Kiali 将这两个数据源的信息整合在一起,生成 Graph,它展示了服务网格的拓扑结构、服务之间的流量以及其他性能指标。这有助于用户更好地理解服务之间的依赖关系,发现潜在的性能问题,并优化服务网格配置。

可能失败的原因

如果你的 Kiali 一直显示 Empty Graph。请关注以下几种可能的情况:

  • 集群版本低于 1.23 ,需要升级 Kubernetes 集群。
  • 安装了 Kubesphere,说多了都是泪,Kubesphere 太重了,笔者花了一晚上时间重新安装集群。
  • 访问的地址不正确,没有配置对 /productpage 的访问地址,请求流量没有打入集群。
  • Pod 没有被注入 istio-proxy。

你可以在 Kiali 的 Workloads 查看每个负载的 Pod 信息,正常情况应当如下所示:

修复 Kiali Grafana 问题

点击右上角的消息,可能会提示配置不正确,因为 kiali 需要从 Grafana 拉取数据。

编辑 configmap 。

 kubectl edit configmap kiali -n istio-system

在里面添加如下两行内容。

  grafana:  \n    enabled: true  \n    url: \"http://grafana.istio-system.svc.cluster.local:3000\"
\ \n in_cluster_url: \"http://grafana.istio-system.svc.cluster.local:3000\"\n

如果使用的是可视化工具,添加就简单了。

      grafana:
enabled: true
url: "http://grafana.istio-system.svc.cluster.local:3000"
in_cluster_url: "http://grafana.istio-system>.svc.cluster.local:3000"

然后使用 kubectl describe configmap kiali -n istio-system 查看配置是否正确。

Isito 入门(四):微服务可观测性的更多相关文章

  1. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  2. dubbo入门之微服务客户端服务端配置

    正常一个服务不会只做客户端或者只做服务端,一般的微服务都是服务与服务相互调用,那么,应该怎么配置呢?接着之前的dubbo入门之helloWorld,我们再改改配置,即可实现正常的微服务架构.与之前相比 ...

  3. Spring Cloud与微服务构建:微服务简介

    Spring Cloud与微服务构建:微服务简介 单体架构及其不足 1.单体架构简介 在软件设计中,经常提及和使用经典的3曾模型,即表示层.业务逻辑层和数据访问层. 表示层:用于直接和用户交互,也成为 ...

  4. springcloud微服务 总结一

    一 什么是微服务 译文: 微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机 ...

  5. SpringCloud与微服务Ⅱ --- 微服务概述

    一.什么是微服务 1) Martin Fowler论文对微服务的阐述(中文版) 2) 对单一应用进行拆分 3) 每一个独立的应用都有一个独立的进程 4) 拥有自己独立的数据库 5) 微服务化的核心就是 ...

  6. 微服务痛点-基于Dubbo + Seata的分布式事务(TCC模式)

    前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案. ...

  7. 微服务(入门四):identityServer的简单使用(客户端授权)

    IdentityServer简介(摘自Identity官网) IdentityServer是将符合规范的OpenID Connect和OAuth 2.0端点添加到任意ASP.NET核心应用程序的中间件 ...

  8. .Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

    前言 上一篇[.Net Core微服务入门全纪录(三)--Consul-服务注册与发现(下)]已经使用Consul完成了服务的注册与发现,实际中光有服务注册与发现往往是不够的,我们需要一个统一的入口来 ...

  9. go微服务系列(四) - gRPC入门

    1. 前言 2. gRPC与Protobuf简介 3. 安装 4. 中间文件演示 4.1 编写中间文件 4.2 运行protoc命令编译成go中间文件 5. 创建gRPC服务端 5.1 新建Produ ...

  10. 微服务(入门二):netcore通过consul注册服务

    基础准备 1.创建asp.net core Web 应用程序选择Api 2.appsettings.json 配置consul服务器地址,以及本机ip和端口号信息 { "Logging&qu ...

随机推荐

  1. day18:json模块&time模块&zipfile模块

    json模块 1.关于json的定义 所有的编程语言都能够识别的数据格式叫做json,是字符串能够通过json序列化成字符串与如下类型: (int float bool str list tuple ...

  2. java 回行矩阵的打印

    n=3 n=4 1   2   3 1    2 3   4 8   9   4 12 13      14     5 7   6   5 11 16      15     6 10 9      ...

  3. Matlab蚁群算法求解旅行商问题

    目录 问题展现 解决代码 代码1 输出结果 代码2 输出结果 代码3 输出结果 问题展现 假设有一个旅行商人要拜访全国 31 个省会城市,他需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且 ...

  4. STIL 格式pattern介绍

    相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...

  5. 洛谷:P5716日份天数

    题目描述 输入年份和月份,输出这一年的这一月有多少天.需要考虑闰年. 输入格式 输入两个正整数,分别表示年份 \(y\) 和月数 \(m\),以空格隔开. 输出格式 输出一行一个正整数,表示这个月有多 ...

  6. Python-趣味小程序

    1.效果 2.代码 import sys import time def print_act(word): #print('\n'+' '+'\r') #让光标回到行首 sys.stdout.writ ...

  7. NC54585 小魂和他的数列

    题目链接 题目 题目描述 一天,小魂正和一个数列玩得不亦乐乎. 小魂的数列一共有n个元素,第i个数为Ai. 他发现,这个数列的一些子序列中的元素是严格递增的. 他想知道,这个数列一共有多少个长度为K的 ...

  8. 2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字。 你来猜我选了哪个数字。 如果你猜到正确的数字,就会 赢得游戏 。 如果你猜错了,那么我会告诉你,我选

    2022-03-09:我们正在玩一个猜数游戏,游戏规则如下: 我从 1 到 n 之间选择一个数字. 你来猜我选了哪个数字. 如果你猜到正确的数字,就会 赢得游戏 . 如果你猜错了,那么我会告诉你,我选 ...

  9. 2021-11-04:计算右侧小于当前元素的个数。给你`一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右

    2021-11-04:计算右侧小于当前元素的个数.给你`一个整数数组 nums ,按要求返回一个新数组 counts .数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧 ...

  10. 【GiraKoo】Riters瑞特斯闹钟说明书

    对于闹钟这种按钮存在大量复用,长按操作的设备.说明书一旦丢失,真的很麻烦. 特准备了一个系列,专门保存使用说明书.希望能给大家提供一点帮助. 型号:RTS-1909