0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从零入门Prometheus:构建企业级监控与报警系统的最佳实践指南

马哥Linux运维 来源:马哥Linux运维 2025-02-10 11:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

测试环境

prometheus-2.26.0.linux-amd64.tar.gz
下载地址:https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
prometheus-2.54.1.linux-amd64.tar.gz
下载地址:https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
CentOS 7.9

下载并运行Prometheus

# wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
# tar xvzf prometheus-2.26.0.linux-amd64.tar.gz
# cd prometheus-2.26.0.linux-amd64
# ls
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

开始运行之前,先对它进行配置。

配置Prometheus自身监控

Prometheus通过抓取度量HTTP端点来从目标收集指标。由于Prometheus以同样的方式暴露自己的数据,它也可以搜集和监控自己的健康状况。
虽然只收集自身数据的Prometheus服务器不是很有用,但它是一个很好的开始示例。保存以下Prometheus基础配置到一个名为prometheus.yml的文件(安装包自动解压后,解压目录下,默认就就有一个名为prometheus.yml的文件)

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      # 如果需要远程访问, localhost  也可以替换为具体IP,比如10.118.71.170
      - targets: ['localhost:9090']

有关配置选项的完整说明,请参阅配置文档。

启动Prometheus

使用新创建的配置文件来启动 Prometheus,切换到包含 Prometheus 二进制文件的目录并运行

# 启动 Prometheus.
# 默认地, Prometheus 在 ./data 路径下存储其数据库 (flag --storage.tsdb.path).
# ./prometheus --config.file=prometheus.yml

通过访问localhost:9000来浏览状态页。等待几秒让他从自己的 HTTP metric endpoint 来收集数据。

还可以通过访问到其 metrics endpoint(http://localhost:9090/metrics)来验证 Prometheus 是否正在提供有关其自身的 metrics

开放防火墙端口

# firewall-cmd --permanent --zone=public --add-port=9090/tcp
success
# firewall-cmd --reload
success

使用expressin browser

使用 Prometheus 内置的expressin browser访问localhost:9090/graph,选择Graph导航菜单下的Tabletab页 (Classic UI下为Consoletab页)。

通过查看localhost:9090/metrics页面内容可知,Prometheus 导出了关于其自身的一个名为prometheus_target_interval_length_seconds指标(目标采样之间的实际间隔)。将其作为搜索表达式,输入到表达式搜索框中,点击Execute按钮,如下,将返回多个不同的时间序列(以及每个时间序列的最新值),所有时间序列的 metric 名称均为prometheus_target_interval_length_seconds,但具有不同的标签。这些标签具有不同的延迟百分比和目标组间隔(target group intervals)。

7f3e8e9c-e6df-11ef-9310-92fbcf53809c.png

如果我们只对第 99 个百分位延迟感兴趣,则可以使用以下查询来检索该信息:

prometheus_target_interval_length_seconds{quantile="0.99"}

如果需要计算返回的时间序列数,可以修改查询如下:

count(prometheus_target_interval_length_seconds)

更多有关 expression language 的更多信息,请查看 expression language 文档。

使用绘图界面

要绘制图形表达式,请使用 “Graph” 选项卡。

例如,输入以下表达式以绘制在自采样的 Prometheus 中每秒创建 chunk 的速率:

rate(prometheus_tsdb_head_chunks_created_total[1m])

7f5a7e9a-e6df-11ef-9310-92fbcf53809c.png

启动一些采样目标

现在让我们增加一些采样目标供 Prometheus 进行采样。

使用Node Exporter作为采样目标,多关于它的使用请查阅

# wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
# tar -xvzf node_exporter-1.1.2.linux-amd64.tar.gz
# ./node_exporter --web.listen-address 127.0.0.1:8001
# ./node_exporter --web.listen-address 127.0.0.1:8002
# ./node_exporter --web.listen-address 127.0.0.1:8003

现在,应该存在监听http://localhost:8080/metrics, http://localhost:8081/metrics 和http://localhost:8082/metrics的示例目标

配置 Prometheus 来监控示例目标

现在,我们将配置 Prometheus 来采样这些新目标。让我们将所有三个 endpoint 分组为一个称为 “node” 的 job。但是,假设前两个 endpoint 是生产目标,而第三个 endpoint 代表金丝雀实例。为了在 Prometheus 中对此建模,我们可以将多个端组添加到单个 job 中,并为每个目标组添加额外的标签。在此示例中,我们将group=“ production”标签添加到第一个目标组,同时将group=“ canary”添加到第二个目标。

为此,请将以下job定义添加到prometheus.yml中的scrape_configs部分,然后重新启动 Prometheus 实例。修改后的prometheus.yml内容如下

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      - targets: ['10.118.71.170:9090']

  - job_name: 'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8001', 'localhost:8002']
        labels:
          group: 'production'

      - targets: ['localhost:8003']
        labels:
          group: 'canary'

查看Targets(Status->Targets)

7f6f2dc2-e6df-11ef-9310-92fbcf53809c.png

Graph查询

7f92cdc2-e6df-11ef-9310-92fbcf53809c.png

配置规则以将采样的数据聚合到新的时间序列

尽管在我们的示例中并不会有问题,但是在聚集了数千个时间序列中查询时可能会变慢。为了提高效率,Prometheus 允许通过配置的记录规则将表达式预记录到全新的持久化的时间序列中。假设我们感兴趣的是 5 分钟的窗口内测得的每个实例的所有cpu上平均的cpu时间(node_cpu_seconds_total,保留 Job,instance,和mode 维度))。我们可以这样写:

avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

Graph中执行查询,结果如下

7fc71302-e6df-11ef-9310-92fbcf53809c.png

