您可以使用 ARMS Prometheus 监控部署在阿里云 K8s 集群中的 GO 应用的运行情况,在监控大盘上查看多种监控数据,还可配置监控报警。本教程介绍如何通过在 Go 应用中埋点来暴露应用的数据,使用 ARMS Prometheus 抓取数据,并借助 ARMS Prometheus Grafana 大盘来展示数据,最终实现通过 ARMS Prometheus 监控 Go 应用的目的。

前提条件

在开始本教程前,确保您已经完成了以下操作:

背景信息

本教程的操作流程如图所示。

How It Works

步骤一:通过埋点暴露 Go 应用的数据

首先需要在 Go 应用中使用 Prometheus Exporter 暴露应用数据。

  1. 将监控包导入 Go 应用。
    import (
        "fmt"
        "github.com/prometheus/client_golang/prometheus/promhttp"
        "net/http"
        "strconv"
    )
  2. 将监控接口绑定至 promhttp.Handler()
    http.Handle(path, promhttp.Handler()) //初始化一个 HTTP Handler

步骤二:将应用部署至阿里云容器服务 K8s 集群

其次需要将应用部署至容器服务 K8s 集群,以便 ARMS Prometheus 监控抓取应用的数据。

  1. 逐行运行 buildDockerImage.sh 中的以下命令。
    mvn clean install -DskipTests
    docker build -t <本地临时Docker镜像名称>:<本地临时Docker镜像版本号> . --no-cache
    sudo docker tag <本地临时Docker镜像名称>:<本地临时Docker镜像版本号> <Registry域名>/<命名空间>/<镜像名称>:<镜像版本号>
    sudo docker push <Registry域名>/<命名空间>/<镜像名称>:<镜像版本号>
    例如:
    mvn clean install -DskipTests
    docker build -t promethues-arms-aliyun-go-demo:v0.1 . --no-cache
    sudo docker tag promethues-arms-aliyun-go-demo:v0.1 registry.cn-hangzhou.aliyuncs.com/fuling/prometheus-arms-aliyun-go-demo-amd64:dev-v0.1
    sudo docker push registry.cn-hangzhou.aliyuncs.com/fuling/promethues-demo:v0.1
    此步骤构建了名为 promethues-arms-aliyun-go-demo 的 Docker 镜像,并将镜像推送至阿里云 Docker Registry。
  2. 登录容器服务 Kubernetes 版控制台
  3. 在左侧导航栏选择集群 > 集群,在集群列表页面上的目标集群右侧操作列单击控制台
    K8s Cluster Console Button
  4. 在左侧导航栏选择工作负载 > 部署,在页面右上角单击创建,并在使用文本创建区域填写以下内容。
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: promethues-arms-aliyun-go-demo
    spec:
      replicas: 2
      template:
        metadata:
          labels:
            app: promethues-arms-aliyun-go-demo
        spec:
          containers:
          - name: promethues-arms-aliyun-go-demo
            imagePullPolicy: Always
            image: registry.cn-hangzhou.aliyuncs.com/fuling/prometheus-arms-aliyun-go-demo-amd64:dev-v0.1
            ports:
            - containerPort: 8077
              name: arms-go-demo
    此步骤将步骤1中创建的 Docker 镜像部署至容器服务 K8s 集群中。
  5. 在左侧导航栏选择服务发现与负载均衡 > 服务,在页面右上角单击创建,并在使用文本创建区域填写以下内容。
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: promethues-arms-aliyun-go-demo
      name: promethues-arms-aliyun-go-demo
    spec:
      ports:
      - name: arms-go-demo
        port: 8077
        protocol: TCP
        targetPort: 8077
      type: NodePort
      selector:
        app: promethues-arms-aliyun-go-demo

步骤三:配置 ARMS Prometheus 监控以抓取 Go 应用的数据

