Prometheus基础篇

1.什么是 Prometheus?

Prometheus 是一个开源的系统监控和警报工具包,最初由 SoundCloud 开发。它是一个高度可靠、可扩展的监控系统,尤其适用于构建基于容器的分布式应用程序。Prometheus 使用时间序列数据库来存储由应用程序和基础设施生成的度量数据,并提供了强大的查询语言 PromQL 用于数据分析。

2.Prometheus 的主要特点

  1. 多维数据模型:通过度量名称和键/值对来标识时间序列。
  2. 灵活的查询语言 PromQL:允许复杂的数据提取和分析。
  3. 无依赖的单服务器节点:不需要分布式存储,适合单节点部署。
  4. 时间序列数据存储:采用拉取模型,从目标端点定期获取数据。
  5. 支持多种导出器:可以监控不同类型的服务和系统。
  6. 图形和仪表板支持:与 Grafana 等工具集成,提供数据可视化。

3.Prometheus 的架构

Prometheus 的架构包括以下组件:

  • Prometheus Server:主要负责抓取和存储时间序列数据,并处理 PromQL 查询。

  • Exporters :用于暴露应用程序和服务的指标。

    例如:Node Exporter 用于暴露操作系统指标,MySQL Exporter 用于暴露 MySQL 数据库指标。

  • Pushgateway:允许短命的批处理作业将指标推送到 Prometheus。

  • Alertmanager:处理 Prometheus 服务器生成的警报,支持去重、分组和路由。

  • 客户端库:用于在应用程序中生成自定义指标。

  • 其他服务:如 Grafana 用于数据可视化。

4.工作原理

  1. 抓取数据:Prometheus 通过 HTTP 拉取方式定期从配置的目标端点抓取数据。

  2. 存储数据:抓取到的时间序列数据存储在本地磁盘。

  3. 查询数据:用户可以通过 PromQL 查询数据,进行实时数据分析和历史数据回溯。

  4. 生成警报:根据预定义的规则生成警报,并将这些警报发送到 Alertmanager。

  5. 数据可视化:通过 Grafana 等工具,将数据以图表等形式展示。

  6. 抓取数据:Prometheus 通过 HTTP 拉取方式定期从配置的目标端点抓取数据。

  7. 存储数据:抓取到的时间序列数据存储在本地磁盘。

  8. 查询数据:用户可以通过 PromQL 查询数据,进行实时数据分析和历史数据回溯。

  9. 生成警报:根据预定义的规则生成警报,并将这些警报发送到 Alertmanager。

  10. 数据可视化:通过 Grafana 等工具,将数据以图表等形式展示。

5.安装和配置

  1. 下载Prometheus:

    1
    2
    3
    4
    wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar.gz
    tar xvf prometheus-2.30.0.linux-amd64.tar.gz
    cd prometheus-2.30.0.linux-amd64

  2. 启动Prometheus

    1
    2
    ./prometheus --config.file=prometheus.yml

  3. 配置Prometheus

    prometheus.yml 文件中配置抓取目标和警报规则。例如:

    1
    2
    3
    4
    5
    6
    7
    8
    global:
    scrape_interval: 15s

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

    备注:targets:[‘目标主机地址或IP:端口’]

6.使用 Prometheus 监控服务

安装并配置 Exporter

例如,使用 Node Exporter 监控操作系统指标:

  1. 下载 Node Exporter:

    1
    2
    3
    4
    wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
    tar xvf node_exporter-1.2.2.linux-amd64.tar.gz
    cd node_exporter-1.2.2.linux-amd64

  2. 启动 Node Exporter:

    1
    2
    ./node_exporter

  3. prometheus.yml 文件中添加 Node Exporter 目标:

    1
    2
    3
    4
    5
    scrape_configs:
    - job_name: 'node'
    static_configs:
    - targets: ['localhost:9100']

    备注:targets:[‘存放Node Exporter的主机地址:(默认端口)9100’]

补充:

下载地址:

https://prometheus.io/download/

安装配置完Prometheus,将下面的远程主机配置到Prometheus.yaml文件内,浏览器访问http://localhost:9090/即用

远程监控:

根据被监控的主机系统下载对于的exporter程序(不纳入监控指标之内),将xxx_exporter导出器下载安装到远程被监控的主机上,解压完成并启动成功标志:

1
2
ts=2024-08-04T09:30:24.858Z caller=tls_config.go:313 level=info msg="Listening on" address=[::]:9100
ts=2024-08-04T09:30:24.858Z caller=tls_config.go:316 level=info msg="TLS is disabled." http2=false address=[::]:9100

再验证是否已经成功:

1
curl http://“当前主机的IP地址”:9100/metrics

返回部分结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# TYPE node_xfs_vnode_release_total counter
node_xfs_vnode_release_total{device="dm-0"} 892
node_xfs_vnode_release_total{device="nvme0n1p2"} 1
# HELP node_xfs_vnode_remove_total Number of times vn_remove called for a filesystem.
# TYPE node_xfs_vnode_remove_total counter
node_xfs_vnode_remove_total{device="dm-0"} 892
node_xfs_vnode_remove_total{device="nvme0n1p2"} 1
# HELP node_xfs_write_calls_total Number of write(2) system calls made to files in a filesystem.
# TYPE node_xfs_write_calls_total counter
node_xfs_write_calls_total{device="dm-0"} 37034
node_xfs_write_calls_total{device="nvme0n1p2"} 1
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 0.01
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 524288
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 10

远程监视时,在http://localhost:9090/的status下的Target查看相关监控的主机是否成功(**up**为成功,其他都有问题)如果遇到拒绝连接的情况,我们需要关闭被监控主机的防火墙或运行相关端口访问(配置防火墙规则)

关闭防火墙

1
2
3
4
#权限不够使用sudo
#关闭防火墙
sudo systemctl stop firewalld

配置防火墙规则

1
2
3
4
5
6
7
8
9
10
11
#一旦 firewalld 启动,你可以配置规则以允许或阻止特定的流量:

#允许某个端口(例如 8080):
sudo firewall-cmd --permanent --add-port=8080/tcp

#重新加载防火墙配置:
sudo firewall-cmd --reload

#查看开放的端口:
sudo firewall-cmd --list-ports

这样你就可以放心食用Prometheus了!!