Prometheus(三)Grafana部署及部署告警

2023-10-28

一、Grafana部署及模板展示

grafana是一款基于go语言开发的通用可视化工具,支持从不同的数据源加载并展示数据,可作为其数据源的部分储存系统如下所示:

TSDB:Prometheus、IfluxDB、OpenTSDB和Graphit

日志和文档存储:Loki和ElasitchSearch

分布式请求跟踪:Zipkin、Jaeger和Tenpo

SQL DB:Mysql、PostgreSQL和Microsoft SQL server

grafana基础默认监听于TCP协议的3000端口,支持集成其他认证服务,且能够通过/metrics输出内建指标

数据源(Data Source):提供用于展示的数据的储存系统
仪表盘(Dashboard):组织和管理数据的可视化面板(Panel)
团队和用户:提供了面向企业组织层级的管理能力

1.Grafan部署步骤

[root@prometheus ~]# ls
grafana-7.3.6-1.x86_64.rpm
[root@prometheus ~]# yum install grafana-7.3.6-1.x86_64.rpm -y
[root@prometheus ~]# systemctl start grafana-server.service
[root@prometheus ~]# ss -antp | grep grafana-server

mark

mark

mark

mark

mark

mark

二、打标签

1.重新打标定义(在job上定义)

  • 对target重新打标是在数据抓取之前动态重写target标签的强大工具,在每个数据抓取配置中,可以定义多个relabel步骤,它们将按照定义的顺序依次执行

  • 对于发现的每个target,Prometheus默认会执行如下操作:

job的标签设定为其所属的job name的值;

_address_标签的值为该target的套接字地址":"

instance标签的值为_address_的值;

_scheme_标签的值为抓取该target上指标时使用的协议(http或https) ;

_metrics _path_标签的值为抓取该target上的指标时使用URI路径,默认为/metrics;

param_标签的值为传递的URL参数中第一个名称为的参数的值

重新标记期间,还可以使用该target上以"meta "开头的元标签;

各服务发现机制为其target添加的元标签会有所不同;

重新标记完成后,该target上以"_"开头的所有标签都会被移除;

若在relabel的过程中需要临时存储标签值,则要使用tmp标签名称为前缀进行保存,以避免同Prometheus的内建标签冲突

2.relabel config(重新打标配置)

修改标签值、增加删除标签,通过调用不同参数实现自己的需求

source_labels:指定调用哪些已有的标签(可引用多个)在重新打标的时候会将这些标签对应的值给引用/提取并连接起来,例如: cpu指标{host=node1; host=node2 }

target_labels:与source_labels组合使用,可以指定使用哪个已有标签赋值给指定的新标签

separator:对应源标签的标签值使用什么连接符,默认为" ;"

regex:对于源标签,使用哪个正则表达式对源标签进行模式匹配、匹配后可以将对应的结果复制到target上,赋值方式:(引用所有正则表达式的内容进行赋值)

modulus:hash算法函数

replacement:把目标标签的值改为新的值

action <relabel_action>:表示重新打标的方式是什么,以及要实现什么功能

三、prometheus告警功能

Prometheus对指标的收集、存储同告警能力分属于Prometheus Server和AlertManager(通用的组件)两个独立的组件,前者仅负责基于"告警规则"生成告警通知,具体的告警操作则由后者完成。Alertmanager负责处理由客户端发来的告警通知客户端通常是Prometheus server,但它也支持接收来自其它工具的告警。Alertmanager对告警通知进行分组、去重后,根据路由规则将其路由到不同的receiver,如Email、短信或PagerDuty等。目前Alertmanager还不支持钉钉,那用户完全可以通过Webhook与钉钉机器人进行集成,从而通过钉钉接收告警信息。同时AltManager还提供了静默和告警抑制机制来对告警通知行为进行优化

1.告警功能概述

prometheus对指标的收集、存储与告警能力分属于Prometheus serve和alertmanager两个独立的组件,pro-server只负责通过"告警规则"生成告警通知,具体告警操作是由alertmmanager完成

2.告警规则

是由PromQL编写的布尔值表达式使用>< =与一个常用量值,比如80%进行比较,其返回值为true或false,prometheus-server对抓取到的指标序列与告警规则中做为比较的Prometheus匹配,则会把此样本值抓取过来作比较,若返回值为true则认为指标异常,不能满足false,则为正常值以上表达式为告警规则表达式。比如:筛选一个指标数据cpu使用率<0%系统异常

3.通知告警信息

