搭建prometheus+alertmanager+grafana环境并实现监控告警全流程

本文对于实现监控告警全流程作了非常详细的总结,个人觉得写的还不错,通过本文即可实现你的综合目标哦!经过本文后,全流程即可打通,非常适合首次综合实践,也可以给最终应用到linux上打下各组件坚实而游刃有余的基础。

文中基于windwos搭建,目的在于打通流程,和Linux下除安装方式和promQL指标的稍微不同外其它几乎没有区别。linux的很快会补齐,敬请期待哦!

目录

相关地址

node_exporter安装

关于启动方式

实现监控

下载

修改配置文件

启动服务并实践

基于Grafana展示数据

安装与使用

添加数据源

导入模板

实现告警

告警配置

告警查看与说明

告警触发实践

企业微信告警

邮件告警

获得邮箱授权码

配置alertmanager实现告警


相关地址

prometheus官网:https://prometheus.io/

node_exptor下载: https://github.com/martinlindhe/wmi_exporter/releases
promutheus下载:https://prometheus.io/download/   (也可下载node_exptor和Alertmanager)

grafana下载:https://grafana.com/grafana/download?platform=windows

node_exporter安装

很方便,双击node_exporter包。进入本地服务看看node_exporter,如果是下图这样说明启动成功了:

关于启动方式

每个组件下面都有个exe文件。以prometheus为例,进入prometheus目录下,执行prometheus --config.file=prometheus.yml即可完成启动(不带配置文件路径参数时默认会在当前目录下扫描名为prometheus.yml的文件)。windows更简便的启动方式是双击prometheus.exe这个文件就行。建议首次研究或验证prometheus相关功能的童鞋可采用简便方式,因为刚开始可能会有一些报错,而且修改了配置可能会有启动闪退或无法启动的情况,双击进行测试会很节省时间哦。

实现监控

下载

https://prometheus.io/download/  本地只需解压。

修改配置文件

Prometheus:解压下载的包后目录下会默认有一个prometheus.yml文件,这就是它的配置文件。这里面我们需要配置的是要监控的目标,想注释的地方可在当前行前面加#。

增加目标后的配置文件如下:

scrape_configs字段就是配置监控目标的地方,job_name为自定义值,就是给目标取一个名称;static_configs是prometheus服务发现的一种方式,意为静态配置,更新后重启服务方可生效;targets是一个具体目标,内容是ip:端口,可以看到我们增加了一个监控目标

,端口之所以写为9182是因为node_exporter在Windows下的启动端口就是9182。

注意:配置更新时注意需要严格符合yml的格式,否则造成的结果就是启动失败,如果是双击启动则窗口会直接闪退。

启动服务并实践

接下来双击prometheus.exe启动服务,访问http://localhost:9090/看看prometheus的UI:

特意做了些标注,可以发现页面并不复杂,大概说明一下:

a:获取告警规则列表(告警的规则是在prometheus下配置的);

b:用来查看当前的具体配置、启动详细参数值、tsdb的状态、服务发现的目标等信息;

c:挺重要的,勾选后转换时间为本地时间;

d、e:d输入框里用来输入promQL语句,然后点击execute按钮进行查询。

来写两个简单示例看看结果,如我想查一下node_exporter服务是不是存活的:

使用up函数,返回值为1即存活,反之如果是0那就是down掉了。

再如想看看当前机器的协程数量是怎样的:

还可以切换图形展示,由table切到graph,这里面又分为两种展示形式,line graph:

stacked graph:

左上角的时间范围也可自行选取。

再看看服务发现的结果:

显然我们增加的那条监控目标是正常的。如果要新增一个目标,则增加一个配置并给对应机器安装exporter就可以了:

基于Grafana展示数据

安装与使用

Grafana是一个图形展示方案,可接入多种数据源。业界和prometheus结合使用的图形展示使用grafana的还是很普遍的。

下载地址:https://grafana.com/grafana/download?platform=windows

解压下载的包到自定义目录,启动很简单,进入bin/,双击grafana-server.exe即可启动grafana,页面访问http://localhost:3000/可看到grafana的页面,默认用户名密码为admin/admin,是一个管理员角色的用户。

添加数据源

登录后新增一个数据源:

选择prometheus,select,填写我们刚才启动的服务地址,点击下方的save & test保存:

导入模板

接下来我们去grafana官方网站中下载可以使用的模板导入进来,地址:

https://grafana.com/grafana/dashboards?dataSource=prometheus

页面左侧Data Source选择prometheus,选择一种模板进行下载:

