找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

452

积分

0

好友

57

主题
发表于 4 小时前 | 查看: 3| 回复: 0

一、概述

1.1 Grafana介绍

Grafana是一个跨平台的开源度量分析和可视化工具,可以通过将采集的数据查询后进行可视化展示,并及时发出通知。它主要有以下六大特点:

  • 展示方式: 快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  • 数据源: Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
  • 通知提醒: 以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
  • 混合展示: 在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  • 注释: 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
  • 过滤器: Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。

简单来说,它是一个多用途的监控工具,具备通过邮件等方式进行有效预警通知、丰富直观的可视化界面以及支持多种数据源配置等优点。

1.2 Prometheus对比Zabbix

和Zabbix类似,Prometheus也是一个近年来比较流行的开源监控框架。与Zabbix的不同之处在于,Prometheus的架构更为灵活,各模块间耦合度低,例如告警模块、代理模块等都可以选择性配置。其服务端和客户端都是开箱即用,无需复杂的安装过程。Zabbix则通常是一套完整的安装包,功能全面但也相对庞杂。

Zabbix的客户端Agent可以方便地通过脚本来读取机器内的数据库、日志等文件进行数据上报。而Prometheus的上报客户端则分为不同语言的SDK和不同用途的Exporter两种。例如,要监控机器状态、MySQL性能等,有大量成熟的Exporter可以直接使用,它们通过HTTP通信向服务端提供信息(服务端主动拉取信息)。如果你想监控自己的业务状态,各种语言都有官方或社区提供的SDK可供使用,无需像Zabbix那样先将数据存入数据库或日志再供Agent采集。

Zabbix的客户端主要专注于数据上报,属于Push模式。而Prometheus的客户端本地也会存储监控数据,服务端定时来拉取所需数据。

从界面来看,Zabbix风格相对传统,而Prometheus的界面较新且非常简洁,简洁到更像一个测试和配置平台。若要获得良好的监控可视化体验,搭配Grafana是两者共同的选择。

1.3 Grafana结构图

图片

1.4 通俗讲

Prometheus作为监控数据的采集、存储和查询中心,而Grafana作为最终的可视化展示界面。后端的Exporter作为监控数据采集器,Exporter将需要获取的数据采集并暴露给Prometheus,Prometheus存储这些数据并提供给Grafana查询,从而直观展示被监控目标的状态。

二、Prometheus+Grafana监控系统搭建

2.1 安装Prometheus

下载并解压

wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
tar xvfz prometheus-2.7.2.linux-amd64.tar.gz

运行Prometheus server

cd prometheus-2.7.2.linux-amd64
./prometheus --config.file=prometheus.yml

配置Prometheus 在Prometheus.yml中有配置文件,我们可以对其进行配置,当然第一次安装也可以使用默认配置。

$ cat prometheus.yml
# my global config
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 is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it‘s Prometheus itself.
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‘]

其大致可分为四部分:

  • global: 全局配置,其中scrape_interval表示抓取一次数据的间隔时间,evaluation_interval表示进行告警规则检测的间隔时间;
  • alerting: 告警管理器(Alertmanager)的配置;
  • rule_files: 告警规则文件列表;
  • scrape_configs: 抓取监控信息的目标配置。一个job_name就是一个监控任务,其targets就是采集信息的IP和端口。这里默认监控了Prometheus自身。

访问Prometheus 在浏览器中访问 http://你的IP地址:9090,如果出现Prometheus的Web界面说明成功。如果访问不了,请检查防火墙是否开启了9090端口。

2.2 添加服务器状态监控

下载并运行Node Exporter Node Exporter用于监控服务器CPU、内存、磁盘、网络等状态。

// 下载最新版本,可以在github的release中对最新版本右键获取下载链接
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz

解压

tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz

进入解压出的目录

cd node_exporter-0.17.0.linux-amd64

运行监控采集服务

./node_exporter

验证Node Exporter Node Exporter默认监听9100端口。

  • 在服务器上访问: curl http://localhost:9100/metrics
  • 在浏览器中访问: http://服务器IP:9100/metrics 如果访问有指标数据输出,则成功。建议使用nohupsystemd进行后台启动。

配置Prometheus抓取Node Exporter数据 编辑Prometheus的配置文件prometheus.yml,在scrape_configs部分添加一个新的job。

vim prometheus.yml

添加target:

scrape_configs:
  - job_name: ‘prometheus‘
    static_configs:
      - targets: [‘localhost:9090‘]
  - job_name: ‘server‘ # 监控服务器
    static_configs:
      - targets: [‘localhost:9100‘] # Node Exporter地址

