通过在应用中埋点来暴露应用数据,使用阿里云Prometheus抓取数据,借助Prometheus Grafana大盘来展示数据,并创建告警,即可实现利用阿里云Prometheus监控Go应用的目的。本文以阿里云容器服务K8s集群和阿里云容器镜像服务为例,介绍如何通过阿里云Prometheus监控Go应用。
前提条件
阿里云容器服务K8s集群已接入可观测监控 Prometheus 版。如何接入,请参见Prometheus实例 for 容器服务。
已创建阿里云容器镜像服务镜像仓库。如何创建,请参见步骤二:创建镜像仓库。
Demo
如需快速体验如何通过阿里云Prometheus监控Go应用,您可以使用已埋点的Demo工程。
操作流程
通过阿里云Prometheus监控Go应用的操作流程如下图所示。
步骤一:为应用埋点
为应用埋点以暴露Go应用数据的操作步骤如下:
将监控包导入Go应用。
import ( "fmt" "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" "strconv" )
将监控接口绑定至promhttp.Handler()。
http.Handle(path, promhttp.Handler()) //初始化一个HTTP Handler。
步骤二:上传应用
将完成埋点的应用制作成镜像并上传至阿里云容器镜像服务的镜像仓库的操作步骤如下:
执行以下命令重新编译模块。
go build
执行以下命令构建镜像。
docker build -t <本地临时Docker镜像名称>:<本地临时Docker镜像版本号> . --no-cache
示例命令:
docker build -t prometheus-go-demo:v0 . --no-cache
执行以下命令为镜像打标。
sudo docker tag <本地临时Docker镜像名称>:<本地临时Docker镜像版本号> <Registry域名>/<命名空间>/<镜像名称>:<镜像版本号>
示例命令:
sudo docker tag prometheus-go-demo:v0 registry.cn-hangzhou.aliyuncs.com/testnamespace/prometheus-go-demo:v0
执行以下命令将镜像推送至镜像仓库。
sudo docker push <Registry域名>/<命名空间>/<镜像名称>:<镜像版本号>
示例命令:
sudo docker push registry.cn-hangzhou.aliyuncs.com/testnamespace/prometheus-go-demo:v0
容器镜像服务控制台的镜像版本页面显示上传的应用镜像。
步骤三:部署应用
将应用部署至容器服务K8s集群的操作步骤如下:
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
创建容器组。
在无状态页面,单击使用YAML创建资源。
在创建页面的模板代码框输入以下内容,然后单击创建。
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: prometheus-go-demo labels: app: go-exporter spec: replicas: 2 selector: matchLabels: app: go-exporter template: metadata: labels: app: go-exporter spec: containers: - name: prometheus-go-demo imagePullPolicy: Always image: <Registry域名>/<命名空间>/<镜像名称>:<镜像版本号> ports: - containerPort: 8077 name: arms-go-demo
示例代码:
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: prometheus-go-demo labels: app: go-exporter spec: replicas: 2 selector: matchLabels: app: go-exporter template: metadata: labels: app: go-exporter spec: containers: - name: prometheus-go-demo imagePullPolicy: Always image: registry.cn-hangzhou.aliyuncs.com/fuling/prometheus-go-demo:v0 ports: - containerPort: 8077 name: arms-go-demo
无状态页面显示创建的容器组。
创建服务。
在左侧导航栏,选择 。
在服务页面,单击使用YAML创建资源。
在创建页面的模板代码框输入以下内容,然后单击创建。
apiVersion: v1 kind: Service metadata: labels: app: prometheus-go-demo name: prometheus-go-demo spec: ports: - name: arms-go-demo port: 8077 protocol: TCP targetPort: 8077 type: NodePort selector: app: prometheus-go-demo
服务页面显示创建的服务。
步骤四:配置服务发现
配置可观测监控 Prometheus 版的服务发现以抓取Go应用数据的操作步骤如下:
- 登录Prometheus控制台。
在左侧导航栏单击实例列表,进入可观测监控 Prometheus 版的实例列表页面。
在Prometheus监控页面的顶部菜单栏,选择K8s集群所在的地域,单击目标实例名称。
在左侧导航树单击服务发现,然后单击配置页签。
在配置页面单击ServiceMonitor页签,然后单击添加ServiceMonitor。
在添加ServiceMonitor对话框中输入以下内容,然后单击确定。
apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: # 填写一个唯一名称 name: prometheus-go-demo # 填写目标命名空间 namespace: default spec: endpoints: - interval: 30s # 填写Prometheus Exporter对应的Port的Name字段的值 port: arms-go-demo # 填写Prometheus Exporter对应的Path的值 path: /metrics namespaceSelector: any: true # Demo的命名空间 selector: matchLabels: app: prometheus-go-demo
ServiceMonitor页签下显示配置的服务发现。
步骤五:配置大盘
本文以Grafana 9.0.x版本为示例配置大盘:
登录可观测可视化 Grafana 版控制台,在左侧导航栏单击工作区管理。
在工作区管理页面,单击目标工作区右侧的访问地址URL链接进入Grafana。
说明如果需要登录Grafana,可以使用Grafana的Admin账号和创建工作区时设置的密码登录Grafana,或单击Sign in with Alibaba Cloud直接使用当前购买工作区的阿里云账号登录Grafana。
在左侧导航栏,选择 > + Import。
在Import页面的Import via grafana.com文本框,输入Prometheus提供的Go应用大盘模板ID6671,然后单击右侧的Load。
在Import页面输入以下信息,然后单击Import。
在Name文本框中输入自定义的大盘名称。
从Folder列表中,选择您的阿里云容器服务K8s集群。
在prometheus-apl下拉框中选择您的阿里云容器服务K8s集群。
配置完毕后的Grafana大盘如图所示。
步骤六:创建告警
创建告警的具体操作,请参见Prometheus告警规则。