点击download进行下载:

此时下载的json文件就是我们要导入进来的模板,此时进入grafana页面按图示步骤:

方式2导入模板就是以该模板的id直接通过网络渠道加载而来,比如我们所选的模板id为10467。两种方式都可,进行导入后可看到dashbord页面:

看到的数据就是node_exporter采集到的。到此我们的监控效果就完成啦。

实现告警

告警配置

和上面一样,直接启动alertmanager服务,启动成功会出现一个新窗口。

在prometheus配置中设置rules.yml文件地址,用于读取规则:

rule_files:

  - "rules/rules.yml"

同时指定关联的alertmanager地址,alertmanager服务默认端口为9093:

提示:targets可配置多个告警服务,在部署HA模式时会用到,此时我们只配一个地址。

rules是我新建的目录,你也可以直接在其目录下新增该文件,只要地址写正确就行。

rules.yml文件中新增一些告警规则:

groups:
- name: node_alerts
  rules:
  - alert: rules1-协程数告警   # 告警规则名称
    expr: go_goroutines{instance="192.168.31.39:9182",job="windows_self"} > 1   # 基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
    for: 10s  # 评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
    labels:  # 自定义标签,允许用户指定要附加到告警上的一组附加标签。
      instance: 192.168.31.39
      serverity: 警告
    annotations:  # 指定一些附加信息,如告警详细信息的描述等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
      Alert_type: 协程数告警
      explain: "协程数告警-协程数超过1个"
      summary: "{{$labels.instance}}={{ $value }}"
      console: "{{ $value }}"
      description: "当前协程数={{ $value }}"
  - alert: rules2-进程数告警
    expr: windows_os_processes{job=~"windows_self",instance=~"192.168.31.39:9182"} > 1
    for: 10s
    labels:
      instance: 192.168.31.39
      team: 模块A
      serverity: 警告
    annotations:
      Alert_type: 进程数告警
      explain: "进程数告警-进程数超过10个"
      summary: "{{$labels.instance}}={{ $value }}"
      console: "{{ $value }}"
      description: "当前进程数="{{ $value }}
  - alert: rules3-CPU使用告警
    expr: (100 - (avg(irate(windows_cpu_time_total{job=~"windows_self",instance=~"192.168.31.39:9182",mode="idle"}[1m])))*100) > 1
    for: 20s
    labels:
      instance: 192.168.31.39
      team: 模块C
      serverity: 警告
    annotations:
      Alert_type: CPU告警
      explain: "CPU使用告警-CPU使用率超过1%"
      summary: "{{$labels.instance}}={{ $value }}"
      console: "{{ $value }}"
      description: "当前CPU使用={{ $value }}”
  - alert: rules4-内存使用告警
    expr: 100 - (windows_os_physical_memory_free_bytes{job=~"windows_self",instance=~"192.168.31.39:9182"} / windows_cs_physical_memory_bytes{job=~"windows_self",instance=~"192.168.31.39:9182"})*100 > 1
    for: 10s
    labels:
      instance: 192.168.31.39
      team: 模块D
      serverity: 危险
    annotations:
      Alert_type: 内存告警
      explain: "内存使用告警-内存使用率超过1%"
      summary: "{{$labels.instance}}={{ $value }}"
      console: "{{ $value }}"
      description: "当前内存使用={{ $value }}"

告警查看与说明

重启prometheus,看看页面的alerts:

已经加载出来了,全部是绿色是因为还未触发(expr设置的值低一点便于观察,不断刷新即可看到变化),告警有一个状态转换的过程,绿色—黄色—红色,黄色意为告警已触发,但是还未超过评估等待的时间,还不能实际告警;已经超过等待时间后对应指标依旧超过规则定义值时颜色为红色,红色时如果alertmanager服务正常则可以发送告警了。

红色时如下:

告警触发实践

好,这时候我们来配置告警,告警信息发送的渠道有多种,邮件,企业微信,短信,slack,钉钉等webhook地址都可。

企业微信告警

由于企业微信告警有些篇幅,因此不再这里长篇大论,本文意在打通流程,邮件方式成本较低,下面我们展示邮件方式的全流程。

企业微信告警方式全流程点此传送哦

邮件告警

可点此进行邮件配置设置流程,也可直接看下面的流程哦!

获得邮箱授权码

