Prometheus 配置说明

Prometheus 配置说明

注意:有些文件夹是手动创建,在复制前先确认一下文件夹是否存在,不存在的话自己创建一个,不要盲目抄

global:
  scrape_interval: 1m
  evaluation_interval: 1m
  external_labels:
    environment: production
  scrape_timeout: 10s

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

rule_files:
  - "/opt/bitnami/prometheus/rules/*rule.yml"
  - "/etc/prometheus/rules/memory_usage.yml"
  - "/etc/prometheus/rules/disk_usage.yml"

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "centosCheck"
    metrics_path: '/metrics'
    static_configs:
      - targets: ["ip:9100"]
    
  - job_name: "JVM"
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ["ip1:8209","ip2:6208"]
        labels:
          env: 'test'
          app: 'app1'
          appName: 'JVM平台'
      - targets: ["ip3:8208","ip4:8209"]
        labels:
          env: 'onLine'
          app: 'app2'
          appName: 'JVM平台'

全局配置 global

  • global: 用于设置全局配置项,这些配置项会应用于所有的抓取配置和路由规则
    • scrape_interval: 定义 Prometheus 服务器定期抓取指标的时间间隔,默认为 1 分钟(1m)
    • evaluation_interval: 定义 Prometheus 服务器执行规则评估的时间间隔,默认为 1 分钟(1m)
    • external_labels: 定义 Prometheus 实例应用于所有接收的指标的标签列表。这些标签可用于识别不同的 Prometheus 实例,或标识集群、环境等信息
    • scrape_timeout: 定义 Prometheus 服务器在抓取指标时允许的超时时间,默认为 10 秒(10s)

告警通知 alerting

  • alerting: 触发告警后通知方式
    • alertmanagers: 定义了告警管理器的地址,触发告警后会委托给管理器处理。在上面的例子中,告警管理器的地址是 localhost:9093,并且这个地址是静态配置的,也就是说 Prometheus 不会动态地发现新的告警管理器