接下来需要在 ARMS 控制台配置 ARMS Prometheus 监控以抓取 Go 应用的数据。

  1. 登录 ARMS 控制台
  2. 在左侧导航栏中单击 Prometheus监控
  3. Prometheus监控页面顶部选择容器服务 K8s 集群所在的地域,并在目标集群右侧的操作列单击安装
  4. ARMS Prometheus Agent 安装完毕后,在目标集群右侧的操作列单击设置
  5. 配置详情页签上单击添加ServiceMonitor,在新增ServiceMonitor 对话框中填写以下内容。
    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      # 填写一个唯一名称
      name: promethues-arms-aliyun-go-demo
      # 填写目标命名空间
      namespace: default
    spec:
      endpoints:
      - interval: 30s
        # 填写 Prometheus Exporter 对应的 Port 的 Name 字段的值
        port: arms-go-demo
        # 填写 Prometheus Exporter 对应的 Path 的值
        path: /metrics
      namespaceSelector:
        any: true
        # Nginx Demo 的命名空间
      selector:
        matchLabels:
          app: promethues-arms-aliyun-go-demo

步骤四:通过 Grafana 大盘展示 Go 应用的数据

最后需要在 ARMS 控制台导入 Grafana 大盘模板并指定 Prometheus 数据源所在的容器服务 K8s 集群。

  1. 打开 ARMS Prometheus Grafana 大盘概览页
  2. 在左侧导航栏中选择 + > Import,并在 Grafana.com Dashboard 文本框输入 6671,然后单击 Load
    Import Grafana Dashboard
  3. Import 页面输入以下信息,然后单击 Import
    Import Grafana Dashboard with Options
    1. Name 文本框中输入自定义的大盘名称。
    2. Folder 列表中,选择您的阿里云容器服务 K8s 集群。
    3. prometheus-apl 下拉框中选择您的阿里云容器服务 K8s 集群。
    配置完毕后的 ARMS Prometheus Grafana Go 大盘如图所示。ARMS Prometheus Grafana Go

步骤五:创建 Prometheus 监控报警

  1. 报警创建提供两个入口,您可根据需要自行选择其中一个入口进入创建报警环节。
    • ARMS Prometheus Grafana 大盘New DashBoard 页面,单击左侧的 图标,跳转至 ARMS Prometheus 创建报警对话框。
    • 在控制台左侧导航栏中选择报警管理 > 报警策略管理,进入报警策略管理页面,在右上角单击创建报警 > Prometheus
  2. 创建报警对话框中输入所有必填信息,完成后单击保存
    1. 填写报警名称,例如:网络接收压力报警。
    2. 选择要创建报警的 Prometheus 监控对应的集群
    3. 选择类型grafana
    4. 选择要监控的具体大盘图表
    5. 设置报警规则。
      1. 勾选同时满足下述规则
      2. 编辑报警规则,例如:N = 5 时网络接收数据字节(MB)的平均值大于等于 3 时则报警。
        说明 一个 Grafana 图表中可能有 A、B、C 三条曲线数据,您可设置监控其中的一条线。
      3. PromQL 输入框中编辑或重新输入 PromQL 语句。
        注意 PromQL 语句中包含的“$”符号会导致报错,您需要删除包含“$”符号的语句中“=”左右两边的参数及“=”。例如:将sum (rate (container_network_receive_bytes_total{instance=~"^$HostIp.*"}[1m]))修改为sum (rate (container_network_receive_bytes_total[1m]))
    6. 勾选通知方式,例如:勾选短信。
    7. 设置通知对象。在全部联系组中单击联系人分组的名称,该联系人分组出现在已选联系组中,即设置成功。
    Prometheus Monitoring Alarm

后续步骤

ARMS Prometheus Grafana Go 大盘配置完毕后,您可以查看 Prometheus 监控指标和进一步自定义大盘,详见以下文档。

查看 Prometheus 监控指标

通过 ARMS Prometheus 自定义 Grafana 大盘