这篇文章将承接此前关于使用Prometheus配置自定义告警规则的文章。在本文中,我们将demo安装Prometheus的过程以及配置Alertmanager,使其能够在触发告警时能发送邮件,但我们将以更简单的方式进行这一切——通过Rancher安装。

我们将在这篇文章中看到没有使用依赖项的情况下如何完成这一操作。在本文中,我们不需要:

  • 专门配置运行指向Kubernetes集群的kubectl

  • 有关kubectl的知识,因为我们可以使用Rancher UI

  • Helm binary的安装/配置

前期准备

  • 一个谷歌云平台账号(免费的即可),其他云也是一样的

  • Rancher v2.4.2(文章发布时的最新版本)

  • 运行在GKE(版本为1.15.11-gke.3)上的Kubernetes集群(EKS或者AKS也可以)

启动一个Rancher实例

首先,启动一个Rancher实例。你可以根据Rancher的指引启动:

https://www.rancher.cn/quick-start/

使用Rancher部署一个GKE集群

使用Rancher来设置并配置一个Kubernetes集群。你可以访问下方链接获取文档:

https://rancher2.docs.rancher.cn/docs/cluster-provisioning/_index

部署Prometheus

我们将利用Rancher的应用商店来安装Prometheus。Rancher的应用商店主要集合了许多Helm Chart,以便于用户能够重复部署应用程序。

我们的集群起来并且开始运行之后,让我们在“Apps”的标签下选择为其创建的默认项目,然后单击“Launch”按钮。

现在我们来搜索我们感兴趣的chart。我们可以设置很多字段——但是对于本次demo来说我们将保留默认值。你可以在Detailed Description部分找到关于这些值的有用信息。无需担心出现问题,尽管去查看它们的用途。在页面底部,点击【Launch】。Prometheus Server以及Alertmanager将会被安装以及配置。

当安装完成时,页面如下所示:

接下来,我们需要创建Services以访问Prometheus Server以及Alertmanager。点开资源下方的工作负载标签,在负载均衡部分,我们可以看到目前还没有配置。点击导入YAML,选择prometheus namespace,一次性复制两个YAML并点击导入。稍后你将了解我们如何知道使用那些特定的端口和组件tag。

apiVersion: v1
kind: Service
metadata:name: prometheus-service
spec:type: LoadBalancerports:- port: 80targetPort: 9090protocol: TCPselector:component: server
apiVersion: v1
kind: Service
metadata:name: alertmanager-service
spec:type: LoadBalancerports:- port: 80targetPort: 9093protocol: TCPselector:component: alertmanager

完成之后,service将显示Active。

在右侧垂直省略号的下拉菜单里你能找到IP并点击View/Edit YAML。在yaml文件的底部,你将会看到类似的部分:

status:loadBalancer:ingress:- ip: 34.76.22.14

访问IP将为我们展示Prometheus Server和Alertmanager的GUI。你会发现这时没有什么内容可以查看的,因为尚未定义规则以及配置告警。

添加规则

规则可以让我们触发告警。这些规则都是基于Prometheus的表达式语言。无论何时,只要符合条件,告警就会被触发并发送给Alertmanager。

现在来看看我们如何添加规则。

在资源->工作负载标签下,我们可以看到Deployment在运行chart时创建了什么。我们来详细看看prometheus-serverprometheus-alertmanager

我们从第一个开始并理解其配置,我们如何编辑它并了解服务在哪个端口上运行。点击垂直省略号菜单按钮并点击View/Edit YAML。

首先,我们看到的是两个与Deplolyment关联的容器:prometheus-server-configmap-reloadprometheus-server。容器prometheus-server的专属部分有一些相关信息:

正如我们所了解的,Prometheus通过prometheus.yml进行配置。该文件(以及其他在serverFiles中列出的文件)将挂载到server pod。为了添加/编辑规则,我们需要修改这个文件。实际上,这就是一个Config Map,可以在Resources Config的标签页下找到。点击垂直的省略菜单按钮并Edit。在规则部分,让我们添加新的规则并点击保存。

groups:- name: memory demo alertrules:- alert: High Pod Memoryexpr: container_memory_usage_bytes{pod_name=~"nginx-.*", image!="", container!="POD"} > 5000000for: 1mlabels:severity: criticalannotations:summary: High Memory Usage- name: cpu demo alertrules:- alert: High Pod CPUexpr: rate (container_cpu_usage_seconds_total{pod_name=~"nginx-.*", image!="", container!="POD"}[5m]) > 0.04for: 1mlabels:severity: criticalannotations:summary: High CPU Usage

规则将会由Prometheus Server自动加载,然后我们在Prometheus Server GUI中能看到它们:

这是关于以上两条规则的解释:

  • container_memory_usage_bytes:当前内存使用情况(以字节为单位),包括所有内存,无论任何时候访问。

  • container_cpu_usage_seconds_total:累积的CPU时间(以秒为单位)