规则文件加载 rule_files

  • rule_files: 加载告警规则文件列表
    • 在这个示例中,定义了 Prometheus 加载的规则文件列表,包括了一个名为 memory_usage.rules 的告警规则文件和一个名为 disk_usage.rules 的记录规则文件
    • 根据正则表达式加载规则文件,如 /opt/bitnami/prometheus/rules/*rule.yml 是以 /etc/prometheus/rules/ 目录下的所有以 rules 结尾的文件都将作为规则文件进行加载

抓取目标的指标 scrape_configs

  • scrape_config: 定义数据抓取目标的配置
    • job_name: 用于定义要抓取的目标的名称,可以是单个目标或者多个目标。这些目标可以是HTTP、HTTPS、DNS、SNMP、JMX等协议。Prometheus会使用这个名称进行区分,当一个目标被成功抓取时,Prometheus会给它一个时间戳并存储相应的指标。在查询时,可以使用job_name来选择要查询的指标源
      • metrics_path: 用于指定指标数据的路径,上面的例子中的 JVM 是从 /actuator/prometheus 路径获取对应的指标。如果没有可以去掉或者注释掉 #metrics_path: '/actuator/prometheus'
      • static_configs: 是一种配置方式,用于定义一组静态的目标列表
        • targets: 用于定义需要抓取指标的目标的列表。它指定了要监控的目标的IP地址和端口号,让Prometheus定期去访问这些地址,抓取相应的指标数据
          • labels: 可以为每个job_nametarget添加一些labels,以便更好地描述和区分指标数据,可以通过这些labels来查询和过滤指标数据,并在报警规则中使用这些labels来进行更加精准的报警。在上述例子的 JVM 则是用于标识各类环境或分组。
          • 注意 : labels 如果要使用中文,必须确认文件格式是否为 UTF-8,可以的话尽量使用 vscode 查看一下,不然可能会导致 Prometheus 启动失败

查看抓取到的指标

比如需要在 Grafana 自定义数据表格或告警规则,那么就需要知道对应的目标抓取的指标有哪些

打开 Prometheus 自带的运维网址,默认的端口是 9092ip:9092
通过 Status 下拉框,可以找到 Targets 目标

在这里插入图片描述

可以看到自己所有抓取的目标

在这里插入图片描述

点击后可以获取抓取的指标,标红就是对应的指标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVRUajjH-1680509626346)(Snipaste_2023-04-03_15-08-10.png)]

可以通过 Prometheus 自带的运维网址中的 Graph 使用 PromQL 查询。具体 sql 详情自己查阅文档即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-waBiTwZh-1680509626346)(Snipaste_2023-04-03_15-11-40.png)]

如果要精准到某个指标,可以使用 targ{name="value",name2="value2"} 方式查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUfq9fVn-1680509626347)(Snipaste_2023-04-03_15-14-53.png)]


告警规则 rule_files

以下是一个 JVM 下线告警规则文件示例

注意:其中的配置变量需确认存在再复制使用
  • prometheus.yml
global:
  scrape_interval: 15s 
  evaluation_interval: 15s
  
rule_files:
  - "/opt/bitnami/prometheus/rules/*rule.yml"
  
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["ip:9090"]
    
  - job_name: "JVM"
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ["ip1:8209","ip2:6208"]
        labels:
          env: 'onLine'
          app: 'app1'
          appName: 'JVM平台'
  
  • jvm-rule.yml
# severity按严重程度由高到低:red、orange、yello、blue
groups:
  - name: jvm
    rules:
      # down了超过30秒
      - alert: 下线警告-30s
        expr: up{job="JVM",env="onLine"} == 0
        for: 30s
        labels:
          severity: yellow
          team: jvm
        annotations:
          summary: "实例: {{ $labels.appName }} 下线"
          description: "下线超过 30 秒"
        
  - name: jvm2
    rules:
      # down了超过5分钟
      - alert: 下线警告-5m
        expr: up{job="JVM",env="onLine"} == 0
        for: 5m
        labels:
          severity: red
          team: jvm
        annotations:
          summary: "实例: {{ $labels.appName }} 采集软件下线"
          description: "下线超过 5 分钟"
  • groups: 定义了一组告警规则,其中包含一个或多个告警规则
  • rules: 定义了告警规则的条件、标签、注释、时间间隔等
    • alert: 告警规则都有一个唯一的 alert 名称
    • expr: 告警表达式,当满足表达式的条件时会转发给专门的告警模块,如 alertmanagers
      • upPrometheus 自带的在线变量,如果不在 {} 其中指定对应标识,那么所有的目标都会生效,如果想精准到某个目标就需要在 {} 指定对应的标识。上述例子可以看到 vm-rule.yml 文件中的告警条件里都是带 {env="onLine"},它是对应 prometheus.yml 中的 labels 标识的
    • for: 定义触发告警的时间持续阈值,单位为秒。例如,如果设置为 5m,则表示连续 5 分钟满足告警条件才会触发告警
    • labels: 定义告警的标签,可以用于对告警进行分类和过滤。上述中 team 在之后可以用于分组告警,指某类告警信息发送给指定的人
    • annotations: 定义告警的注释,可以用于提供额外的告警信息
      • description: 对告警的详细描述
      • summary: 对告警的简要概述
      • title: 告警的标题
      • runbook_url: 运行手册的URL
      • severity: 告警的严重性级别
      • status: 告警的状态
      • value: 触发告警的值

通过 Alertmanager 发送邮箱告警信息,可能并不准确,有问题可以评论中提,谢谢

这边就不描述安装过程了,以下例子与上述配置有关联请仔细查询

alertmanager.yml

global: # 全局配置
  resolve_timeout: 5m  # 处理超时时间,默认为5min
  smtp_from: '使用哪个邮箱进行发送'  # 邮件发送地址
  smtp_smarthost: 'smtp.qq.com:25'  # 邮箱SMTP 服务地址
  smtp_auth_username: ''  # 邮件发送地址用户名
  smtp_auth_password: ''  # 邮件发送地址授权码
  smtp_require_tls: false # 用于指定是否需要在与 SMTP 服务器通信时使用 TLS 加密。如果将其设置为 true,则 Alertmanager 会在与 SMTP 服务器建立连接时强制使用 TLS 加密
  smtp_hello: 'qq.com'

route:  # 设置报警的分发策略
  group_by: ['alertname']
  group_wait: 20s  #  最初即第一次等待多久时间发送一组警报的通知
  group_interval: 5m  # 在发送新警报前的等待时间
  repeat_interval: 30m  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email' # 它定义了警报应该如何发送,包括用于发送警报的地址和协议(例如电子邮件、Slack、PagerDuty 等)

receivers:  # 配置告警消息接受者信息
- name: 'email'
  email_configs:
  - to: ''  # #邮件接收地址 
    send_resolved: true

inhibit_rules:
- source_match:
    severity: 'red'
  target_match_re:
    severity: ^(blue|yellow|orange)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']
- source_match:
    severity: 'orange'
  target_match_re:
    severity: ^(blue|yellow)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']
- source_match:
    severity: 'yellow'
  target_match_re:
    severity: ^(blue)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']
inhibit_rules
  • inhibit_rules 配置用于防止在一段时间内不必要地触发多个告警,以免造成冗余的通知和干扰。
  • Alertmanager 的配置文件中,inhibit_rules 是一个列表,其中包含多个规则。每个规则都定义了一个被抑制的告警和一个要抑制该告警的匹配器。当匹配器中的所有告警都匹配时,该规则将触发,阻止其中一个告警被发送到接收器。
    * inhibit_rules 包含以下字段:
    • target_match: 表示被抑制告警的匹配条件,可以是告警标签的匹配器,也可以是告警名称的匹配器。
    • source_match: 表示要被阻止发送的告警匹配条件,同样可以是告警标签的匹配器,也可以是告警名称的匹配器。
    • equal:一个布尔值,表示在两个告警中匹配的标签是否必须相等。如果为 true,则在两个告警中匹配的标签必须完全相等,否则不匹配
以下是分组告警
global: # 全局配置
  resolve_timeout: 5m  # 处理超时时间,默认为5min
  smtp_from: ''  # 邮件发送地址
  smtp_smarthost: 'smtp.qq.com:25'  # 邮箱SMTP 服务地址
  smtp_auth_username: ''  # 邮件发送地址用户名
  smtp_auth_password: ''  # 邮件发送地址授权码
  smtp_require_tls: false
  smtp_hello: 'qq.com'

route:  # 设置报警的分发策略
  group_by: ['alertname']
  group_wait: 20s  #  最初即第一次等待多久时间发送一组警报的通知
  group_interval: 5m  # 在发送新警报前的等待时间
  repeat_interval: 30m  # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  receiver: 'email'
  routes:
  - receiver: 'lingqi'
    match_re:
      team: lingqi
  - receiver: 'jvm'
    match_re:
      team: jvm

receivers:  # 配置告警消息接受者信息
- name: 'email'
  email_configs:
  - to: ''  # #邮件接收地址1
    send_resolved: true
- name: 'lingqi'
  email_configs:
  - to: ''  # #邮件接收地址2
    send_resolved: true
- name: 'jvm'
  email_configs:
  - to: ''  # #邮件接收地址3
    send_resolved: true

inhibit_rules:
- source_match:
    severity: 'red'
  target_match_re:
    severity: ^(blue|yellow|orange)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']
- source_match:
    severity: 'orange'
  target_match_re:
    severity: ^(blue|yellow)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']
- source_match:
    severity: 'yellow'
  target_match_re:
    severity: ^(blue)$
  # Apply inhibition if the alertname and instance is the same.
  equal: ['alertname', 'instance']

通过 team: jvm 来匹配 receiver: 'jvm',并通过 team: jvm 来发送 name: 'jvm' 指定的收件人

### 配置 Prometheus 和 Alertmanager 与 Kubernetes 集成 要在 Kubernetes 中配置 Prometheus 和其组件 Alertmanager,可以通过 Helm Chart 或手动 YAML 文件的方式完成。以下是具体的说明: #### 安装和配置 Prometheus 及 Alertmanager Helm 是一种常用的工具来管理 Kubernetes 应用程序的部署。通过 Helm Chart,可以轻松安装并初始化 Prometheus 和 Alertmanager。 使用 Helm 添加官方仓库并安装 Alertmanager: ```bash helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install alertmanager prometheus-community/alertmanager ``` 上述命令会自动创建默认的 Alertmanager 配置文件[^2]。 如果需要自定义配置,则可以在 `values.yaml` 文件中修改相关内容,并重新运行安装命令: ```bash helm upgrade --install alertmanager prometheus-community/alertmanager -f custom-values.yaml ``` #### 创建自定义 Alertmanager 配置 为了使 Alertmanager 能够发送告警到不同的通知渠道(如钉钉、企业微信等),需编写自定义的配置文件 `alertmanager-config.yaml` 并将其应用于集群中。 以下是一个示例配置文件,用于将告警发送至多个钉钉群聊机器人 Webhook 地址: ```yaml global: resolve_timeout: 5m route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'dingtalk-receiver' receivers: - name: 'dingtalk-receiver' webhook_configs: - url: 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token_1' # 替换为实际的Webhook地址 send_resolved: true - url: 'https://oapi.dingtalk.com/robot/send?access_token=your_access_token_2' # 替换为另一个Webhook地址 send_resolved: true ``` 应用该配置文件到 Kubernetes 集群中: ```bash kubectl apply -f alertmanager-config.yaml ``` #### 将 Prometheus 连接到 Alertmanager Prometheus 需要了解 Alertmanager 的位置以便转发告警数据。这通常通过编辑 Prometheus配置文件实现。例如,在 `prometheus.yml` 中指定 Alertmanager URL: ```yaml alerting: alertmanagers: - static_configs: - targets: - "alertmanager.default.svc.cluster.local:9093" ``` 更新后的 Prometheus 配置可通过以下方式生效: ```bash kubectl rollout restart deployment/prometheus-deployment ``` #### 测试集成效果 在成功配置后,访问 Alertmanager 的 Web UI 页面 (`http://<ALERTMANAGER-SERVICE>:9093`) 来验证是否接收到由 Prometheus 发出的告警消息[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值