K8s环境下监控告警平台搭建及配置

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
可观测监控 Prometheus 版,每月50GB免费额度
简介: K8s环境下监控告警平台搭建及配置

Promethues是可以单机搭建的,参考prometheus入门

本文是就Promethues+Grafana在K8s环境下的搭建及配置


Prometheus度量指标监控平台简介


  • 启动minikube  minikube start
  • 安装helm

使用Helm Chart 安装 Prometheus Operator:

helm install prometheus-operator stable/prometheus-operator -n monitoring

报错:

WARNING: This chart is deprecated
Error: INSTALLATION FAILED: failed to install CRD crds/crd-alertmanager.yaml: resource mapping not found for name: "alertmanagers.monitoring.coreos.com" namespace: "" from "": no matches for kind "CustomResourceDefinition" in version "apiextensions.k8s.io/v1beta1"
ensure CRDs are installed first

根据 Kubernetes和微服务监控体系(搜索"降低我们的版本")

降低minikube版本: minikube start --kubernetes-version=v1.20.3

(这步可能会卡着不动等半天,耐心等待即可~)

微信截图_20230814205000.png

微信截图_20230814205012.png

解决该问题后继续:

kubectl create ns monitoring

helm install prometheus-operator stable/prometheus-operator -n monitoring

微信截图_20230814205024.png

微信截图_20230814205033.png

要等一会儿,全部pod才能都启动起来~

image.png

Promethues-Operator基本功能展示


访问prometheus内置浏览器


kubectl port-forward -n monitoring prometheus-prometheus-operator-prometheus-0 9090

kubectl port-forward 什么意思?

kubectl port-forward 是一个 Kubernetes 命令,用于将本地端口与 Kubernetes Pod 或 Service 的端口之间建立临时的网络转发连接。

当你在本地开发环境中需要直接访问运行在 Kubernetes 集群中的 Pod 或 Service 时,kubectl port-forward 命令可以帮助你在本地主机和 Kubernetes 集群之间建立一个网络通道。

使用 kubectl port-forward 命令时,你需要指定要转发的资源类型和名称,并指定本地端口和远程端口。例如,以下命令将本地的 8080 端口与名为 "my-pod" 的 Pod 的 80 端口进行转发:


kubectl port-forward my-pod 8080:80

这将在本地主机的 8080 端口上启动一个转发服务,将所有发送到该端口的请求转发到运行在 "my-pod" Pod 中的 80 端口。你可以使用本地浏览器或工具访问 localhost:8080 来与 Pod 进行交互。

类似地,你也可以使用 kubectl port-forward 命令转发到 Service 的端口。例如:

载请注明出处。

kubectl port-forward service/my-service 8080:80

这将将本地的 8080 端口与名为 "my-service" 的 Service 的 80 端口进行转发。

kubectl port-forward 命令对于在本地开发和调试过程中与 Kubernetes 集群中的资源进行交互非常有用。它可以方便地将远程服务映射到本地主机,以便你可以直接访问和测试它们。

微信截图_20230814205229.png

访问 http://localhost:9090/

微信截图_20230814205240.png

prometheus-operator 已经帮我们把相关的监控项配置好了

image.png

up指标

微信截图_20230814205339.png

node_load1指标

No datapoints found. , issue

微信截图_20230814205411.png

但好像没干啥就好了..

微信截图_20230814205422.png

查询对promethues web总的成功请求数

微信截图_20230814205500.png

查询对promethues metrics端点的成功请求率

微信截图_20230814205517.png

告警信息

http://localhost:9090/alerts

image.png

配置信息Configuration

微信截图_20230814205600.png

告警(alert)和聚合(record)规则Rules

image.png

监控目标Targets

微信截图_20230814205658.png

访问Alertmanger UI


kubectl port-forward -n monitoring alertmanager-prometheus-operator-alertmanager-0 9093

微信截图_20230814205737.png

告警信息

微信截图_20230814205747.png

状态和配置

微信截图_20230814205825.png

访问Grafana UI

微信截图_20230814205835.png

微信截图_20230814205845.png

微信截图_20230814205855.png

微信截图_20230814205953.png

Nodes节点监控

在上图搜索框输入"node"

微信截图_20230814210004.png

K8s/Compute Resources/Cluster监控

微信截图_20230814210037.png

image.png

K8s/Compute Resources/Pod监控

微信截图_20230814210055.png

定制Alertmanager邮件通知


安装FakeSMTP

git clone https://github.com/Nilhcem/FakeSMTP.git
cd FakeSMTP
mvn package
java -jar target/fakeSMTP-2.0-SNAPSHOT.jar -p 2525

微信截图_20230814210143.png

现在需要改为 java -jar target/fakeSMTP-2.1-SNAPSHOT.jar -p 2525

微信截图_20230814210153.png

点击 启动服务器

微信截图_20230814210234.png

Alertmanager缺省配置(Secret)


kubectl get secret -n monitoring alertmanager-prometheus-operator-alertmanager -o go-template='左括号 左括号 index .data "alertmanager.yaml" 右括号 右括号' | base64 --decode  (把汉字替换为对应符号,不这样hexo会解析出错)

微信截图_20230814210248.png