一旦条件表达式为true了就会触发通知信息,送给altermanager,由alter借助特定服务的API或者访问入口,将此信息发出去一般称为告警媒介,也可以借助邮件进行告警SMTP

4.prometheus监控系统的告警逻辑

route:告警路由,分组、分类分发告警消息给不同渠道

prometheus通过alter-rule规则,生成告警通知给altermanager,altermanager会生成本地的告警路由表(第一路由默认称为根路由,所有的告警信息都需要一个根路由,没有一个匹配项,则需要设置一个默认路由)为实现将特定的信息发送给特定的用户。

例如:

按消息级别来看,严重、中等、普通级别,红色报警、蓝色报警,应用发送方

按分组:业务运维、系统运维、基础设施运维、k8s运维

5.告警功能

除了基本的告警通知能力外,Altermanager还支持对告警进行去重、分组、抑制

6.静默、抑制、分组等功能

分组 (Grouping):将相似告警合并为单个告警通知的机制,在系统因大面积故障而触发告警潮时,分组机制能避免用户被大量的告警噪声淹没,进而导致关键信息的隐没;

抑制(Inhibition):系统中某个组件或服务故障而触发告警通知后,那些依赖于该组件或服务的其它组件或服务可能也会因此而触发告警,抑制便是避免类似的级联告警的一种特性,从而让用户能将精力集中于真正的故障所在;

静默(silent):是指在一个特定的时间窗口内,即便接收到告警通知,Alertmanager也不会真正向用户发送告警信息的行为;通常,在系统例行维护期间,需要激活告警系统的静默特性;

路由(route):用于配置Alertmanager如何处理传入的特定类型的告警通知,其基本逻辑是根据路由匹配规则的匹配结果来确定处理当前告警通知的路径和行为

四、部署告警对接邮箱

在prometheus-server端定义告警规则,指定alertmanager的位置,将告警信息发送给alert处理

1.安装altermanager

[root@prometheus ~]# cd /opt/
[root@prometheus opt]# ls
alertmanager-0.23.0.linux-amd64.tar.gz
[root@prometheus opt]# tar zxf alertmanager-0.21.0.linux-amd64.tar.gz -C /usr/local/
[root@prometheus opt]# ln -s /usr/local/alertmanager-0.21.0.linux-amd64/ /usr/local/alertmanager
[root@prometheus opt]ln -s /usr/local/prometheus-0.21.0.linux-amd64/prometheus /usr/local/bin

2.查看配置文件

[root@prometheus ~]# cat /usr/local/alertmanager-0.21.0.linux-amd64/alertmanager.yml 
route:                                               #路由信息
  group_by: ['alertname']                            #分组
  group_wait: 30s                                    #分组缓冲/等待时间
  group_interval: 5m                                 #重新分组时间
  repeat_interval: 1h                                #重新告警间隔
  receiver: 'web.hook'                               #接收方/媒介
receivers:
- name: 'web.hook'
  webhook_configs:
  - url: 'http://127.0.0.1:5001/'                    #标注5001端口
inhibit_rules:                                       #抑制规则的策略
  - source_match:                                    #匹配项
      severity: 'critical'                           #严重的级别
    target_match:
      severity: 'warning'                           #target匹配warning级别
    equal: ['alertname', 'dev', 'instance']          #符合alertname、dev、instance

3.修改alertmanager的配置文件

global:
  resolve_timeout: 5m
  smtp_from: 418044336@qq.com
  smtp_auth_username: 418044336@qq.com
  smtp_auth_password:
  smtp_require_tls: false
  smtp_smarthost: 'smtp.qq.com:465'

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-test'
receivers:
- name: 'email-test'
  email_configs: ossiocvhdvirbiad
  - to: 418044336@qq.com
    send_resolved: true

4.配置绑定的邮箱

登入邮箱→设置→账户→IMAP/SMTP服务→开启

5.启动alertmanager

[root@localhost alertmanager]# ./alertmanager 

6.相关配置文件

[root@prometheus ~]# cd /usr/local/alertmanager
[root@prometheus alertmanager]# mkdir alert-config
[root@prometheus alertmanager]# cd alert-config/
[root@prometheus alert-config]# mkdir -p alert_rules targets
[root@prometheus alert-config]# ls
alert_rules  targets
[root@prometheus alert-config]# cd alert_rules/
[root@prometheus alert_rules]# vim instance_down.yaml
groups:
- name: AllInstances
  rules:
  - alert: InstanceDown
    # Condition for alerting
    expr: up == 0
    for: 20s
    # Annotation - additional informational labels to store more information
    annotations:
      title: 'Instance down'
      description: Instance has been down for more than 20 seconds.'
    # Labels - additional labels to be attached to the alert
    labels:
      severity: 'critical'
      
      ----
 [root@prometheus ~]# cd /usr/local/alertmanager/alert-config/targets/
