0


在k8s集群内搭建Prometheus监控平台

基本架构

Prometheus由SoundCloud发布,是一套由go语言开发的开源的监控&报警&时间序列数据库的组合。

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。

在这里插入图片描述
Prometheus 主要的组件功能如下:

  • Prometheus Server:server的作用主要是定期从静态配置的targets或者服务发现(主要是DNS、consul、k8s、mesos等)的 targets 拉取数据。
  • Exporter: 主要负责向prometheus server做数据汇报。而不同的数据汇报由不同的exporters实现,比如监控主机有node-exporters,mysql有MySQL server exporter。
  • Pushgateway:Prometheus获得数据的方式除了到对应exporter去Pull,还可以由服务先Push到pushgateway,server再去pushgateway 拉取。
  • Alertmanager:实现prometheus的告警功能。
  • webui:主要通过grafana来实现webui展示。

我们在实际使用的时候的基本流程就是:
各个服务push监控数据到其对应的指标(比如下面提到的Exporter) --> Prometheus Server定时采集数据并存储 --> 配置Grafana展示数据 & 配置告警规则进行告警

Helm部署Prometheus平台

使用helm部署kube-prometheus-stack
helm地址:传送门
github地址:传送门

请添加图片描述
首先需要在服务器上安装helm工具,怎么安装不再赘述,网上很多教程。使用helm安装prometheus的具体操作为:

  1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. helm repo update
  3. helm install[RELEASE_NAME] prometheus-community/kube-prometheus-stack

Exporter

要采集目标的监控数据,首先就要在被采集目标地方安装采集组件,这种采集组件被称为Exporter。prometheus.io官网上有很多这种exporter,官方exporter列表。

采集完了怎么传输到Prometheus?

Exporter 会暴露一个HTTP接口,prometheus通过Pull模式的方式来拉取数据,会通过HTTP协议周期性抓取被监控的组件数据。
不过prometheus也提供了一种方式来支持Push模式,你可以将数据推送到Push Gateway,prometheus通过pull的方式从Push Gateway获取数据。

golang应用中接入采集组件

kratos框架

在微服务框架kratos中接入Prometheus采集组件的示例,kratos官方教程:

  1. package main
  2. import("context""fmt""log"
  3. prom "github.com/go-kratos/kratos/contrib/metrics/prometheus/v2""github.com/go-kratos/kratos/v2/middleware/metrics""github.com/prometheus/client_golang/prometheus/promhttp""github.com/go-kratos/examples/helloworld/helloworld""github.com/go-kratos/kratos/v2""github.com/go-kratos/kratos/v2/transport/grpc""github.com/go-kratos/kratos/v2/transport/http""github.com/prometheus/client_golang/prometheus")// go build -ldflags "-X main.Version=x.y.z"var(// Name is the name of the compiled software.
  4. Name ="metrics"// Version is the version of the compiled software.// Version = "v1.0.0"
  5. _metricSeconds = prometheus.NewHistogramVec(prometheus.HistogramOpts{
  6. Namespace:"server",
  7. Subsystem:"requests",
  8. Name:"duration_sec",
  9. Help:"server requests duration(sec).",
  10. Buckets:[]float64{0.005,0.01,0.025,0.05,0.1,0.250,0.5,1},},[]string{"kind","operation"})
  11. _metricRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
  12. Namespace:"client",
  13. Subsystem:"requests",
  14. Name:"code_total",
  15. Help:"The total number of processed requests",},[]string{"kind","operation","code","reason"}))// server is used to implement helloworld.GreeterServer.type server struct{
  16. helloworld.UnimplementedGreeterServer
  17. }// SayHello implements helloworld.GreeterServerfunc(s *server)SayHello(ctx context.Context, in *helloworld.HelloRequest)(*helloworld.HelloReply,error){return&helloworld.HelloReply{Message: fmt.Sprintf("Hello %+v", in.Name)},nil}funcinit(){
  18. prometheus.MustRegister(_metricSeconds, _metricRequests)}funcmain(){
  19. grpcSrv := grpc.NewServer(
  20. grpc.Address(":9000"),
  21. grpc.Middleware(
  22. metrics.Server(
  23. metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
  24. metrics.WithRequests(prom.NewCounter(_metricRequests)),),),)
  25. httpSrv := http.NewServer(
  26. http.Address(":8000"),
  27. http.Middleware(
  28. metrics.Server(
  29. metrics.WithSeconds(prom.NewHistogram(_metricSeconds)),
  30. metrics.WithRequests(prom.NewCounter(_metricRequests)),),),)
  31. httpSrv.Handle("/metrics", promhttp.Handler())
  32. s :=&server{}
  33. helloworld.RegisterGreeterServer(grpcSrv, s)
  34. helloworld.RegisterGreeterHTTPServer(httpSrv, s)
  35. app := kratos.New(
  36. kratos.Name(Name),
  37. kratos.Server(
  38. httpSrv,
  39. grpcSrv,),)if err := app.Run(); err !=nil{
  40. log.Fatal(err)}}