该命令用于从 Kubernetes 集群中的指定命名空间(-n monitoring)获取名为 alertmanager-prometheus-operator-alertmanager 的 Secret 对象,并提取其中名为 alertmanager.yaml 的数据字段的值。然后使用 base64 命令对该值进行解码,以便将其转换回原始的 YAML 格式。

换句话说,这个命令的目的是获取监控系统中 Alertmanager 的配置文件,并将其解码为可读的 YAML 格式,以便查看其中的配置详细信息。


因为这个配置是secret形式存储的

微信截图_20230814210337.png

Opaque类型,所以最后要用 base64 --decode 转为明文

其实可以通过下面的UI直观查看

Alertmanager缺省配置(UI)


微信截图_20230814210351.png

Alertmanager config更新


参考 github.com/helm/charts…

  • 增加 邮件smtp等配置
  • 增加静默配置(发送给null)
  • 增加抑制配置(inhibit)

Prometheus监控系统中,"静默配置"(inhibit configuration)用于在发生警报时控制通知的行为。通过静默配置,可以防止某些特定警报触发通知,以避免不必要的干扰或重复的通知。

静默配置定义了在特定条件下阻止警报通知的规则。这些规则通常基于警报标签和标签值的匹配。当触发一个警报时,系统将根据静默配置中的规则检查是否有匹配的规则存在。如果有匹配的规则,那么该警报将被静默,即不会触发通知。

通过使用静默配置,可以灵活地控制在某些情况下抑制警报通知,例如:

  • 阻止在维护窗口期间触发通知。
  • 抑制由特定部署环境引起的虚假警报。
  • 防止多个相关的警报同时触发大量通知。

在Prometheus中,静默配置可以通过修改Alertmanager的配置文件(alertmanager.yaml)来实现,具体的配置语法和规则定义可以参考Prometheus的官方文档。


在Prometheus中,将通知发送给null属于静默配置的一种。当将静默规则配置为将通知发送给null时,实际上是将该警报完全静默化,意味着不会有任何通知发送。

这种配置适用于那些不希望触发任何通知的警报。通常,这可能是对特定类型的警报或某些特定条件下的警报进行静默化的一种方式。通过将通知发送给null,可以确保该警报不会引起任何干扰或通知负担。

静默规则配置示例:

inhibit_rules:
  - source_match:
      severity: critical
    target_match:
      severity: warning
    equal: ['alertname', 'service']
    target_receivers:
      - 'null'

上述示例中的静默规则指定了在警报的严重性为critical,并且警报名称和服务名称相同时,将通知发送给null,即静默该警报。

更新后的配置在 github.com/spring2go/k…

微信截图_20230814210519.png

修改ip为本机地址


更新prometheus-operator release


helm upgrade prometheus-operator stable/prometheus-operator --values=shuang_alertmanager.yml -n monitoring

helm history prometheus-operator -n monitoring

微信截图_20230814210533.png

如果有问题,可以看pod日志进行排查~

kubectl logs -n monitoring alertmanager-prometheus-operator-alertmanager-0


校验配置更新成功


打开 http://localhost:9093/#/status, 通过UI校验看是否修改成功~

微信截图_20230814210614.png

启动FakeSMTP接收告警


此时已经收到了邮件

微信截图_20230814210633.png

其中 etcd这项告警 message = etcd cluster "kube-etcd": members are down (1).是因为用minikube,etcd节点本来就不足~

.+Overcommit本来应该要收到告警,但通过配置抑制掉了


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
JSON Kubernetes API
深入理解Kubernetes配置:编写高效的YAML文件
深入理解Kubernetes配置:编写高效的YAML文件
|
21天前
|
存储 运维 Kubernetes
云端迁移:备份中心助力企业跨云迁移K8s容器服务平台
本文将简要介绍阿里云容器服务ACK的备份中心,并以某科技公司在其实际的迁移过程中遇到具体挑战为例,阐述如何有效地利用备份中心来助力企业的容器服务平台迁移项目。
|
11天前
|
Kubernetes 监控 Java
如何在Kubernetes中配置镜像和容器的定期垃圾回收
如何在Kubernetes中配置镜像和容器的定期垃圾回收
|
1月前
|
Kubernetes 安全 Linux
ansible-install-k8s 之 1 初始化环境
ansible-install-k8s 之 1 初始化环境
|
2月前
|
Kubernetes Linux Docker
在centos7上搭建k8s环境
在centos7上搭建k8s环境
|
3月前
|
Kubernetes Go 网络安全
Kubernetes 中使用consul-template渲染配置
Kubernetes 中使用consul-template渲染配置
58 1
Kubernetes 中使用consul-template渲染配置
|
3月前
|
Kubernetes 网络性能优化 调度
在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?
在K8S中,Kubernets资源限制是如何配置的,是否根据Qos?
|
3月前
|
Kubernetes 调度 Perl
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
|
3月前
|
存储 Kubernetes Linux
Kubernetes 的配置资源 ConfigMap(01部分)
Kubernetes 的配置资源 ConfigMap(01部分)
|
3月前
|
Kubernetes 监控 Shell
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?
在K8S中,我们公司用户反应pod连接数非常多,希望看一下这些连接都是什么信息?什么状态?怎么排查?容器里面没有集成bash环境、网络工具,怎么处理?