一、背景介绍

咱在使用 Linux 系统的时候,就跟开车一样,得时刻知道车的状态,像车速、油量啥的。在 Linux 里,系统性能就好比车的状态,我们得监控 CPU 使用率、内存占用、磁盘 I/O 这些指标。要是不监控,就可能出现系统崩溃、服务中断这些问题,就像车突然抛锚一样。

Prometheus 和 Grafana 这俩工具就像是汽车的仪表盘,能让我们清楚地看到系统的各项指标。Prometheus 负责采集数据,就像车上的各种传感器,把系统的信息收集起来;Grafana 则负责把这些数据变成直观的图表,就像仪表盘上的指针和数字,让我们一眼就能明白系统的状态。

二、Prometheus 基础

2.1 什么是 Prometheus

Prometheus 是个开源的监控系统,它就像一个大管家,专门负责收集各种系统和服务的指标数据。它通过拉取(pull)的方式,定期去各个目标那里获取数据,然后把这些数据存起来。

2.2 安装 Prometheus

在 Linux 系统上安装 Prometheus 很简单,我们可以从官方网站下载二进制文件,然后解压就可以了。下面是具体的步骤:

# 下载 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz

# 解压文件
tar -zxvf prometheus-2.37.0.linux-amd64.tar.gz

# 进入解压后的目录
cd prometheus-2.37.0.linux-amd64

# 启动 Prometheus
./prometheus --config.file=prometheus.yml

这里的 prometheus.yml 是 Prometheus 的配置文件,我们可以在里面配置要监控的目标。

2.3 配置 Prometheus

打开 prometheus.yml 文件,我们可以看到类似下面的配置:

global:
  scrape_interval: 15s  # 每隔 15 秒采集一次数据

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']  # 监控 Prometheus 自身

这里我们配置了每隔 15 秒采集一次数据,并且监控 Prometheus 自身。如果我们要监控其他目标,只需要在 targets 里添加相应的地址就可以了。

三、Grafana 基础

3.1 什么是 Grafana

Grafana 是一个可视化工具,它可以把 Prometheus 采集到的数据变成各种漂亮的图表和仪表盘。就像我们开车时看仪表盘一样,通过 Grafana 我们可以直观地看到系统的性能指标。

3.2 安装 Grafana

在 Linux 系统上安装 Grafana 也很简单,我们可以使用包管理器来安装。以 Ubuntu 为例:

# 添加 Grafana 源
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

# 更新包列表
sudo apt-get update

# 安装 Grafana
sudo apt-get install grafana

安装完成后,启动 Grafana 服务:

sudo systemctl start grafana-server

3.3 配置 Grafana

打开浏览器,访问 http://localhost:3000,输入默认的用户名和密码(都是 admin),登录 Grafana。然后我们需要添加 Prometheus 作为数据源:

  1. 点击左侧菜单的 Configuration -> Data Sources
  2. 点击 Add data source,选择 Prometheus
  3. URL 里输入 Prometheus 的地址,比如 http://localhost:9090
  4. 点击 Save & Test,如果显示 Data source is working,说明配置成功。

四、全栈指标采集

4.1 系统指标采集

我们可以使用 Node Exporter 来采集 Linux 系统的各种指标,比如 CPU、内存、磁盘等。安装 Node Exporter 很简单:

# 下载 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

# 解压文件
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz

# 进入解压后的目录
cd node_exporter-1.3.1.linux-amd64

# 启动 Node Exporter
./node_exporter

然后在 Prometheus 的配置文件 prometheus.yml 里添加 Node Exporter 的地址:

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['localhost:9100']  # Node Exporter 默认端口是 9100

这样 Prometheus 就会定期采集 Node Exporter 提供的系统指标。

4.2 应用指标采集

如果我们有自己的应用程序,也可以让 Prometheus 采集应用的指标。比如,我们可以使用 Prometheus 的客户端库来在应用里暴露指标。下面是一个使用 Python Flask 框架的示例:

# Python Flask 示例
from flask import Flask
from prometheus_client import start_http_server, Counter

app = Flask(__name__)
# 创建一个计数器指标
REQUEST_COUNT = Counter('app_request_count', 'Total number of requests')

@app.route('/')
def hello():
    # 每次请求增加计数器的值
    REQUEST_COUNT.inc()
    return 'Hello, World!'

if __name__ == '__main__':
    # 启动 Prometheus 客户端,暴露指标
    start_http_server(8000)
    app.run()

然后在 Prometheus 的配置文件里添加这个应用的地址:

scrape_configs:
  - job_name: 'my_app'
    static_configs:
      - targets: ['localhost:8000']

五、指标可视化

5.1 创建仪表盘

在 Grafana 里,我们可以创建各种仪表盘来展示指标。点击左侧菜单的 Create -> Dashboard,然后点击 Add a new panel。在 Query 里选择 Prometheus 数据源,然后输入要查询的指标,比如 node_cpu_seconds_total,就可以看到 CPU 使用时间的图表了。

5.2 定制仪表盘

我们可以根据自己的需求定制仪表盘,比如调整图表的样式、添加注释、设置时间范围等。还可以添加多个面板,把不同的指标展示在一个仪表盘里。

六、可视化告警

6.1 配置告警规则

在 Prometheus 里,我们可以配置告警规则。创建一个 rules.yml 文件,内容如下:

groups:
  - name: example
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "{{ $labels.instance }} has a CPU usage of {{ $value }}% for the last 5 minutes."

这个规则的意思是,如果 CPU 使用率连续 5 分钟超过 80%,就触发告警。

6.2 配置告警通知

在 Grafana 里,我们可以配置告警通知。点击左侧菜单的 Alerting -> Notification channels,添加一个新的通知渠道,比如邮件、Slack 等。然后在仪表盘的面板里设置告警规则,当指标超过阈值时,就会发送通知。

七、应用场景

7.1 生产环境监控

在生产环境中,我们可以使用 Prometheus 和 Grafana 来监控服务器的性能,及时发现并解决问题,保证服务的稳定性。比如,监控数据库服务器的 CPU、内存和磁盘 I/O,避免因为资源不足导致服务中断。

7.2 开发调试

在开发过程中,我们可以使用这两个工具来监控应用程序的性能,找出性能瓶颈,优化代码。比如,监控应用的响应时间、请求处理速度等。

八、技术优缺点

8.1 优点

  • 开源免费:Prometheus 和 Grafana 都是开源软件,不需要支付额外的费用。
  • 易于使用:配置和使用都比较简单,即使是新手也能快速上手。
  • 可扩展性强:可以通过插件和扩展来满足不同的需求。

8.2 缺点

  • 数据存储有限:Prometheus 的本地存储能力有限,对于大规模数据的存储可能会有问题。
  • 学习成本:虽然易于使用,但要深入掌握一些高级功能,还是需要一定的学习成本。

九、注意事项

  • 资源占用:Prometheus 和 Grafana 会占用一定的系统资源,特别是在采集大量数据时,要注意服务器的性能。
  • 数据安全:要注意保护监控数据的安全,避免数据泄露。
  • 配置管理:及时更新和管理 Prometheus 和 Grafana 的配置文件,确保监控的准确性。

十、文章总结

通过使用 Prometheus 和 Grafana,我们可以构建一个完整的 Linux 性能监控体系。Prometheus 负责采集系统和应用的指标数据,Grafana 负责将这些数据可视化,并提供告警功能。这样我们就可以实时监控系统的性能,及时发现并解决问题,保证系统的稳定运行。无论是在生产环境还是开发过程中,这两个工具都能发挥重要的作用。