开发者学堂课程【微服务实战-Service Mesh 与 Istio:Istio 遥测】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/620/detail/9437
Istio 遥测
目录:
一、Mixer adapters
二、Mixer API
三、分布式追踪
四、分布式追踪: Jaeger
五、日志采集
一、Mixer adapters
mixer是一个新的学习内容,mixer有一个插件结构,可以让不同的时限插在下面,在安装instio时,它已经自带了插件,这些插件来自第三方,但它能使instio的功能变得强大。
二、Mixer API
Mixer API 比较不直观,一般来说分成三个部分。
1、Instance:要采集什么样的日志
要求指标值以及日志条目比较熟悉
2、Handler:用哪个适配器
Mixer 适配器
3、rule 配置:
instance 传递给 handler的规则,关于规则的配置,讲规则传递的配置。在什么情况下把收集到的东西传递到适配器中。
所以分成三部分。
实例:这是一个采集数据的 Mixer API,分了三部分。
# Configuration for metric instances
apiVersion:config.istio.io/v1alpha2
kind:instance
metadata:
name:doublerequestcount
namespace:istio-system
spec:
compiledTemplate
:metric
params:
value:"2"# count each request twice
dimensions: N
reporter:conditional((context.reporter.kind "inbound")=="outbound", "client", "server
source: source.workload.name |"unknown"
destination:destination.workload.name "unknown"
message: '"twice the fun!"l
monitored_resource_type:'"UNSPECIFIED"I
# Configuration for a Prometheus handler
apiVersion
:config.istio.io/v1alpha2
kind:handler//
引用了instance
netadata:
name: doublehandler
namespace: istio-system
compiledAdapter:prometheus
params:
metrics:
- name:double_request_count # Prometheusmetric name
instance_name:doublerequestcount.instance.istio-system #Mixer instance name (fully-qual: kind:COUNTER
label_names:
- reporter
- source
- destination
一message
# Rule to send metric instances to a Prometheus handlerapiVersion:config.istio.io/v1alpha2
kind:rule
metadata:
name:doubleprom
namespace:istio-system
spec:
US-169691- -MP:istio andy.shi$ kubectl -n istio-system port-forward $(kubectl -n istio-system getpod l app=grafana sonpath='f.items[0] . metadata .name]' )3000 : 3000
这个例子看一下即可,为了保证操作,不会更改 API,mixer 的 api 非常复杂,没有纠错功能,为了防止拷贝出错,不做复杂的操作,直接看一下内置的instance即可。
下面来看下怎么访问界面:
US-169691-MP:istio andy.shiS kubectl port-forward prometheus-77f67668f-4nc4z -n istid-system 9090:989e
把端口号转到本地来,它会打通端口然后转接出来。prometheus 名字需要牢记,端口号为9090。
现在开始访问。看下instio的创建内容,所有的请求访问数目,访问了很多内容,返回的信息等都在这里。变量都是内置的,所以不一定有数据。
另外一个常用的监控工具为grafana :
US-169691-MP:istio andy.shiS kubectl -n istio-system port-forward $(kubectl -n istio-systemetpod -l app=grafana -o jsonpath='i.items[0].metadata.name} ' ) 3000;3000]
使用步骤:
端口号是3000.可以产生一些流量,访问微服务,过会就可以看到数量增加,还可以看到具体的每一个内容。数据也有了。
三、分布式追踪
在没有 instio 之前,需要追踪微服务之间的通讯,很复杂。有了分布式追踪后一切都变得简单了,用户不需要做任何事情,代码不用写,任何东西不需要改变。有了分布式追踪的项,不同的追踪工具都可以拿掉。
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
x-ot-span-context
四、分布式追踪: Jaeger
instio 版本上是没有安装的,这个需要了解,看一下图片的操作,可以看出跟以前的工具差不多,体现了各个微服务之间调用的信息,特别是延迟和返回的http,可以帮助我们能够找到哪里有问题,或者发现瓶颈进行改正。
五、日志采集
日志有以下三种采集方式:
1. Envoy 访问日志,可以通过配置策略,把握容器的标准输出,然后可以拿到配置。
2. Mixer 收集新的日志数据,必须有指标是可以被收集的,就像分布式追踪一样,指标被收集才能使用
3.使用 Fluentd 记录日志,把日志功能都集成起来。