Prometheus+Grafana+Loki 实践指南:构建高效监控系统的基础篇
Prometheus(由 go 语言开发)是一套开源的监控&报警&时间序列(按照时间排序)数据库的组合。因为 kubernetes(俗称 k8s)的流行带动了 prometheus 的发展。它可以监控主机,服务,容器,支持多种 exporter 采集数据,还支持 pushgateway 进行数据上报,Prometheus 性能足够支撑上万台规模的集群。
引言
当今世界,监控是企业和开发者必不可少的一项工作。随着信息技术的发展和应用场景的不断扩大,监控系统需要不断升级和优化,以满足业务需求和技术挑战。而 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 监控的流程如下:
- Prometheus Server 根据配置文件中的 job 和 target 配置,向各个数据源(例如 node exporter)发送 Pull 请求。
- 数据源收到请求后,返回当前系统的指标数据(例如 CPU 使用率、内存使用量等)。
- Prometheus Server 将收集到的数据存储在本地时间序列数据库中。
- 用户可以使用 PromQL 查询语言,对数据进行查询和聚合,并生成图表和警报通知。
1.4 Prometheus 配置文件六个大配置段的含义
Prometheus 的配置文件包括以下六个大配置段:
- global:全局配置,包括全局的标签(labels)、规则文件路径、远程写入等。
- rule_files:规则文件配置,指定 Prometheus Server 要加载的规则文件路径。
- scrape_configs:抓取目标配置,指定 Prometheus Server 要从哪些数据源中进行数据抓取。
- alerting:警报配置,包括警报通知方式、接收者等。
- remote_write:远程写入配置,指定 Prometheus Server 要将数据写入到哪些远程存储中。
- 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 图形化界面来更清晰的查看数据
更多推荐
所有评论(0)