[root@prometheus targets]# vim alertmanagers.yaml 
 
- targets:
  - 192.168.126.12:9093
  labels:
    app: alertmanager
    
    ----
[root@prometheus targets]# vim nodes-linux.yaml 
 
- targets:
  - 192.168.126.11:9100
  - 192.168.126.12:9100
  - 192.168.126.13:9100
  labels:
    app: node-exporter
    job: node    
    
    ----
[root@prometheus targets]# vim prometheus-servers.yaml 
 
- targets:
  - 192.168.126.11:9090
  labels:
    app: prometheus
    job:  prometheus    

7、配置prometheus启动文件

[root@prometheus ~]# cd /usr/local/alertmanager/alert-config/
[root@prometheus alert-config]# vim prometheus.yml
# my global config
# Author: MageEdu <mage@magedu.com>
# Repo: http://gitlab.magedu.com/MageEdu/prometheus-configs/
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
 
# Alertmanager configuration
alerting:
  alertmanagers:
  - file_sd_configs:
    - files:
      - "targets/alertmanagers*.yaml"
 
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  - "rules/*.yaml"
  - "alert_rules/*.yaml" 
 
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    file_sd_configs:
    - files:                                               
      - targets/prometheus-*.yaml  
      refresh_interval: 2m 
 
  # All nodes
  - job_name: 'nodes'
    file_sd_configs:
    - files:                                               
      - targets/nodes-*.yaml  
      refresh_interval: 2m 
 
  - job_name: 'alertmanagers'
    file_sd_configs:
    - files:
      - targets/alertmanagers*.yaml
      refresh_interval: 2m 

8.指定文件启动alertmanager

[root@prometheus ~]# cd /usr/local/alertmanager
[root@prometheus alertmanager]# ./alertmanager

9.指定文件启动prometheus

[root@prometheus ~]# cd /usr/local/prometheus-2.27.1.linux-amd64/
[root@prometheus prometheus-0.20.0.linux-amd64]# ./prometheus --config.file=./alert-config/prometheus.yml

10.模拟故障(停止node_exporter)

  • 查看prometheus-ui

mark

  • 查看邮箱
    mark
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Prometheus(三)Grafana部署及部署告警 的相关文章

  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 从哪里获取 iostream.h

    我正在尝试在 Linux 中做一些事情 但它抱怨找不到 iostream h 我需要安装什么才能获取此文件 这个标准头的正确名称是iostream没有扩展名 如果您的编译器仍然找不到它 请尝试以下操作 find usr include na
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • 用于 e NetworkManager VPN 连接的 dbus 信号处理程序

    我需要开发一些在建立 VPN 连接时执行的 python 代码 VPN 由 NetworkManager 控制 我试图弄清楚如何为此使用 NM DBUS 事件 使用 dbus monitor system 我能够识别连接信号 signal
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • 获取 Pod 处于挂起状态的平均时间

    我正在尝试使用 prometheus 计算 pod 在 grafana 中处于挂起状态的平均时间 我可以使用此查询生成一个图表 以获取一段时间内处于挂起状态的 Pod 数量 sum kube pod status phase phase P
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 使用 hcitool 扫描低功耗蓝牙?

    当我运行此命令时 BLE 设备扫描仅持续 5 秒 sudo timeout 5s hcitool i hci0 lescan 输出显示在终端屏幕中 但是 当我将输出重定向到文件以保存广告设备的地址时 每次运行该命令时 我都会发现该文件是空的
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当