所有的指标都能够在以下页面中找到:

https://github.com/google/cadvisor/blob/master/metrics/prometheus.go

在Prometheus中所有正则表达式都使用RE2 syntax。使用正则表达式,我们只能为名称与特定模式匹配的Pod选择时间序列。在我们的示例中,我们需要寻找以nginx-开头的pod,并且排除“POD”,因为这是容器的父cgroup,而且会显示pod内所有容器的统计信息。

对于container_cpu_usage_seconds_total来说,我们使用所谓的子查询(Subquery)。它会每5分钟返回我们的指标。

如果你想了解更多关于查询以及例子,可以在官方的Prometheus文档中查看。

配置告警

只要出现问题,告警就能立即提醒我们,使得我们能够立刻知道系统中发生了错误。而Prometheus通过Alertmanager组件来提供告警。

与Prometheus Server的操作步骤相同:在资源->工作负载标签页下,点击prometheus-alertmanager右侧菜单栏按钮,选择View/Edit YAML,检查其配置:

Alertmanager通过alertmanager.yml进行配置。该文件(及其他列在alertmanagerFiles内的文件)将挂载到alertmanager pod上。接下来我们需要修改与alertmanager相关联的configMap以便于设置告警。在Config标签页下,点击prometheus-alertmanager行的菜单栏,然后选择Edit。使用以下代码代替基本配置:

global:resolve_timeout: 5m
route:group_by: [Alertname]# Send all notifications to me.receiver: demo-alertgroup_wait: 30sgroup_interval: 5mrepeat_interval: 12hroutes:- match:alertname: DemoAlertNamereceiver: "demo-alert"receivers:- name: demo-alertemail_configs:- to: your_email@gmail.comfrom: from_email@gmail.com# Your smtp server addresssmarthost: smtp.gmail.com:587auth_username: from_email@gmail.comauth_identity: from_email@gmail.comauth_password: 16letter_generated token # you can use gmail account password, but better create a dedicated token for thisheaders:From: from_email@gmail.comSubject: "Demo ALERT"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDRVXABG-1588250748254)(https://oscimg.oschina.net/oscnet/up-968da1d0c400a3986b27a910b7a4a656fb8.png)]

新配置将会由Alertmanager重新加载,并且我们能在Status标签页下看到GUI。

测试End-to-End方案

让我们部署一些组件来进行监控。对于练习来说部署一个简单的nginx deployment就足够了。使用Rancher GUI,在资源->工作负载标签页下点击导入YAML,粘贴以下代码(本次使用默认的命名空间)并点击导入:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:name: nginx-deployment
spec:selector:matchLabels:app: nginxreplicas: 3 # tells deployment to run 2 pods matching the templatetemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80

在Prometheus UI中,我们为使用此前为告警配置的两个表达式中的1个来查看一些指标:

rate (container_cpu_usage_seconds_total{pod_name=~"nginx-.*", image!="", container!="POD"}[5m])

让我们在其中一个Pod中添加一些负载以查看值的变化。当值大于0.04时,我们应该获得告警。为此,我们需要选择其中一个nginx Deployment Pod并点击Execute Shell。在其中我们将执行一个命令:

告警有3个阶段:

  • Inactive-条件不满足

  • Pending-满足条件

  • Firing-告警被触发

我们已经看到告警处于inactive状态,所以继续在CPU上增加负载让我们能观察到剩余两种状态:

只要告警触发,将会显示在Alertmanager中:

将Alertmanager配置为在我们收到告警时发送电子邮件。如果我们查看收件箱,则会看到类似的内容:

总 结

我们都知道监控在整个运维过程中多么重要,但是如果没有告警,监控是不完整的。告警可以在问题发生时,然后我们立刻知道系统中出现了问题。Prometheus囊括了这两种功能:监控解决方案以及其Alertmanager组件的告警功能。本文中我们看到了使用Rancher部署Prometheus如此容易并且将Prometheus Server与Alertmanager集成。我们还使用Rancher配置了告警规则并推送了Alertmanager的配置,所以它能在问题发生时提醒我们。最后,我们了解了如何根据Alertmanager的定义/集成收到一封包含触发告警详细信息的电子邮件(也可以通过Slack或PagerDuty发送)。