要基于指定邮箱作为发件人,我们能想到的是配置中肯定会有邮箱账号、密码等,不同的是,这种类型的配置密码都不是实际密码,而是邮箱授权码,如果是163邮箱,如下方式获得:

  1. 网页登录163邮箱,左上角设置—POP3/SMTP/IMAP—进入
  2. 这里我已开启,如果没有获取过则显示的是两个”开启”按钮

  1. 点击开启,扫码,按提示操作就好,最后复制界面给出的授权码即可。其它方式的都大同小异,如企业邮箱的授权码可登录腾讯企业邮获取。

配置alertmanager实现告警

配置文件为其目录下的alertmanager.yml文件,一个较完整的配置如下:

global:
  resolve_timeout: 1m  # 每1分钟检测一次是否恢复
  smtp_require_tls: false
  smtp_smarthost: 'smtp.exmail.qq.com:465'  #163服务器为smtp.163.com:25
  smtp_from: '邮箱'  #发邮件的邮箱
  smtp_auth_password: '授权码'
  smtp_auth_username: '邮箱'
templates:
  - 'template_t/*.tmpl'
route:  # 所有报警信息进入后的根路由,用来设置报警的分发策略
  group_by: ['alertname']  # 这里的标签列表是接收到报警信息后的重新分组标签,例如,接收到的报警信息里面有许多具有 cluster=A 和 alertname=LatncyHigh 这样的标签的报警信息将会批量被聚合到一个分组里面
  group_wait: 10s  # 当一个新的报警分组被创建后,需要等待至少group_wait时间来初始化通知,这种方式可以确保您能有足够的时间为同一分组来获取多个警报,然后一起触发这个报警信息
  group_interval: 10s  # 当第一个报警发送后,等待group_interval时间来发送新的一组报警信息
  repeat_interval: 10s   # 如果一个报警信息已经发送成功了,repeat_interval表示再次发送告警信息的时间间隔
  receiver: default_receiver   # 使用default发送
  routes:  # 子路由
  - receiver: rules1-协程数告警
    group_wait: 5s
    repeat_interval: 60s
    match: 
      alertname: rules1-协程数告警
  - receiver: rules2-进程数告警
    group_wait: 5s
    match: 
      alertname: rules2-进程数告警
  - receiver: rules3-CPU使用告警
    group_wait: 5s
    match: 
      alertname: rules3-CPU使用告警
  - receiver: rules4-内存使用告警
    group_wait: 5s
    match: 
      alertname: rules4-内存使用告警
receivers:
- name: rules2-进程数告警
  email_configs:
  - to: '邮箱'
    html: '{{ template "email.to.html" .}}'
- name: rules1-协程数告警
  email_configs:
  - to: '邮箱'
    html: '{{ template "email.to.html" .}}'
- name: rules3-CPU使用告警
  email_configs:
  - to: '邮箱'
    html: '{{ template "email.to.html" .}}'
- name: rules4-内存使用告警
  email_configs:
  - to: '邮箱'
    html: '{{ template "email.to.html" .}}'
- name: default_receiver
  email_configs:
  - to: '邮箱'

完成配置后我们启动alertmanager服务,然后观察邮箱:

提示:html: '{{ template "email.to.html" .}}'是邮件方式的一个模板设置,因为原始邮件内容不太直观,因此基于此可自定义设置。大家进行时可去除该行,如果要直接使用一个模板,也可直接点此设置自定义模板哦

可以看到源源不断有很多告警不断进来,没错,只要你没有停止alertmanager服务,只要你设置的表达式的阈值很低,那么告警会持续触发哦。间隔时间都可以设置,如上配置中作了详细描述,单位是秒或分钟,如想设置成240秒,则值可以是4m,也可以是240s。

到此我们的告警流程也就走完了,希望能带给你成功的喜悦,期待再会。

海阔凭鱼跃,天高任鸟飞。

热门文章

暂无图片
编程学习 ·

exe4j详细使用教程(附下载安装链接)

一、exe4j介绍 ​ exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具,无论这些应用是用于服务器,还是图形用户界面(GUI)或命令行的应用程序。如果你想在任务管理器中及Windows XP分组的用户友好任务栏…
暂无图片
编程学习 ·

AUTOSAR从入门到精通100讲(126)-浅谈车载充电系统通信方案

01 引言 本文深入研究车载充电系统策略,设计出一套基于电动汽车电池管理系统与车载充电机的CAN通信协议,可供电动汽车设计人员参考借鉴。 02 电动汽车充电系统通讯网络 电动汽车整车控制系统中采用的是CAN总线通信方式,由一个整车内部高速CAN网络、内部低速CAN网络和一个充电…
暂无图片
编程学习 ·

CMake(九):生成器表达式