随机推荐

  • 2021-Twins: Revisiting the Design of Spatial Attention

    文章目录 1 Title 2 Summary 3 Problem Statement 4 Method s 4 1 Twins PCPVT 4 2 Twins SVT 4 2 1 Locally Grouped Self Attention
  • node.js(读取文件)

    fs fs 模块是Node js官方提供的 用来操作文件的模块 它提供了一系列的方法和属性 用来满足用户对文件的操作需求 读取文件 fs readFile 读取文件 1 导入fs模块 来操作文件 const fs require fs 2
  • glibc版本查看_glibc做版本兼容的原理介绍

    相关技术叫 compact symbols 当我们比如查看libc 2 29 so的dynamic symbol table的时候 我们可以看到3个glob64的实现 随后你的程序要refer对应的glob64 这时 你的dynamic l
  • qt自定义MessageBox

    头文件 ifndef HINT INTERFACE H define HINT INTERFACE H include
  • docker 安装卸载及常用命令

    Docker 镜像与容器 1 安装卸载docker 1 1 卸载docker 1 1 1 查看已安装的docker列表 root centos7 yum list installed grep docker containerd io x8
  • Python、pip以及libsvm等的安装

    从python官网下载并安装python https www python org downloads windows 设置python的环境变量 命令行输入python 如下安装成功 安装pip 到官网下载pip https pypi p
  • Unity——控制物体移动的方法

    控制物体移动的三种方法 一 常规方法 四个方向 if Input GetKey KeyCode W transform Translate Vector3 forward moveSpeed Time deltaTime if Input
  • android的模拟器闪动处理

    为什么80 的码农都做不了架构师 gt gt gt 今天 建立了一个示例android项目 运行的时候 模拟器每隔几秒便闪一下 开始以为是项目的问题 或者版本 v16 的问题 换了其他 还是闪动 网上查了下 只有一人遇到 http zhid
  • 一些在线图床工具

    以下排列按个人喜爱程度 SM MS https sm ms 和picgo搭配 非常哇塞 普通用户只有5G 不算很大 对我来说够用了 举例 https sm ms image fiNMYZ5pxycUmjX 路过图床 https imgchr
  • C#中字符串判断EndsWith和Contains的效率比较

    关于字符串的判断 EndsWith和Contains下面做了两个简单的例子 运行后测试了一下所耗时间 public void TestContains DateTime starTime DateTime Now string str 20
  • Pip install 和Conda install 的区别和使用场景

    文章目录 一 Conda 和Pip的区别 总结 二 Pip install和Conda install的区别 1 默认安装路径不同 1 python包 2 非python包 相关问题 解决 2 conda list列表数量 gt pip l
  • mysql中替换字段的部分内容

    如果想替换表中所有记录的某一个字段的指定字符串内容 可以使用mysql提供的replace 函数来实现 表记录如下 我想将address字段的湖北这部分内容替换成拼音hubei 那么sql语句如下 update user set addre
  • ConvTranspose2d(反卷积操作)

    nn ConvTranspose2d 反卷积操作 1 公式 class torch nn ConvTranspose2d in channels out channels kernel size stride 1 padding 0 out
  • Python 教程

    一 Python环境下载 百度网盘链接 https pan baidu com s 12MnzyIZZuKBiveebPdtJ3w 提取码 0st4 二 Python安装步骤 1 点击python 3 8 1 amd64 exe 2 选择安
  • Python中模块、包、库、框架的理解

    一 模块 module 以 py 文件开头的都叫做模块 模块中有定义的变量 函数 类 模块的名称为 py文件的名称 作为全局变量 name 的值 如果是模块A自己py A py则 name main 如果是被其他模块import之后使用的话
  • 机器学习实战之决策树最有特征的选取

    在学习了jack cui机器学习博客后 为了给自己留下一个理解的笔记 本人比较笨 以后方便查看 他的博客地址在下方 写得很好 点击打开链接 决策树机器学习的一种分类方法 拿相亲来说 决策树模型就是上面这一个 长方形为这个人的某个特征 决策树
  • sql把逗号分割的字符串转换为可放入in的条件语句的字符数列

    mysql 不能直接使用in子句 会当做一个字符来处理 使用FIND IN SET 字段 变量 orcal在in子句中加入 SELECT REGEXP SUBSTR 变量 1 LEVEL FROM DUAL CONNECT BY REGEX
  • element-ui的分页如何实现

    element ui的分页如何实现 表格需要绑定的属性
  • mysql 中enum用法

    enum最大长度65535 也就是可以存65535个预定义值 enum底层存的是十进制整数 严格按顺序1 2 3 4 5 排列 固千万不要用enum来存数字 用例 一件商品从付款到收货的流程的5个流程 未付款 已付款 已发货 已送达 已收货
  • Prometheus(三)Grafana部署及部署告警

    文章目录 一 Grafana部署及模板展示 1 Grafan部署步骤 二 打标签 1 重新打标定义 在job上定义 2 relabel config 重新打标配置 三 prometheus告警功能 1 告警功能概述 2 告警规则 3 通知告