小白也能轻松上手的Prometheus教程相关推荐

  1. 轻松上手系列教程java_小白也能轻松上手的Prometheus教程

    这篇文章将承接此前关于使用Prometheus配置自定义告警规则的文章.在本文中,我们将demo安装Prometheus的过程以及配置Alertmanager,使其能够在触发告警时能发送邮件,但我们将 ...

  2. 手把手怎么把照片修复高清,p图小白也能轻松上手

    是不是有许多小伙伴经常会遇到需要用的图片因不够清晰,而不知道如何是好的时候呢? 例如公司要求转发到朋友圈的图片因为转了好几手变得非常模糊.在生活中与好友一起聚会时,留下的合照因为没按原图导致图片不够清 ...

  3. 尤克里里好不好学?只要3招!没有音乐基础的小白也能轻松上手

    尤克里里凭借其娇小可爱的外形和小清新的音色,吸引了不少的粉丝.很多人对这样一款小乐器产生了浓厚的兴趣,又担心自己没有音乐基础,学不成个样子.其实不用想这么多,尤克里里可是世界上最简单好学的乐器之一了. ...

  4. 这两款好用的配音软件,自媒体小白也能轻松上手

    很多小伙伴在剪辑视频的过程中经常可以看到一些语音素材,经常刷视频的小伙伴也可以看到很多视频中经常出现一些AI合成的声音或者音效,这些配音可以给视频增添很多亮点!那么大家都是怎么将文字转语音的呢?今天给 ...

  5. winform直接控制云台_一路随拍,智云SmoothX手机云台试玩,哪怕小白也能轻松上手...

    江山如此多娇,原本是该四处浪荡看遍这世间的美好,但却因为疫情的缘故不得不宅家,我们每个人度过了人生中或许在家最长的一段时间,甚至许久未曾度过的元宵节也一并度过了,这段时间下来,错失了生活中许多的小美好 ...

  6. 能够快速抠图软件有哪些?这三款工具小白也能轻松上手

    不少小伙伴向我求助,说在工作中时不时需要处理各种图片,其中较难的就是抠图操作,由于不是专业出身,手动抠图不仅效率慢,还经常发生背景去除不干净的情况,需要二次返工,既耗时又耗神. 其实抠图并没有大家想象 ...

  7. Tiktok现阶段最简单的三种变现模式,小白也可轻松上手

    最近几天碰到零播放的伙伴越来越多了,目前判断,大多数是网络的原因. 如果你也有碰到,建议也往这个方向去排查. 刚刚看了一下我的抖音账号,已经1.8万粉丝了,增长很快,上周还是1.3万粉丝. 抖音巨大的 ...

  8. 小白也能轻松上手selenium,无忧获取淘宝商品信息,献给手把手教的会的你

    目录 前言 准备工作 系统要求 集成开发环境下载 配置开发环境 分析网站 首先进入的是淘宝首页 接着显示的是登录页面 登录后进入搜索结果页 编写程序 先做基本的配置 数据文件 浏览器配置 特殊字符去除 ...

  9. 简单实用的模糊照片修复方法,小白也能轻松上手

    相信每位小伙伴家中都有老一辈人留存下来的照片,但是大部分已经变得泛黄或是模糊不清.如果是照片泛黄的话,只需将其存放在相册中,减少与外界空气接触即可.但若是模糊,较大可能是因为当时的摄像技术还不够发达, ...

最新文章

  1. 【SQL】IS NULL and = NULL 在 sql server 中的区别
  2. activesync对应的COM口
  3. nginx 301重定向带www的https链接配置方法
  4. 用matlab实现感知机学习算法,训练分类器并解决井字游戏
  5. exe文件添加为服务
  6. 创业必经之路——Paul Graham创业曲线
  7. python mysql 保存csv_使用Python将csv文件快速转存到Mysql
  8. 推动边缘计算的七项核心技术
  9. mysql差异备份数据库get shell_shell进行完整和增量备份mysql数据库
  10. 机器学习十大经典算法之K-Means聚类算法
  11. 长途货运4大痛,Uber新上的「自动驾驶卡车」如何改善?
  12. datepick二格式 化时间_同样是持久化,竟然有这么大的差别
  13. 使用分治思想求解最大子序列
  14. win7修复计算机 报错6,Win7系统出现APPCRASH错误怎么解决
  15. 设置表格列宽 —— 在富文本编辑器中的实现
  16. 新手怎么选择蓝牙耳机不被忽悠?注意这两大误区一定不猜雷
  17. elementUI 时间格式化
  18. 北京杭州差距这么大?程序员在北京准点下班,在杭州12点在还加班
  19. 坑:解决64位2013word无法安装32位Visio的问题
  20. 本体李俊火星大学最新演讲:从区块链核心价值谈金融场景应用

热门文章

  1. 第七十四章 Caché 函数大全 $WREVERSE 函数
  2. 用C语言来实现_输入一个日期(年月日),计算是这一年中的第几天
  3. uoj 198: [CTSC2016]时空旅行
  4. iOS为什么获取不到设备的DeviceToken
  5. 五分钟理解什么是面向对象
  6. ARM汇编之加载寄存器
  7. java面试笔记整理
  8. 用Python来制作简单的爬虫,爬取到你想要的图片
  9. python-onvif 库踩坑
  10. [位压] 高精度加法