当运行CMake时,开发人员倾向于认为它是一个简单的步骤,需要读取项目的CMakeLists.txt文件,并生成相关的特定于生成器的项目文件集(例如Visual Studio解决方案和项目文件,Xcode项目,Unix Makefiles或Ninja输入文件)。然…
暂无图片
编程学习 ·

47.第十章 网络协议和管理配置 -- 网络配置(八)

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…
暂无图片
编程学习 ·

元宇宙技术基础

请看图: 1、通过AR、VR等交互技术提升游戏的沉浸感 回顾游戏的发展历程,沉浸感的提升一直是技术突破的主要方向。从《愤怒的小鸟》到CSGO,游戏建模方式从2D到3D的提升使游戏中的物体呈现立体感。玩家在游戏中可以只有切换视角,进而提升沉浸…
暂无图片
编程学习 ·

flink的伪分布式搭建

一 flink的伪分布式搭建 1.1 执行架构图 1.Flink程序需要提交给 Job Client2.Job Client将作业提交给 Job Manager3.Job Manager负责协调资源分配和作业执行。 资源分配完成后,任务将提交给相应的 Task Manage。4.Task Manager启动一个线程以开始执行。Task Manage…
暂无图片
编程学习 ·

十进制正整数与二进制字符串的转换(C++)

Function one: //十进制数字转成二进制字符串 string Binary(int x) {string s "";while(x){if(x % 2 0) s 0 s;else s 1 s;x / 2;}return s; } Function two: //二进制字符串变为十进制数字 int Decimal(string s) {int num 0, …
暂无图片
编程学习 ·

[含lw+源码等]微信小程序校园辩论管理平台+后台管理系统[包运行成功]Java毕业设计计算机毕设

项目功能简介: 《微信小程序校园辩论管理平台后台管理系统》该项目含有源码、论文等资料、配套开发软件、软件安装教程、项目发布教程等 本系统包含微信小程序做的辩论管理前台和Java做的后台管理系统: 微信小程序——辩论管理前台涉及技术:WXML 和 WXS…
暂无图片
编程学习 ·

树莓派驱动DHT11温湿度传感器

1,直接使用python库 代码如下 import RPi.GPIO as GPIO import dht11 import time import datetimeGPIO.setwarnings(True) GPIO.setmode(GPIO.BCM)instance dht11.DHT11(pin14)try:while True:result instance.read()if result.is_valid():print(ok)print(&quo…
暂无图片
编程学习 ·

ELK简介

ELK简介 ELK是三个开源软件的缩写,Elasticsearch、Logstash、Kibana。它们都是开源软件。不过现在还新增了一个 Beats,它是一个轻量级的日志收集处理工具(Agent),Beats 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstas…
暂无图片
编程学习 ·

Linux 基础

通常大数据框架都部署在 Linux 服务器上,所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列,这个系列很全面也很经典。但如果你希望能够快速地入门,这里推荐《Linux 就该这么学》,其网站上有免费的电…
暂无图片
编程学习 ·

Windows2022 无线网卡装不上驱动

想来 Windows2022 和 windows10/11 的驱动应该差不多通用的,但是死活装不上呢? 搜一下,有人提到 “默认安装时‘无线LAN服务’是关闭的,如果需要开启,只需要在“添加角色和功能”中,选择开启“无线LAN服务…
暂无图片
编程学习 ·

【嵌入式面试宝典】版本控制工具Git常用命令总结

目录 创建仓库 查看信息 版本回退 版本检出 远程库 Git 创建仓库 git initgit add <file> 可反复多次使用&#xff0c;添加多个文件git commit -m <message> 查看信息 git status 仓库当前的状态git diff 差异对比git log 历史记录&#xff0c;提交日志--pret…
暂无图片
编程学习 ·

用Postman生成测试报告

newman newman是一款基于nodejs开发的可以运行postman脚本的工具&#xff0c;使用Newman&#xff0c;可以直接从命令运行和测试postman集合。 安装nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 选择自己系统相对应的版本内容进行下载&#xff0c;然后傻瓜式安…
暂无图片
编程学习 ·

Java面向对象之多态、向上转型和向下转型

文章目录前言一、多态二、引用类型之间的转换Ⅰ.向上转型Ⅱ.向下转型总结前言 今天继续Java面向对象的学习&#xff0c;学习面向对象的第三大特征&#xff1a;多态&#xff0c;了解多态的意义&#xff0c;以及两种引用类型之间的转换&#xff1a;向上转型、向下转型。  希望能…