Prometheus + Grafana 在 CentOS 中搭建可视化性能监控平台

Prometheus

Prometheus ,由谷歌研发的一款开源的监控软件。

Prometheus 是一款基于时序数据库的开源监控告警系统,通过安装在远程机器上的 exporter 收集数据并通过HTTP协议从远程的机器上获取数据,最后存储在本地的时序数据库上。

Node exporter 是 Prometheus 最常用的一种 exporter,主要负责收集 Linux 的 /proc 以及 /sys 目录下的系统文件获取操作系统运行状态。

另外还有一些其他的 exporter 分别用来监控不同的应用程序:

  • reids exporter:通过Reids命令行获取指标
  • mysql exporter:通过读取数据库监控表获取MySQL的性能数据

这些获取到的监控数据,再通过 Grafana 实现可视化、图形化、图表化的信息展示。

这样,我们在做性能测试、生产服务器监控的时候,就不用 Linux 命令,而且更直观。

本篇文章演示如何在一台 Centos 服务器上部署 Prometheus。

部署 Prometheus + Grafana

在 Centos 上部署 Prometheus + Grafana 包含以下 3 个大的步骤:

  1. 安装 Prometheus,并部署成服务
  2. 安装 Node exporter, 并部署成服务
  3. 安装 Grafana

安装 Prometheus

创建 Prometheus 用户

$ useradd -m -s /bin/false prometheus

创建配置目录

$ mkdir /etc/prometheus

$ mkdir /var/lib/prometheus

$ chown prometheus:prometheus /var/lib/prometheus/

下载最新版的 prometheus

  1. 通过 wget 命令下载

    # 切换到home目录,将文件下载在这里
    $ cd ~
    
    # 如果没有 wget 命令则先安装
    $ dnf install wget -y
    
    # 如果已经有了 wget 命令
    $ wget https://github.com/prometheus/prometheus/releases/download/v2.39.1/prometheus-2.39.1.linux-amd64.tar.gz
    

