Prometheus Data Extraction - XLab-Tongji/AIOpsConceptualModeling GitHub Wiki

Date 11.22.2020

本wiki主要内容

  • docker的安装
  • win系统下k8s的安装
  • Istio及其组件的安装
  • Istio的使用及数据提取

背景

  • Istio是基于k8s的一种工具,因为网络上多数博客包含较多问题且不全面,本文总结了基于windows系统从零开始搭建该工具所需环境的方法
  • kiali是一个Istio的可视化工具,它提供了服务拓补图、全链路跟踪、指标遥测、配置校验、健康检查等功能。Kiali与Istio的主程序都会在namespace=istio-system中出现

参考文档:阿里云k8s

docker的安装

  • 下载参考文档中提供的Docker for windows安装包,即Dockerhub中的Docker Desktop for Windows,默认安装即可
    docker地址
  • 启动docker前需要安装适用于 Linux 的 Windows 子系统,具体步骤参考微软官方文档

k8s的安装

k8s一直处于starting状态下的解决方法

  • 检查镜像是否下载完整
    在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)

k8s的配置

  • 切换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的时间较短,届时需重新生成

Istio的安装

  • 阿里云上给出的使用helm安装,但由于当前helm已停止更新,最新的Istio不支持helm,建议使用istioctl安装
    Istio下载地址
    在bin目录下cmd运行 istioctl manifest apply --set profile=demo
    demo默认安装Kiali

Addons encountered an error解决方法

  • 检查Istio状态
    cmd命令
    kubectl get pods -n istio-system
    该命令会显示组件安装状态
  • 多运行几次istioctl manifest apply --set profile=demo命令,每次运行超时(5m)时检查Istio状态,直到所有pod显示running即可
    即使安装成功仍旧会显示超时,非强迫症患者可不用在意

Kiali的使用

demo应用bookinfo的部署

  • 到 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

Istio采集指标的配置

  • 应用配置新指标的 YAML 文件
  • 发送流量到示例应用
  • 确认新的指标已被生成并采集

为 Prometheus 设置端口转发
通过 Prometheus UI 查看新指标的值

Prometheus查询语言PromQL

在Grafana中使用query可以查看可视化的数据。

Grafana查询调用prometheus的http api,使用 GET /api/v1/query 可以查询PromQL表达式在指定时间点下的计算结果,使用GET /api/v1/query_range可以查询PromQL表达式在一段时间内的数据。Grafana默认调用query_range api,可以通过开启instant切换为瞬时数据api。

Query语法

  • 瞬时向量查询

形式上所有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):指定时间间隔内所有值的总和
⚠️ **GitHub.com Fallback** ⚠️