云原生训练营 -Week10

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
简介: 云原生训练营 -Week10

1. 为 HTTPServer 添加 0-2 秒的随机延时;

2. 为 HTTPServer 项目添加延时 Metric;

3. 将 HTTPServer 部署至测试集群,并完成 Prometheus 配置;

4. 从 Promethus 界面中查询延时指标数据;

5. (可选)创建一个 Grafana Dashboard 展现延时分配情况。


1. 为 HTTPServer 添加 0-2 秒的随机延时


添加 controller

package controller
import (
  "fmt"
  "httpserver/utils/metrics"
  "math/rand"
  "net/http"
  "time"
)
func registerImagesRoutes() {
  http.HandleFunc("/images", handleImages)
}
// 添加 0-2 秒的随机延时
func handleImages(w http.ResponseWriter, r *http.Request) {
  timer := metrics.NewTimer()
  defer timer.ObserveTotal()
  randInt := rand.Intn(2000)
  time.Sleep(time.Millisecond * time.Duration(randInt))
  w.Write([]byte(fmt.Sprintf("<h1>%d<h1>", randInt)))
}


注册路由

package controller
// RegisterRoutes ...
func RegisterRoutes() {
  registerImagesRoutes()
}


运行测试

curl curl http://localhost:8888/images


多请求几次,会输出不同的延迟数

<h1>81<h1>
<h1>1887<h1>
<h1>59<h1>


2. 为 HTTPServer 项目添加延时 Metric


自定义 metrics,参考自 https://github.com/kubernetes/autoscaler/blob/master/vertical-pod-autoscaler/pkg/utils/metrics/metrics.go

package metrics
import (
  "fmt"
  "github.com/prometheus/client_golang/prometheus"
  "time"
)
func Register() {
  err := prometheus.Register(functionLatency)
  if err != nil {
    fmt.Println(err)
  }
}
const (
  MetricsNamespace = "cloudnative"
)
func NewTimer() *ExecutionTimer {
  return NewExecutionTimer(functionLatency)
}
var (
  functionLatency = CreateExecutionTimeMetric(MetricsNamespace, "Time spent.")
)
func NewExecutionTimer(histo *prometheus.HistogramVec) *ExecutionTimer {
  now := time.Now()
  return &ExecutionTimer{histo: histo, start: now, last: now}
}
func (t *ExecutionTimer) ObserveTotal() {
  (*t.histo).WithLabelValues("total").Observe(time.Now().Sub(t.start).Seconds())
}
func CreateExecutionTimeMetric(namespace string, help string) *prometheus.HistogramVec {
  return prometheus.NewHistogramVec(
    prometheus.HistogramOpts{
      Namespace: namespace,
      Name:      "execution_latency_seconds",
      Help:      help,
      Buckets:   prometheus.ExponentialBuckets(0.001, 2, 15),
    }, []string{"step"},
  )
}
type ExecutionTimer struct {
  histo *prometheus.HistogramVec
  start time.Time
  last  time.Time
}


添加路由处理

package controller
import (
  "github.com/prometheus/client_golang/prometheus/promhttp"
  "net/http"
)
func registerMetricsRoutes() {
  http.Handle("/metrics", promhttp.Handler())
}


注册路由

package controller
// RegisterRoutes ...
func RegisterRoutes() {
  registerMetricsRoutes()
}


测试


         


参考文档


3. 将 HTTPServer 部署至测试集群,并完成 Prometheus 配置


部署出现 error

go: github.com/prometheus/client_golang@v1.12.1: Get "https://goproxy.cn/github.com/prometheus/client_golang/@v/v1.12.1.mod": dial tcp 180.97.64.41:443: i/o timeout


指定网络重新构建

docker build --network host -f Dockerfile -t httpserver:0.10.1 .


修改 httpserver.yaml 文件的镜像版本号,重新应用

kubectl apply -f httpserver.yaml


4. 从 Promethus 界面中查询延时指标数据





相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
目录
相关文章
|
Cloud Native
云原生训练营 -Week02
云原生训练营 -Week02
54 0
|
Kubernetes Cloud Native Java
云原生训练营大作业
云原生训练营大作业
138 0
|
Kubernetes 负载均衡 Cloud Native
云原生训练营 -Week08-2
云原生训练营 -Week08-2
95 0
|
Cloud Native Docker 容器
云原生训练营 -Week03
云原生训练营 -Week03
70 0
|
6月前
|
多模数据库 Cloud Native NoSQL
Nosql学习之路:云原生多模数据库Lindorm训练营第一弹来啦
Lindorm训练营系列将通过一系列由浅入深的高质量课程和丰富的动手实验,将理论与实践结合,带你从入门到成为高阶开发者。参营学习还有机会获得惊喜彩蛋~
|
人工智能 Kubernetes Cloud Native
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
火热开营丨快来报名云原生 AI 工程化实践训练营-探索系列
|
Cloud Native 安全
云原生训练营 - Week12
云原生训练营 - Week12
81 0
|
Kubernetes Cloud Native 网络性能优化
云原生训练营 -Week08
云原生训练营 -Week08
101 0
|
消息中间件 Cloud Native Linux
云原生人才培养计划2.0 之 「消息产品全家桶训练营」开营启动!
2021年8月,阿里云联合Linux基金会发布云原生人才培养计划2.0,协同开源生态力量,为云原生领域提供更具专业性的定向人才培养方式,帮助云原生时代的开发者更好地享受云红利,创造新价值。今年12月,开发者社区与阿里云消息产品团队开设的RocketMQ训练营,在极短时间内就有近万名开发参与,受到开发者的喜爱,基于用户需要,开发者社区发起「消息产品全家桶训练营」,邀请消息产品线负责人隆基出品,10+
151 0
云原生人才培养计划2.0  之 「消息产品全家桶训练营」开营启动!
|
消息中间件 存储 Cloud Native
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭
今年12月,开发者社区与阿里云消息产品团队再次联合出品消息产品全家桶训练营,本次训练营覆盖了 RocketMQ、Kafka、RabbitMQ、MNS、EventBridge 多种消息产品及接入场景,10+消息团队专家授课,帮助开发者在不同的业务场景用好消息。
云原生人才培养计划2.0 之 消息产品「全家桶训练营」重磅来袭

热门文章

最新文章