由于文章存在时效性,如果你要下最新的,请直接前往Prometheus 下载

  1. 你也可以直接下载 linux 版本

    链接:https://pan.baidu.com/s/1SIipv7igCfYoMWtmHJX8jA?pwd=iccg
    提取码:iccg

     通过 sftp 上传到 Centos。推荐使用 `mobaxterm`作为 SSH 客户端远程连接,非常方便。[mobaxterm官网](https://mobaxterm.mobatek.net/)
    

解压文件

$ tar -zxpvf prometheus-2.39.1.linux-amd64.tar.gz

# 复制 prometheus 和 promtool 到 /usr/local/bin 路径
$ cd prometheus-2.39.1.linux-amd64

$ cp prometheus  /usr/local/bin

$ cp promtool  /usr/local/bin

# 将 prometheus.yml 复制到 /etc/prometheus/ 路径
$ cp prometheus.yml /etc/prometheus/

开放 Prometheus 端口

$ firewall-cmd --add-port=9090/tcp --permanent

$ firewall-cmd --reload

创建 Prometheus 服务

创建服务文件,以便以服务方式运行 Prometheus

$ vi /etc/systemd/system/prometheus.service

将下面的内容拷贝进去

[Unit]

Description=Prometheus Time Series Collection and Processing Server

Wants=network-online.target

After=network-online.target

 
[Service]

User=prometheus

Group=prometheus

Type=simple

ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries


[Install]

WantedBy=multi-user.target

{% note warning flat %}
注意检查一下开头和结束的内容,拷贝可能会造成内容丢失。
{% endnote %}

启动服务

# 重新加载
$ systemctl daemon-reload

# 启动 Prometheus 服务
$ systemctl start prometheus

# 设置 Prometheus 开机启动
$ systemctl enable prometheus

# 验证 Prometheu s正在运行
$ systemctl status prometheus

# 查看端口 9090
netstat -tunlp |grep 9090

在浏览器打开 http://server-ip:9090, server-ip 改为你 centos 的 ip。你将会看到如下界面。

Prometheus

安装 Node Exporter

node exoorter 用于收集 linux 系统的 CPU、内存、网络等信息。

创建用户

$ useradd -m -s /bin/false node_exporter

下载解压

  1. 下载
$ wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz

{% note warning flat %}

由于文章存在时效性,需要最新版本,请前往node exoorter 下载

{% endnote %}

  1. 解压并复制到 /usr/local/bin
$ tar -zxpvf node_exporter-1.4.0.linux-amd64.tar.gz

# 复制到 /usr/local/bin
$ cp node_exporter-1.4.0.linux-amd64/node_exporter /usr/local/bin

# 修改目录权限
$ chown node_exporter:node_exporter /usr/local/bin/node_exporter

以服务方式运行

创建 service 配置文件

$ vi /etc/systemd/system/node_exporter.service

复制以下内容

[Unit]

Description=Prometheus Node Exporter
Wants=network-online.target
After=network-online.target
 

[Service]

User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

 
[Install]

WantedBy=multi-user.target

{% note warning flat %}
注意检查一下开头和结束的内容,拷贝可能会造成内容丢失。
{% endnote %}

启动服务

# 重新加载
$ systemctl daemon-reload

# 启动 Prometheus 服务
$ systemctl start node_exporter

# 设置 Prometheus 开机启动
$ systemctl enable node_exporter

# 验证 Prometheu s正在运行
$ systemctl status node_exporter

# 查看端口 9090
$ netstat -tunlp |grep 9100

开放 9100 端口

$ firewall-cmd --add-port=9100/tcp  --permanent
$ firewall-cmd --reload

修改 Prometheus 配置,加入 node_exporter

$ vi /etc/prometheus/prometheus.yml

添加如下内容

- job_name: 'node_exporter'

   static_configs:

   - targets: ['localhost:9100']

完整的 prometheus.yml

# 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: 15s  # scrape_timeout is set to the global default (10s).

# 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']
    
  - job_name: 'node_exporter'

    static_configs:

    - targets: ['localhost:9100']

重启 Prometheus 服务

$ systemctl restart prometheus

在浏览器打开http://server-ip:9100/metrics,会看到如下界面:

image-20221030145715051

安装 Grafana

下载安装

进入 Grafana 的 [下载页面](Download Grafana | Grafana Labs)

选择你的服务器版本:

Grafana下载

这里我们选择 CentOS 的命令:

$ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.2-1.x86_64.rpm
$ sudo yum install grafana-enterprise-9.2.2-1.x86_64.rpm

启动 Grafana 服务

# 启动 Grafana 服务
$ systemctl start grafana-server

# 设为开机启动
$ systemctl enable grafana-server

开放3000端口

$ firewall-cmd --add-port=3000/tcp  --permanent
$ firewall-cmd --reload

访问地址 访问地址:http://server-ip:3000

默认的账号密码是 admin/admin

Grafana登录界面

配置 Prometheus

进入 Grafana 后,添加数据源:

添加数据源

<img src="https://teststation.oss-cn-chengdu.aliyuncs.com/blog/image-20221030205020232.png" alt="配置Prometheus" />

配置Prometheus
保存配置

配置显示模板

导入仪表盘
加载预设的仪表盘
配置仪表盘

最终就能看到配置后的结果。

最终效果

后续进入的话,可以从菜单>Dashboards进入:

再次进入Girafana 后如何查看监控

附录:问题

如何修改 Grafana 的默认端口

如果你已经部署了其他程序,占用了3000端口,那么你可能需要修改一下 Grafana的 默认端口。

  1. 修改 Grafana 的配置文件
$ vi /etc/grafana/grafana.ini
修改grafana.ini文件
  1. 保存退出后,重新启动 Grafana 服务:
$ systemctl start grafana-server

Prometheus没有数据

按照步骤安装之后,发现 Prometheus 没有数据,大概率是服务器时间设置问题。

查看服务器上的日期:

$ timedatectl

<img src="https://teststation.oss-cn-chengdu.aliyuncs.com/blog/image-20221030211857035.png" alt="服务器时间" style="zoom: 67%;" />

如果服务器时间与你手机的时间不一致,则需要同步一下时间:

# ntp 同步时间
$ ntpdate ntp1.aliyun.com

# 如果 ntpdate 命令不存在,需要安装一下
$ yum install ntp

查看 Grafana 中 Prometheus 配置的时间:

Dashboard setting
配置时间

如果你已经是 Asia/Shanghai就不需要修改。确保 Prometheus 的时区与服务器的时区一致,且时间是正确的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容