Prometheus Data Extraction - XLab-Tongji/AIOpsConceptualModeling GitHub Wiki
- docker的安装
- win系统下k8s的安装
- Istio及其组件的安装
- Istio的使用及数据提取
- Istio是基于k8s的一种工具,因为网络上多数博客包含较多问题且不全面,本文总结了基于windows系统从零开始搭建该工具所需环境的方法
- kiali是一个Istio的可视化工具,它提供了服务拓补图、全链路跟踪、指标遥测、配置校验、健康检查等功能。Kiali与Istio的主程序都会在namespace=istio-system中出现
参考文档:阿里云k8s
- 下载参考文档中提供的Docker for windows安装包,即Dockerhub中的Docker Desktop for Windows,默认安装即可
docker地址 - 启动docker前需要安装适用于 Linux 的 Windows 子系统,具体步骤参考微软官方文档
- 由于Kubernetes大量的容器镜像在 gcr.io,无法在国内保证稳定的访问,本文采用阿里云镜像下载
- github下载:git clone https://github.com/AliyunContainerService/k8s-for-docker-desktop
- 开启Docker,在设置-Docker Engine下的registry mirrors中添加:https://registry.docker-cn.com
- 使用powershell管理员模式进入本地git仓库目录下
.\load_images.ps1
运行该脚本下载镜像,启动k8s
- 检查镜像是否下载完整
在cmd中docker images检查已有镜像,应有:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker/desktop-kubernetes kubernetes-v1.18.8-cni-v0.8.5-critools-v1.17.0 e777077bd5d8 5 weeks ago 292MB
k8s.gcr.io/kube-proxy v1.18.8 0fb7201f92d0 6 weeks ago 117MB
k8s.gcr.io/kube-apiserver v1.18.8 92d040a0dca7 6 weeks ago 173MB
k8s.gcr.io/kube-controller-manager v1.18.8 6a979351fe5e 6 weeks ago 162MB
k8s.gcr.io/kube-scheduler v1.18.8 6f7135fb47e0 6 weeks ago 95.3MB
docker/desktop-storage-provisioner v1.1 e704287ce753 6 months ago 41.8MB
docker/desktop-vpnkit-controller v1.0 79da37e5a3aa 7 months ago 36.6MB
k8s.gcr.io/pause 3.2 80d28bedfe5d 7 months ago 683kB
k8s.gcr.io/coredns 1.6.7 67da37a9a360 8 months ago 43.8MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 11 months ago 288MB
quay.io/kubernetes-ingress-controller/nginx-ingress-controller 0.26.1 29024c9c6e70 12 months ago 483MB - 如果不完整请手动pull镜像(docker pull)
- 切换Kubernetes运行上下文至 docker-desktop
shell命令
kubectl config use-context docker-desktop - 验证 Kubernetes 集群状态
shell命令
kubectl cluster-info
kubectl get nodes - 部署 Kubernetes dashboard
默认shell命令在git仓库目录下执行
shell命令
kubectl create -f kubernetes-dashboard.yaml - 检查 kubernetes-dashboard 应用状态
shell命令
kubectl get pod -n kubernetes-dashboard - 开启 API Server 访问代理
shell命令 kubectl proxy - 通过如下 URL 访问 Kubernetes dashboard
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ - 登录dashboard
- shell生成token:
$TOKEN=((kubectl -n kube-system describe secret default | Select-String "token:") -split " +")[1] kubectl config set-credentials docker-for-desktop --token="${TOKEN}" echo $TOKEN
将生成的token复制到令牌
令牌expire的时间较短,届时需重新生成
- 阿里云上给出的使用helm安装,但由于当前helm已停止更新,最新的Istio不支持helm,建议使用istioctl安装
Istio下载地址
在bin目录下cmd运行 istioctl manifest apply --set profile=demo
demo默认安装Kiali
- 检查Istio状态
cmd命令
kubectl get pods -n istio-system
该命令会显示组件安装状态 - 多运行几次istioctl manifest apply --set profile=demo命令,每次运行超时(5m)时检查Istio状态,直到所有pod显示running即可
即使安装成功仍旧会显示超时,非强迫症患者可不用在意
- 到 istio 目录下运行: 自动注入 sidecar,部署 bookinfo
部署该demo并进行访问后,在Kiali下即可观察到traffic记录
kubectl label namespace default istio-injection=enabled
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml - 查看pod状态
kubectl get svc,pod - 在 istio bin 目录下运行 .\istioctl dashboard kiali 默认用户名密码均为admin
- 应用配置新指标的 YAML 文件
- 发送流量到示例应用
- 确认新的指标已被生成并采集
为 Prometheus 设置端口转发
通过 Prometheus UI 查看新指标的值
在Grafana中使用query可以查看可视化的数据。
Grafana查询调用prometheus的http api,使用 GET /api/v1/query
可以查询PromQL表达式在指定时间点下的计算结果,使用GET /api/v1/query_range
可以查询PromQL表达式在一段时间内的数据。Grafana默认调用query_range api,可以通过开启instant切换为瞬时数据api。
- 瞬时向量查询
形式上所有metrics通过如下格式标示:<metric name>{<label name>=<label value>, ...}
metric name反映被监控样本的含义,如http_request_total
表示当前系统接收到的HTTP请求总量;label反映样本的特征维度,可以用它对数据进行过滤聚合等操作。
查询所有get http请求
label过滤支持完全匹配和正则表达式匹配。
- 时间范围查询
使用区间向量表达式可以查询过去一段时间范围内的样本数据。通过时间范围选择器[]
进行选择。
查询过去30分钟的get http请求
支持多种时间单位。
- 时间位移
和前两种区别在于可以改变时间基准,如查询5分钟前的最新数据或昨天的所有数据。位移操作的关键字是offset。
查询前一个小时的get http请求
- 操作符
使用多种操作符可以对时间序列进行二次加工,包括数学运算符,逻辑运算符,布尔运算符等。
- 聚合函数
用于将多条时间序列处理形成一条新的时间序列.如sum(http_requests_total)
,会将所有时间序列的值相加后形成一条新的时间序列作为结果。
-
内置函数
- instant-vector abs(instant-vector):绝对值
- instant-vector sqrt(instant-vector)):平方根
- instant-vector exp(instant-vector ):指数计算
- instant-vector ln(instant-vector ):自然对数
- instant-vector ceil(instant-vector ):向上取整
- instant-vector floor(instant-vector ):向下取整
- instant-vector round(instant-vector ):四舍五入取整
- instant-vector delta(range-vector):计算区间向量里最大最小的差值
- instant-vector increase(range-vector):计算区间向量里最后一个值和第一个值的差值
- instant-vector rate(range-vector):计算区间向量里的平均增长率
- avg_over_time(range-vector):指定间隔内所有点的平均值
- min_over_time(range-vector):指定间隔中所有点的最小值
- max_over_time(range-vector):指定间隔内所有点的最大值
- sum_over_time(range-vector):指定时间间隔内所有值的总和