保存配置后,需要重启Prometheus服务使配置生效。这是一种常见的运维/DevOps操作。

2.3 安装Grafana

下载并解压Grafana

wget https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz
tar -zxvf grafana-6.0.0.linux-amd64.tar.gz

解压后会出现 grafana-6.0.0 目录。

(可选)安装饼图插件 进入Grafana目录下的bin目录,然后输入以下命令安装插件:

./grafana-cli plugins install grafana-piechart-panel

启动Grafana

cd grafana-6.0.0
./bin/grafana-server web

在Grafana中展示监控信息 安装并启动Grafana后,浏览器输入http://IP:3000来访问Grafana,管理员账号密码默认是admin/admin。首次登陆会要求修改密码。

  1. 添加数据源:点击左侧齿轮图标 -> Data Sources -> Add data source,选择Prometheus。 图片
  2. 配置数据源:输入名称(如Prometheus),URL填写http://Prometheus服务器IP:9090,然后点击Save & Test,成功提示后点击Dashboards选项卡。 图片
  3. 导入仪表盘:可以选择导入Prometheus 2.0 Stats等官方面板,也可以从Grafana官网社区导入更丰富的面板。点击左侧+号 -> Import图片
  4. 使用社区模板:在Import via grafana.com框中输入社区仪表盘ID,例如8919(一个经典的Node Exporter服务器监控面板),点击Load。 图片
  5. 选择数据源:为导入的面板选择刚才配置的Prometheus数据源,点击Import图片

查看监控效果 点击左侧导航栏的田字格图标(Dashboards) -> Manage,找到并点击刚刚导入的仪表盘名称,即可看到服务器监控信息。 图片 展示效果如图所示: 图片

三、监控其他服务器

上述教程配置了包含Prometheus、Grafana和Node Exporter的监控服务器。现在需要监控其他服务器,只需在其他服务器上安装并运行Node Exporter,然后在监控服务器的Prometheus配置中添加该Exporter的地址即可。

在被监控服务器上

  1. 下载、解压并运行Node Exporter(步骤同2.2)。
  2. 确保防火墙开放9100端口,或关闭防火墙(测试环境)。

在监控服务器上

  1. 编辑prometheus.yml文件。
  2. scrape_configs部分添加新的job,注意job_name需唯一,targets填写被监控服务器的IP和9100端口。
    - job_name: ‘server-192.168.1.100‘ # 建议使用有意义的名称
      static_configs:
        - targets: [‘192.168.1.100:9100‘]
  3. 重启Prometheus服务。
  4. 在Grafana中,已有的仪表盘会自动展示新加入的服务器指标(如果仪表盘使用了jobinstance标签进行筛选)。

注意:如果被监控服务器数量多,可以使用file_sd_configs或服务发现机制来动态管理targets,这是进阶的云原生/IaaS监控实践。

四、配置邮件告警

4.1 Grafana服务器配置
  1. 停止Grafana服务(如果是前台运行,按Ctrl+C;如果是后台服务,用相应命令停止)。
  2. 进入Grafana目录,编辑配置文件conf/defaults.ini
    cd grafana-6.0.0
    vim conf/defaults.ini
  3. 找到[smtp]部分,根据你的邮箱服务商进行配置。以QQ邮箱为例:
    [smtp]
    enabled = true
    host = smtp.qq.com:465
    user = your-qq@qq.com
    password = 你的授权码(非QQ密码)
    from_address = your-qq@qq.com
    from_name = Grafana
    skip_verify = true # SSL连接时可能需要
  4. 保存并退出编辑器。
  5. 重新启动Grafana服务。
4.2 Grafana界面配置告警
  1. 在Grafana任意图表中,点击标题 -> Edit
  2. 切换到Alert选项卡,点击Create Alert
  3. 配置告警规则,例如设置当CPU使用率超过80%时触发。
  4. Notifications部分,可以添加邮件通知渠道(需先在Alerting -> Notification channels中配置好邮件通知渠道)。
  5. 保存图表和告警规则。

当监控指标达到阈值时,Grafana便会发送告警邮件。

五、搭建MySQL监控系统

5.1 步骤概述
  1. 在MySQL服务器上安装mysqld_exporter
  2. mysqld_exporter配置MySQL连接权限。
  3. 运行mysqld_exporter
  4. 在Prometheus配置中添加该Exporter的地址。
  5. 在Grafana中导入MySQL监控仪表盘。
5.2 对mysqld_exporter进行操作

