引言

当今世界,监控是企业和开发者必不可少的一项工作。随着信息技术的发展和应用场景的不断扩大,监控系统需要不断升级和优化,以满足业务需求和技术挑战。而 Prometheus+Grafana+Loki 框架作为一种新型的监控系统,正在逐渐受到关注和应用。

Prometheus+Grafana+Loki 框架是由 Prometheus、Grafana 和 Loki 三个开源项目组成的。其中,Prometheus 是一种数据存储和查询引擎,可以帮助用户收集和处理大量的时间序列数据;Grafana 是一种数据可视化和分析工具,可以帮助用户创建和定制各种监控面板;Loki 是一种分布式日志收集和查询系统,可以帮助用户快速地检索和分析大量的日志数据。

本文的目的是介绍和教授 Prometheus+Grafana+Loki 框架的使用方法和最佳实践。具体而言,我们将深入探讨 Prometheus、Grafana 和 Loki 的特点和功能,介绍如何将它们整合起来使用,并提供一些实战演练和案例分析,以帮助读者了解如何在实际工作中应用这一框架。

在本文中,我们将提供详细的指导和建议,以帮助读者掌握 Prometheus+Grafana+Loki 框架的使用方法和技巧。我们相信,通过本文的学习和实践,读者将能够更好地应用 Prometheus+Grafana+Loki 框架,提高监控系统的效率和可靠性,促进业务的发展和创新。

一、Prometheus 基本介绍

Prometheus(由 go 语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为 kubernetes(俗称 k8s)的流行带动了 prometheus 的发展。它可以监控主机,服务,容器,支持多种 exporter 采集数据,还支持 pushgateway 进行数据上报,Prometheus 性能足够支撑上万台规模的集群。

1.1 时间序列数据库的主要优点

时间序列数据库是一种专门用于存储和处理时间序列数据的数据库。时间序列数据是指按照时间顺序排列的数据,例如系统指标、日志数据、传感器数据等。

时间序列数据库的主要优点包括:

  • 高效的数据存储和查询:时间序列数据库使用压缩算法和索引技术来存储和查询数据,可以大大节省存储和查询成本。
  • 灵活的数据模型:时间序列数据库通常采用标签(labels)来标识和区分不同的数据,这使得数据模型非常灵活,可以轻松地适应不同的数据类型和场景。
  • 丰富的查询和聚合功能:时间序列数据库可以支持各种查询和聚合操作,例如范围查询、聚合查询、分组查询等,可以轻松地对大量的时间序列数据进行分析和统计。

1.2 Prometheus 主要特征

  • 多维度数据模型:Prometheus 使用标签(labels)来标识和区分不同的数据。这使得数据模型非常灵活,可以轻松地适应不同的数据类型和场景。
  • 灵活的查询语言:PromQL 是 Prometheus 的查询语言,支持类似 SQL 的语法和操作符。它可以轻松地对系统指标进行查询和聚合。
  • 高效的存储和查询:Prometheus 使用本地时间序列数据库来存储数据,并提供高效的查询和聚合功能。
  • 多种数据源支持:Prometheus 支持从各种数据源中收集数据,包括 HTTP、PushGateway、JMX、SNMP 等。

1.3 Prometheus 监控原理

Prometheus 的监控原理基于 Pull 模型,即 Prometheus Server 定期从各种数据源中拉取数据,并存储在本地时间序列数据库中。Prometheus Server 还提供了查询和警报功能,可以生成图表和警报通知。

具体来说,Prometheus 监控的流程如下:

  1. Prometheus Server 根据配置文件中的 job 和 target 配置,向各个数据源(例如 node exporter)发送 Pull 请求。
  2. 数据源收到请求后,返回当前系统的指标数据(例如 CPU 使用率、内存使用量等)。
  3. Prometheus Server 将收集到的数据存储在本地时间序列数据库中。
  4. 用户可以使用 PromQL 查询语言,对数据进行查询和聚合,并生成图表和警报通知。

1.4 Prometheus 配置文件六个大配置段的含义

Prometheus 的配置文件包括以下六个大配置段:

  1. global:全局配置,包括全局的标签(labels)、规则文件路径、远程写入等。
  2. rule_files:规则文件配置,指定 Prometheus Server 要加载的规则文件路径。
  3. scrape_configs:抓取目标配置,指定 Prometheus Server 要从哪些数据源中进行数据抓取。
  4. alerting:警报配置,包括警报通知方式、接收者等。
  5. remote_write:远程写入配置,指定 Prometheus Server 要将数据写入到哪些远程存储中。
  6. remote_read:远程读取配置,指定 Prometheus Server 要从哪些远程存储中读取数据。

其中,global 配置是必需的,其他配置段可根据需要进行配置。每个配置段中都包含多个配置项,具体含义可以参考 Prometheus 官方文档中的说明。

# 全局配置段
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: 10s
  # 查询日志,包含各阶段耗时统计
  query_log_file: /opt/logs/prometheus_query_log
  # 全局标签组
  # 通过本实例采集的数据都会叠加下面的标签
  external_labels:
    account: "huawei-main"
    region: "node1"

# Alertmanager信息段
alerting:
  alertmanagers:
    - scheme: http
      static_configs:
        - targets:
            - "localhost:9090"

# 告警、预聚合配置文件段
rule_files:
  - /etc/prometheus/rules/record.yml
  - /etc/prometheus/rules/alert.yml

# 采集配置段
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:
      - targets: ["localhost:9090"]

# 远程查询段
remote_read:
  # prometheus
  - url: http://prometheus/v1/read
    read_recent: true

  # m3db
  - url: "http://m3coordinator-read:7201/api/v1/prom/remote/read"
    read_recent: true

# 远程写入段
remote_write:
  - url: "http://m3coordinator-write:7201/api/v1/prom/remote/write"
    queue_config:
      capacity: 10000
      max_samples_per_send: 60000
    write_relabel_configs:
      - source_labels: [__name__]
        separator: ;
        # 标签key前缀匹配到的drop
        regex: "(kubelet_|apiserver_|container_fs_).*"
        replacement: $1
        action: drop

二、部署 prometheus 监控平台

2.1 部署 prometheus 服务

这边我们照例使用 docker-compose 进行部署,以下是部署脚本

# 创建文件夹并授权
mkdir -p /docker/node-exporter
mkdir -p /docker/node-exporter/proc
mkdir -p /docker/node-exporter/sys
mkdir -p /docker/prometheus/
chmod 777 /docker/node-exporter
chmod 777 /docker/node-exporter/proc
chmod 777 /docker/node-exporter/sys
chmod 777 /docker/prometheus/

#节点监控插件
node-exporter:
  image: prom/node-exporter:latest
  container_name: exporter
  environment:
    TZ: Asia/Shanghai
  network_mode: "host"
  volumes:
    - /docker/node-exporter/proc:/host/proc:ro
    - /docker/node-exporter/sys:/host/sys:ro
    - /docker/node-exporter/:/rootfs:ro

prometheus:
  image: prom/prometheus:latest
  container_name: prometheus
  environment:
    TZ: Asia/Shanghai
  ports:
    - "9090:9090"
  volumes:
    - /docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml

其中 node-exporter 是节点硬件监控插件,需要安装在需要监控的服务节点上

2.2 测试

访问 ip:9090 查看是否启动成功

启动成功

看到这个页面说明 prometheus 启动成功了,默认监控了自己,我们来看一下监控的机器或资源

启动成功

ok,到这里我们已经成功安装 Prometheus 监控组件了,下一篇我们来讲如何使用 Grafana 图形化界面来更清晰的查看数据

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