最终暴露出一个

  1. http://127.0.0.1:8000/metrics

HTTP接口出来,Prometheus可以通过这个接口拉取监控数据。

Gin框架

在轻量级HTTP框架Gin中接入Prometheus采集组件的示例:

  1. package main
  2. import("strconv""time""github.com/gin-gonic/gin""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp")var(
  3. handler = promhttp.Handler()
  4. _metricSeconds = prometheus.NewHistogramVec(prometheus.HistogramOpts{
  5. Namespace:"server",
  6. Subsystem:"requests",
  7. Name:"duration_sec",
  8. Help:"server requests duration(sec).",
  9. Buckets:[]float64{0.005,0.01,0.025,0.05,0.1,0.250,0.5,1},},[]string{"method","path"})
  10. _metricRequests = prometheus.NewCounterVec(prometheus.CounterOpts{
  11. Namespace:"client",
  12. Subsystem:"requests",
  13. Name:"code_total",
  14. Help:"The total number of processed requests",},[]string{"method","path","code"}))funcinit(){
  15. prometheus.MustRegister(_metricSeconds, _metricRequests)}funcHandlerMetrics()func(c *gin.Context){returnfunc(c *gin.Context){
  16. handler.ServeHTTP(c.Writer, c.Request)}}funcWithProm() gin.HandlerFunc {returnfunc(c *gin.Context){var(
  17. method string
  18. path string
  19. code int)
  20. startTime := time.Now()
  21. method = c.Request.Method
  22. path = c.Request.URL.Path
  23. c.Next()
  24. code = c.Writer.Status()
  25. _metricSeconds.WithLabelValues(method, path).Observe(time.Since(startTime).Seconds())
  26. _metricRequests.WithLabelValues(method, path, strconv.Itoa(code)).Inc()}}funcmain(){
  27. r := gin.Default()
  28. r.Use(WithProm())
  29. r.GET("/ping",func(c *gin.Context){
  30. c.JSON(200, gin.H{"message":"pong",})})
  31. r.GET("/metrics",HandlerMetrics())
  32. r.Run()// 监听并在 0.0.0.0:8080 上启动服务}

最终暴露出一个

  1. http://127.0.0.1:8080/metrics

HTTP接口出来,Prometheus可以通过这个接口拉取监控数据。

抓取集群外部数据源

背景:在已有的K8s集群中通过

  1. helm

部署了一个

  1. kube-prometheus-stack

,用于监控服务器和服务。现在已经将k8s集群中的node、pod等组件接入到prometheus了。还需要将部署在k8s集群外部的其他应用服务接入到prometheus。

prometheus抓取k8s集群外部的数据时,有以下途径:

  • ServiceMonitor
  • Additional Scrape Configuration

ServiceMonitor

ServiceMonitor 是一个CRD,它定义了 Prometheus 应该抓取的服务端点以及抓取的时间间隔。
通过ServiceMonitor监控集群外部的服务,需要配置Service、Endpoints和ServiceMonitor。

现在有一个已经部署到

  1. 192.168.1.100:8000

的后端服务,已经通过

  1. /metrics

将监控指标暴露出来了。尝试将其接入到prometheus,具体操作如下:

在命令行中输入

  1. $ touch external-application.yaml
  2. $ vim external-application.yaml

然后将下面的yaml文件内容拷贝进去

  1. ---apiVersion: v1
  2. kind: Service
  3. metadata:name: external-application-exporter
  4. namespace: monitoring
  5. labels:app: external-application-exporter
  6. app.kubernetes.io/name: application-exporter
  7. spec:type: ClusterIP
  8. ports:-name: metrics
  9. port:9101protocol: TCP
  10. targetPort:9101---apiVersion: v1
  11. kind: Endpoints
  12. metadata:name: external-application-exporter
  13. namespace: monitoring
  14. labels:app: external-application-exporter
  15. app.kubernetes.io/name: application-exporter
  16. subsets:-addresses:-ip: 192.168.1.100 # 这里是外部的资源列表ports:-name: metrics
  17. port:8000-addresses:-ip: 192.168.1.100 # 这里是外部的资源列表2ports:-name: metrics
  18. port:8080---apiVersion: monitoring.coreos.com/v1
  19. kind: ServiceMonitor
  20. metadata:name: external-application-exporter
  21. namespace: monitoring
  22. labels:app: external-application-exporter
  23. release: prometheus
  24. spec:selector:matchLabels:# Service选择器app: external-application-exporter
  25. namespaceSelector:# Namespace选择器matchNames:- monitoring
  26. endpoints:-port: metrics # 采集节点端口(svc定义)interval: 10s # 采集频率根据实际需求配置,prometheus默认10spath: /metrics # 默认地址/metrics

保存好文件之后运行命令:

  1. kubectl apply -f external-application.yaml

之后打开prometheus控制台,进入Targets目录。可以看到新增的external-application-exporter显示出来了:

请添加图片描述
请添加图片描述

Additional Scrape Configuration

除了ip加端口提供的HTTP服务以外,我还在其他服务器上部署了可以通过域名访问的HTTPS服务。现在想用同样的方法将其接入进来。

首先尝试修改

  1. Endpoints

,找到k8s的官方文档,发现

  1. Endpoints

仅支持

  1. ip

,也没有配置

  1. HTTPS

协议的地方。
请添加图片描述
那么我们尝试换一种方式。

第一种方法

首先查阅官方文档,找到关于关于prometheus抓取配置的地方,可以看到,prometheus的抓取配置的关键字是

  1. scrape_config

请添加图片描述
我们的prometheus是通过helm部署kube-prometheus-stack得到的,所以我们查看一下该charts的value.yaml文件,看看有无配置。

输入命令:

  1. $ cat values.yaml |grep-C20 scrape_config

得到如下结果:
请添加图片描述
从注释中知道,kube-prometheus是通过additionalScrapeConfigs配置抓取策略的。

于是写一个配置文件去更新helm已经部署好的prometheus的release。

  1. $ touch prometheus.yml
  2. $ vim prometheus.yml

将一下内容写入:

  1. prometheus:prometheusSpec:additionalScrapeConfigs:-job_name: external-application-exporter-https
  2. scrape_interval: 10s
  3. scrape_timeout: 10s
  4. metrics_path: /metrics
  5. scheme: https
  6. tls_config:insecure_skip_verify:truestatic_configs:-targets:["www.baidu.com:443"]

最后更新release:

  1. $ helm upgrade -nmonitoring-f prometheus.yaml prometheus kube-prometheus-stack-40.0.0.tgz

使用

  1. prometheus.yaml

更新release,其中

  1. kube-prometheus-stack-40.0.0.tgz

是我在部署prometheus时已经helm pull到本地的chart文件。

我们在prometheus的控制台的Targets目录下可以看到我们新添加的数据源。

到这里其实就可以结束了,但是有一个不好的地方是,每次添加新的域名监控,都需要重新更新helm的release,不是特别方便。

第二种方法

翻一翻prometheus-operator的源码,发现在说明中,有关于抓取配置热更新的教程。简单的概括就是,通过配置secret,来控制prometheus的抓取数据源。secret的内容修改时,可以热更新prometheus的抓取配置。截个图看一下:

请添加图片描述

第一步,生成
  1. prometheus-additional.yaml

文件

  1. $ touch prometheus-additional.yaml
  2. $ vim prometheus-additional.yaml
  1. prometheus-additional.yaml

内容:

  1. -job_name: external-application-exporter-https
  2. scrape_interval: 10s
  3. scrape_timeout: 10s
  4. metrics_path: /metrics
  5. scheme: https
  6. tls_config:insecure_skip_verify:truestatic_configs:-targets:["www.baidu.com:443"]
第二步,生成secret

生成用于创建secret的配置文件:

  1. $ kubectl create secret generic additional-scrape-configs --from-file=prometheus-additional.yaml --dry-run=client -oyaml> additional-scrape-configs.yaml
  2. $ cat additional-scrape-configs.yaml

可以看到生成的

  1. additional-scrape-configs.yaml

内容如下:

  1. apiVersion: v1
  2. data:prometheus-additional.yaml: LSBqb2JfbmFtZTogZXh0ZXJuYWwtYXBwbGljYXRpb24tZXhwb3J0ZXItaHR0cHMKICBzY3JhcGVfaW50ZXJ2YWw6IDEwcwogIHNjcmFwZV90aW1lb3V0OiAxMHMKICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzCiAgc2NoZW1lOiBodHRwcwogIHRsc19jb25maWc6CiAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogdHJ1ZQogIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOiBbImNpYW10ZXN0LnNtb2EuY2M6NDQzIl0K
  3. kind: Secret
  4. metadata:creationTimestamp:nullname: additional-scrape-configs

将这段编码解码看一下内容:

  1. $ echo"LSBqb2JfbmFtZTogZXh0ZXJuYWwtYXBwbGljYXRpb24tZXhwb3J0ZXItaHR0cHMKICBzY3JhcGVfaW50ZXJ2YWw6IDEwcwogIHNjcmFwZV90aW1lb3V0OiAxMHMKICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzCiAgc2NoZW1lOiBodHRwcwogIHRsc19jb25maWc6CiAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeTogdHJ1ZQogIHN0YXRpY19jb25maWdzOgogICAgLSB0YXJnZXRzOiBbImNpYW10ZXN0LnNtb2EuY2M6NDQzIl0K"| base64 -d

得到:

  1. -job_name: external-application-exporter-https
  2. scrape_interval: 10s
  3. scrape_timeout: 10s
  4. metrics_path: /metrics
  5. scheme: https
  6. tls_config:insecure_skip_verify:truestatic_configs:-targets:["www.baidu.com:443"]

可以确认配置文件生成无误,接着生成secret:

  1. $ kubectl apply -f additional-scrape-configs.yaml -n monitoring

monitoring是prometheus部署所在的命名空间,把它们放到同一个命名空间。

确认secret生成了:

  1. $ kubectl get secret -n monitoring

输出:
请添加图片描述

最后,修改CRD

Finally, reference this additional configuration in your prometheus.yaml CRD.

官方文档让我们修改prometheus的配置
先找到prometheus这个CRD:

  1. $ kubectl get prometheus -n monitoring
  2. NAME VERSION REPLICAS AGE
  3. prometheus-kube-prometheus-prometheus v2.38.0 1 2d18h

然后修改它

  1. $ kubectl edit prometheus prometheus-kube-prometheus-prometheus -n monitoring
  1. apiVersion: monitoring.coreos.com/v1
  2. kind: Prometheus
  3. metadata:name: prometheus
  4. labels:prometheus: prometheus
  5. spec:...additionalScrapeConfigs:name: additional-scrape-configs
  6. key: prometheus-additional.yaml
  7. ...

最后,在prometheus控制台看一下效果:
请添加图片描述
域名服务已经监控上了,以后想添加其他域名监控,只需要修改secret就行,great!!!

告警

关于告警,我们采用prometheus+alertmanager这一套方案。从监控告警信息到处置告警事件的主要流程如下:
请添加图片描述

我们的业务需求是,在服务挂了的时候能够收到通知,及时处置。所以我们这里需要配置的告警规则为,收集应用的存活信息,当检测到不存活状态,告警消息状态设为

  1. peding

。当peding时长到达一定时间阈值,就将其设为

  1. firing

,此时触发告警,告警信息提交到

  1. alertmanager

,然后在alertmanager中按照规则,发送告警消息给

  1. 消息接收者

,如企微、钉钉、邮件等。

具体的做法如下:

步骤一 prometheus告警触发器

参考:kube-prometheus-stack 告警配置

由于我是用helm部署的

  1. kube-prometheus-stack

,为了保持版本一致性,将charts:

  1. kube-prometheus-stack-40.0.0.tgz

提前下载(

  1. helm pull prometheus-community/kube-prometheus-stack --version=40.0.0

)到本地了。解压之后,可以在

  1. kube-prometheus-stack

  1. values.yaml

中找到如下

  1. PrometheusRules

相关入口:

  1. ## Deprecated way to provide custom recording or alerting rules to be deployed into the cluster.### additionalPrometheusRules: []# - name: my-rule-file# groups:# - name: my_group# rules:# - record: my_record# expr: 100 * my_record## Provide custom recording or alerting rules to be deployed into the cluster.###additionalPrometheusRulesMap: {}# rule-name:# groups:# - name: my_group# rules:# - record: my_record# expr: 100 * my_record

修改

  1. values.yaml

  1. ## Deprecated way to provide custom recording or alerting rules to be deployed into the cluster.### additionalPrometheusRules: []# - name: my-rule-file# groups:# - name: my_group# rules:# - record: my_record# expr: 100 * my_record## Provide custom recording or alerting rules to be deployed into the cluster.##additionalPrometheusRulesMap:rule-name:groups:-name: Instance
  2. rules:# Alert for any instance that is unreachable for >5 minutes.-alert: InstanceDown
  3. expr: up == 0
  4. for: 5m
  5. labels:severity: page
  6. annotations:summary:"Instance {{ $labels.instance }} down"description:"{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

然后更新helm release

  1. helm upgrade -nmonitoring prometheus --values=values.yaml ../kube-prometheus-stack-40.0.0.tgz

更新完成后在prometheus控制台查看结果:
请添加图片描述
可以看到

  1. alert rules

已经配置成功,根据告警规则,只要任意instance实例的状态不为

  1. up == 0

,则会按照规则将alert状态改成peding,5分钟后仍未恢复,状态会变更为firing,触发告警消息。

步骤二 alertmanager 告警通知

参考:kube-prometheus-stack 配置AlertManager

prometheus触发器收集到了告警消息之后,会发送到alertmanager进行统一管理。alertmanager配置一定的规则,将告警消息分发给不同的接收者。

  1. kube-prometheus-stack

  1. values.yaml

中找到如下

  1. alertmanager.config

相关入口。

  1. alertmanager.config

提供了指定

  1. altermanager

的配置,这样就能够自己定制一些特定的

  1. receivers

。原始的配置如下:

  1. ## Configuration for alertmanager## ref: https://prometheus.io/docs/alerting/alertmanager/##alertmanager:...## Alertmanager configuration directives## ref: https://prometheus.io/docs/alerting/configuration/#configuration-file## https://prometheus.io/webtools/alerting/routing-tree-editor/##config:global:resolve_timeout: 5m
  2. inhibit_rules:-source_matchers:-'severity = critical'target_matchers:-'severity =~ warning|info'equal:-'namespace'-'alertname'-source_matchers:-'severity = warning'target_matchers:-'severity = info'equal:-'namespace'-'alertname'-source_matchers:-'alertname = InfoInhibitor'target_matchers:-'severity = info'equal:-'namespace'route:group_by:['namespace']group_wait: 30s
  3. group_interval: 5m
  4. repeat_interval: 12h
  5. receiver:'null'routes:-receiver:'null'matchers:- alertname =~ "InfoInhibitor|Watchdog"
  6. receivers:-name:'null'templates:-'/etc/alertmanager/config/*.tmpl'

我们将其修改为:

  1. ## Configuration for alertmanager## ref: https://prometheus.io/docs/alerting/alertmanager/##alertmanager:...## Alertmanager configuration directives## ref: https://prometheus.io/docs/alerting/configuration/#configuration-file## https://prometheus.io/webtools/alerting/routing-tree-editor/##config:global:resolve_timeout: 5m
  2. inhibit_rules:-source_matchers:-'severity = critical'target_matchers:-'severity =~ warning|info'equal:-'namespace'-'alertname'-source_matchers:-'severity = warning'target_matchers:-'severity = info'equal:-'namespace'-'alertname'-source_matchers:-'alertname = InfoInhibitor'target_matchers:-'severity = info'equal:-'namespace'route:group_by:['instance']group_wait: 30s
  3. group_interval: 5m
  4. repeat_interval: 12h
  5. receiver:'wx-webhook'routes:receivers:-name:'wx-webhook'webhook_configs:-url:"http://wx-webhook:80/adapter/wx"send_resolved:truetemplates:-'/etc/alertmanager/config/*.tmpl'

其中

  1. webhook_configs[0].url: "http://wx-webhook:80/adapter/wx"

中的地址为接受告警消息的企业微信群机器人webhook,企业微信群机器人webhook的搭建接下来会详细讲解。

然后更新helm release

  1. helm upgrade -nmonitoring prometheus --values=values.yaml ../kube-prometheus-stack-40.0.0.tgz

配置完成后,关掉一个服务,在企业微信群查看结果:

请添加图片描述

步骤三 搭建企业微信群机器人webhook

参考:prometheus通过企业微信机器人报警

生成一个企微机器人

在群设置中,进入群机器人功能:
请添加图片描述
然后添加群机器人,复制添加的群机器人的

  1. Webhook

地址
请添加图片描述

编写

  1. deployment

配置文件

  1. wx-webhook-deployment.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:name: wx-webhook
  4. labels:app: wx-webhook
  5. spec:replicas:1selector:matchLabels:app: wx-webhook
  6. template:metadata:labels:app: wx-webhook
  7. spec:containers:-name: wx-webhook
  8. image: guyongquan/webhook-adapter:latest
  9. imagePullPolicy: IfNotPresent
  10. args:["--adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxx"]ports:-containerPort:80---apiVersion: v1
  11. kind: Service
  12. metadata:name: wx-webhook
  13. labels:app: wx-webhook
  14. spec:selector:app: wx-webhook
  15. ports:-name: wx-webhook
  16. port:80protocol: TCP
  17. targetPort:80nodePort:30904type: NodePort

其中

  1. args: ["--adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxxxxxxxxxxxxxxxx"]

的内容为上一步创建的企微机器人

  1. Webhook

地址
紧接着运行命令:

  1. $ kubectl apply -f wx-webhook-deployment.yaml -nmonitoring
  2. $ kubectl get pod -n monitoring |grep wx-webhook
  3. wx-webhook-78d4dc95fc-9nsjn 1/1 Running 0 26d
  4. $ kubectl get service-n monitoring |grep wx-webhook
  5. wx-webhook NodePort 10.106.111.183 <none>80:30904/TCP 27d

这样就完成了企业微信群机器人webhook的搭建。

这里我使用的是企业微信作为告警消息的接收者,alertmanager也支持其他消息接收者。可以参考这篇文章:kube-promethues监控告警详解(邮件、钉钉、微信、企微机器人、自研平台)

遇到的问题

  1. 更新抓取配置的secret后prometheus的控制台看不到效果 尝试重启pod:prometheus-prometheus-kube-prometheus-prometheus-0,报错:

ts=2023-07-29T09:30:54.188Z caller=main.go:454 level=error msg=“Error loading config (–config.file=/etc/prometheus/config_out/prometheus.env.yaml)” file=/etc/prometheus/config_out/prometheus.env.yaml err=“parsing YAML file /etc/prometheus/config_out/prometheus.env.yaml: scrape timeout greater than scrape interval for scrape config with job name “external-application-exporter-https””

原因是,自定义指标的配置出错导致prometheus启动失败,scrape_interval和scrape_timeout存在问题

  1. -job_name: external-application-exporter-https
  2. scrape_interval: 10s
  3. scrape_timeout: 30s
  4. metrics_path: /metrics
  5. scheme: https
  6. tls_config:insecure_skip_verify:truestatic_configs:-targets:["www.baidu.com:443"]

需要改成

  1. -job_name: external-application-exporter-https
  2. scrape_interval: 10s
  3. scrape_timeout: 10s
  4. metrics_path: /metrics
  5. scheme: https
  6. tls_config:insecure_skip_verify:truestatic_configs:-targets:["www.baidu.com:443"]

引用

  1. Grafana & prometheus 入门
  2. Prometheus监控+Grafana+Alertmanager告警安装使用 (图文详解)
  3. Prometheus官方教程
  4. Helm仓库
  5. kube-prometheus项目的Github地址
  6. kratos官方教程
  7. K8s官方文档
  8. prometheus-operator的源码
  9. kube-prometheus-stack 告警配置
  10. kube-prometheus-stack 配置AlertManager
  11. prometheus通过企业微信机器人报警
  12. kube-promethues监控告警详解(邮件、钉钉、微信、企微机器人、自研平台)

本文转载自: https://blog.csdn.net/qq_26356861/article/details/131997852
版权归原作者 谢小鱼 所有, 如有侵权,请联系我们删除。

“在k8s集群内搭建Prometheus监控平台”的评论:

还没有评论