假设MySQL已安装并运行。

  1. 下载并解压
    wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
    tar -xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz
  2. 创建配置文件:为mysqld_exporter创建包含MySQL连接信息的配置文件(如.my.cnf)。
    vim .my.cnf

    内容如下:

    [client]
    user=exporter_user
    password=your_password

    建议在MySQL中为监控单独创建一个用户并授予相应权限(如SELECT, PROCESS, REPLICATION CLIENT)。

  3. 运行mysqld_exporter
    ./mysqld_exporter --config.my-cnf=".my.cnf" &

    mysqld_exporter默认监听9104端口。

5.3 配置Prometheus抓取MySQL数据

在监控服务器的prometheus.yml配置文件中添加:

- job_name: ‘mysql‘
  static_configs:
    - targets: [‘MySQL服务器IP:9104‘]

重启Prometheus。访问http://Prometheus-IP:9090/targets,确认mysql job的State为UP

5.4 配置Grafana展示
  1. 在Grafana中,确保已添加指向监控服务器Prometheus的数据源。
  2. 点击+ -> Import,输入仪表盘ID 7362(一个常用的MySQL仪表盘),点击Load。
  3. 选择对应的Prometheus数据源,点击Import
  4. 导入成功后,即可在Dashboards中查看MySQL的各项性能指标,如连接数、查询速率、缓冲池使用情况等。 图片

六、监控Redis

6.1 下载并运行Redis Exporter

在Redis服务器上操作。 下载

wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.3/redis_exporter-v1.0.3.linux-amd64.tar.gz

解压

tar -xvf redis_exporter-v1.0.3.linux-amd64.tar.gz

启动 (根据Redis是否有密码选择):

  • 无密码: ./redis_exporter -redis.addr redis://192.168.1.120:6379 &
  • 有密码: ./redis_exporter -redis.addr 192.168.1.120:6379 -redis.password 123456 & Redis Exporter默认监听9121端口。
6.2 配置Prometheus

在监控服务器的prometheus.yml中添加:

- job_name: ‘redis‘
  static_configs:
    - targets: [‘Redis服务器IP:9121‘]

重启Prometheus并检查targets状态。

6.3 配置Grafana展示
  1. 在Grafana中,使用已有的Prometheus数据源。
  2. 点击+ -> Import,输入仪表盘ID 763(Redis Dashboard for Prometheus Redis Exporter),点击Load。
  3. 选择数据源,点击Import。
  4. 即可查看Redis的内存使用、命令统计、连接数等关键指标。 图片

七、Grafana API令牌使用

Grafana提供了HTTP API,允许以编程方式管理仪表盘、数据源、用户等。对于非管理员操作,可以使用API令牌进行认证。

7.1 创建API令牌
  1. 在Grafana界面,点击左侧齿轮图标(Configuration) -> API Keys
  2. 点击Add API key
  3. 输入Key名称,选择角色(ViewerEditorAdmin),设置过期时间(可选)。
  4. 点击Add后,会显示生成的Token,请立即复制保存。
7.2 使用API令牌调用接口

在调用HTTP API时,在请求头中添加:

Authorization: Bearer <你的API_TOKEN>

例如,使用curl获取当前用户信息:

curl -H “Authorization: Bearer eyJrIjoiT0daTT...” http://your-grafana-ip:3000/api/user

通过API,可以实现自动化部署监控视图、与内部系统集成等高级大数据运维场景。

八、监控其他服务(RabbitMQ, TiDB)

监控其他服务的原理相通:找到对应的Prometheus Exporter,运行它,并在Prometheus中添加抓取任务,最后在Grafana中导入合适的仪表盘。

  • RabbitMQ: 使用 rabbitmq_exporter。配置时需提供RabbitMQ管理界面的地址和凭证。仪表盘ID可尝试 2121
  • TiDB: TiDB集群本身暴露了Prometheus格式的指标。在Prometheus中直接添加TiDB组件(PD, TiKV, TiDB)的指标地址即可。可以从TiDB官方Ansible仓库获取对应的Grafana仪表盘JSON文件(如tidb.json)并导入。

总结

通过以上步骤,我们完成了一套从基础服务器监控到常见中间件/数据库监控的Prometheus+Grafana告警系统搭建。核心在于理解Prometheus作为数据中枢的角色,以及各类Exporter作为数据采集器的用法。Grafana则提供了强大灵活的可视化和告警能力。掌握这套技术栈,是构建现代化、可观测性强的应用系统的关键一步。




上一篇:开源屏幕录制工具OpenScreen:免费跨平台的Screen Studio替代方案,专注产品演示与教程制作
下一篇:Docker高效运维实战工具集:从监控到安全的10款必备神器
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-6 23:55 , Processed in 0.070637 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表