现在,要将由该表达式产生的时间序列记录到一个名为:job_instance_modeavg_rate5m的新指标,使用以下记录规则创建文件并将其保存prometheus.rules.yml

groups:
- name: cpu-node
  rules:
  - record: job_instance_modeavg_rate5m
    expr: avg by (job, instance, mode) (rate(node_cpu_seconds_total[5m]))

在prometheus.yml中添加rule_files语句,以便 Prometheus 选择此新规则。现在,prometheus.yml配置应如下所示:

global:
  scrape_interval:     15s # 默认,每15秒采样一次目标

  # 与其它外部系统(比如federation, remote storage, Alertmanager)交互时,会附加这些标签到时序数据或者报警
  external_labels:
    monitor: 'codelab-monitor'

rule_files:
  - 'prometheus.rules.yml'

# 一份采样配置仅包含一个 endpoint 来做采样
# 下面是 Prometheus 本身的endpoint:
scrape_configs:
  # job_name 将被被当作一个标签 `job=`添加到该配置的任意时序采样.
  - job_name: 'prometheus'

    # 覆盖全局默认值,从该job每5秒对目标采样一次
    scrape_interval: 5s

    static_configs:
      - targets: ['10.118.71.170:9090']

  - job_name: 'node'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:8001', 'localhost:8002']
        labels:
          group: 'production'

      - targets: ['localhost:8003']
        labels:
          group: 'canary'

通过新的配置重新启动 Prometheus,并通过expression brower查询job_instance_modeavg_rate5m,结果如下

7fee26ea-e6df-11ef-9310-92fbcf53809c.png

链接:https://www.cnblogs.com/shouke/p/18667439

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 监控
    +关注

    关注

    6

    文章

    2365

    浏览量

    59123
  • Prometheus
    +关注

    关注

    0

    文章

    33

    浏览量

    2021

原文标题:从零开始掌握Prometheus:企业级监控与报警系统的最佳实践

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Prometheus的架构原理监控”谈起

    Prometheus是继Kubernetes(k8s)之后,CNCF毕业的第二个开源项目,其来源于Google的Borgmon。本文监控这件事说起,深入浅出Prometheus的架构
    的头像 发表于 10-10 15:47 5118次阅读
    <b class='flag-5'>Prometheus</b>的架构原理<b class='flag-5'>从</b>“<b class='flag-5'>监控</b>”谈起

    Prometheus的基本原理与开发指南

      导读      本文由梯度科技云管研发部高级工程师周宇明撰写,共分为7章,紧密围绕Prometheus的基本原理与开发指南展开介绍: 监控系统概述
    的头像 发表于 11-09 10:45 1992次阅读
    <b class='flag-5'>Prometheus</b>的基本原理与开发<b class='flag-5'>指南</b>

    SAS走进企业级存储应用

    SAS走进企业级存储应用串行SCSI(SAS)的出现已经有几年了。2005年,在主要的接口技术中,由于OEM服务器制造商和系统集成商开始提供串行SCSI解决方案,企业级存储市场将会显现革命性的进展
    发表于 11-13 21:58

    采用nvSRAM确保企业级SSD故障时电源可靠性

    数据传输速度超过了NAND闪存的写入速度,因此企业级SSD的写入性能可通过高速数据缓存加以提高。企业级SSD通常采用SDRAM作为缓存,保存并处理存储系统控制器接收到的数据流有关部分
    发表于 09-26 09:44

    大话企业级Android开发

    大话企业级Android开发
    发表于 07-11 19:39

    大话企业级Android开发

    大话企业级Android开发
    发表于 03-31 11:37

    企业级的LInux系统日志管理

    企业级LInux系统日志管理
    发表于 05-29 11:33

    prometheus监控服务的整个流程介绍

    Prometheus,然后Prometheus通过定期拉取的方式来获取监控数据;数据的来源多种多样包括:系统
    发表于 12-23 17:34

    大话企业级Android开发

    大话企业级Android开发
    发表于 03-05 11:15

    iPhone OS企业级部署指南

    iPhone OS企业级部署指南
    发表于 12-10 14:51 57次下载

    戴尔“企业级”视频监控解决方案

    戴尔提供整套包括采集、传输、处理、存储、分析和视频云相关的视频监控解决方案。结合高可靠、高兼容和性能强大的企业级承载平台,除了可满足基本的视频采集和存储需求外,戴尔整体视频监控解决方
    发表于 11-25 15:37 1645次阅读
    戴尔“<b class='flag-5'>企业级</b>”视频<b class='flag-5'>监控</b>解决方案

    基于企业级信息集成平台的数据存储备份系统构建_王永平

    基于企业级信息集成平台的数据存储备份系统构建_王永平
    发表于 03-16 10:10 0次下载

    使用Thanos+Prometheus+Grafana构建监控系统

    对于弹性伸缩和高可用的系统来说,一般有大量的指标数据需要收集和存储,如何为这样的系统打造一个监控方案呢?本文介绍了如何使用 Thanos+Prometheus+Grafana
    的头像 发表于 05-05 21:14 3363次阅读

    基于kube-prometheus的大数据平台监控系统设计

    本文介绍了如何基于 kube-prometheus 设计一个监控系统, 以灵活简单的方式对 kubernetes 上的应用进行指标采集,并实现监控
    的头像 发表于 05-30 17:02 1078次阅读

    企业级MySQL数据库管理指南

    在当今数字化时代,MySQL作为全球最受欢迎的开源关系型数据库,承载着企业核心业务数据的存储与处理。作为数据库管理员(DBA),掌握MySQL的企业级部署、优化、维护技能至关重要。本文将从实战角度出发,系统阐述MySQL在
    的头像 发表于 07-09 09:50 537次阅读