Prometheus+Grafana 集群监控

目录

1 Prometheus + Grafana 集群概述

1.1 Prometheus简介

1.2 Prometheus组件架构图

1.3 Prometheus 三大组件

1.4 Grafan 简介

2 集群环境准备(离线)

2.1 Linux Centos 环境准备

2.2 修改主机 hostname

3 服务端安装Prometheus

3.1 解压安装prometheus

3.2 配置Prometheus系统服务

3.3 Prometheus配置文件

3.4 通过浏览器访问Prometheus监听页面

4 被监控端添加系统级采集数据:node-exporter

4.1 node_exporter 解压安装

4.2 node_exporter 配置

5 服务端安装配置可视化页面:Grafana

5.1 安装Grafana

5.2 配置数据源 - Prometheus

6 node_exporter采集与Grafana显示

6.1 导入Grafana系统服务自带的Prometheus监控模板

6.2 导入下载的监控模板

7 扩展 —— Grafana安装插件(饼图为例)

7.1 直接安装插件

7.2 离线包安装


1 Prometheus + Grafana 集群概述

1.1 Prometheus简介

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。Prometheus的主要特点如下:

  • 多维度数据模型。
  • 灵活的查询语言.
  • 不依赖分布式存储,单个服务器节点是自主的。
  • 通过基于HTTP的pull方式采集时序数据。
  • 可以通过中间网关进行时序列数据推送。
  • 通过服务发现或者静态配置来发现目标服务对象。
  • 支持多种图形和Dashboard的展示,例如Grafana。

1.2 Prometheus组件架构图

Prometheus+Grafana 集群监控_第1张图片

Prometheus Daemon 负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。

Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

其工作流程大致如下:

  1. Prometheus 服务器定期从配置好的 jobs 或者 exporters 中获取度量数据;或者接收来自推送网关发送过来的度量数据。
  2. Prometheus 服务器在本地存储收集到的度量数据,并对这些数据进行聚合。
  3. 运行已定义好的 alert.rules,记录新的时间序列或者向告警管理器推送警报。
  4. 告警管理器根据配置文件,对接收到的警报进行处理,并通过email等途径发出告警。
  5. Grafana等图形工具获取到监控数据,并以图形化的方式进行展示。

1.3 Prometheus 三大组件

  1. Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
  2. Alertmanager 警告管理器,用来进行报警。
  3. Push Gateway 支持临时性Job主动推送指标的中间网关。

1.4 Grafan 简介

Grafana是一个开源的度量分析与可视化套件,经常被用作基础设施的时间序列数据和应用程序分析的可视化。

Grafana支持许多不同的数据源,每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。

官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。

每个数据源的查询语言和能力都是不同的,可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。

 

2 集群环境准备(离线)

2.1 Linux Centos 环境准备

  1. 虚拟机:Virtualbox
  2. 系统:Centos-7
  3. 安装包:以下安装包的版本必须互相适配

    node_exporter-1.0.1.linux-amd64.tar.gz

    prometheus-2.21.0.linux-amd64.tar.gz

    grafana-7.2.0.linux-amd64.tar.gz

  4. 监控面板json文件:node-exporter-for-prometheus-dashboard-cn-v20201010_rev24.json
  5. 主机时间与系统时间同步
  6. 主机信息:
IP地址(NAT) 主机名 大小 服务  
192.168.0.17 monitor-1 20G Prometheus、node_exporter、Grafana 服务端、被监控端
192.168.0.18 monitor-2 20G node_exporter 被监控端

2.2 修改主机 hostname

1. 本例中Linux操作系统为 centos 7,可使用自带的 hostnamectl 修改hostname

[root@localhost ~]# hostname monitor-1    //临时生效
[root@localhost ~]# hostnamectl set-hostname montior-1     //永久生效

[root@localhost ~]# hostname monitor-2
[root@localhost ~]# hostnamectl set-hostname monitor-2   

2. 修改 host 文件,添加主机映射关系

使用 vim /etc/hosts 编辑该文件,在文件最后追加主机与ip的对应关系。

[root@monitor-1 ~]# vim /etc/hosts
192.168.0.17 monitor-1
192.168.0.18 monitor-2

[root@monitor-1 ~]# scp -r /etc/hosts monitor-2:/etc/

 

3 服务端安装Prometheus

3.1 解压安装prometheus

1. 安装Prometheus

[root@monitor-1 ~]# cd /package/
[root@monitor-1 package]# ls
grafana-7.2.0.linux-amd64.tar.gz        prometheus-2.21.0.linux-amd64.tar.gz
node_exporter-1.0.1.linux-amd64.tar.gz
[root@monitor-1 package]# tar xf prometheus-2.21.0.linux-amd64.tar.gz
[root@monitor-1 package]# mv prometheus-2.21.0.linux-amd64 /usr/local/prometheus
[root@monitor-1 package]# ls /usr/local/prometheus/
console_libraries  consoles  LICENSE  NOTICE  prometheus  prometheus.yml  promtool

[root@monitor-1 package]# mkdir /usr/local/prometheus/{data,conf,logs,bin}
[root@monitor-1 package]# cd /usr/local/prometheus/
[root@monitor-1 prometheus]# mv prometheus promtool ./bin/
[root@monitor-1 prometheus]# mv prometheus.yml ./conf/
[root@monitor-1 prometheus]# chown -R root:root /usr/local/prometheus/

2. 配置环境变量

[root@monitor-1 prometheus]# vim /etc/profile
PATH=/usr/local/prometheus/bin:$PATH:$HOME/bin

//环境变量生效
[root@monitor-1 prometheus]# source /etc/profile
//查看版本
[root@monitor-1 ~]# prometheus --version
prometheus, version 2.22.2 (branch: HEAD, revision: de1c1243f4dd66fbac3e8213e9a7bd8dbc9f38b2)
  build user:       root@f7d7e91063f0
  build date:       20201116-12:43:43
  go version:       go1.15.5
  platform:         linux/amd64

3.2 配置Prometheus系统服务

1. 注意:安装时需配置安装与存放数据目录

[root@monitor-1 ~]# vim /lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/prometheus/bin/prometheus --config.file=/usr/local/prometheus/conf/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/usr/local/prometheus/data --storage.tsdb.retention=60d
Restart=on-failure

[Install]
WantedBy=multi-user.target

Prometheus启动参数说明:

  • --config.file -- 指明prometheus的配置文件路径
  • --web.enable-lifecycle -- 指明prometheus配置更改后可以进行热加载
  • --storage.tsdb.path -- 指明监控数据存储路径
  • --storage.tsdb.retention --指明数据保留时间

说明:

prometheus在2.0之后默认的热加载配置没有开启, 配置修改后, 需要重启prometheus server才能生效, 对于生产环境的监控是不可行的, 所以需要开启prometheus server配置的热加载功能。

在启动prometheus时加上参数 web.enable-lifecycle , 可以启用配置的热加载;配置修改后, 热加载配置: curl -X POST http://localhost:9090/-/reload

2. 重新加载systemd系统,查看服务是否启动

[root@monitor-1 ~]# systemctl daemon-reload
[root@monitor-1 ~]# systemctl enable prometheus.service
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.
[root@monitor-1 ~]# systemctl start prometheus.service
[root@monitor-1 ~]# ps -an | grep prometheus
 4407 pts/1    S+     0:00 grep --color=auto prometheus

Prometheus+Grafana 集群监控_第2张图片

3. 开放防火墙窗口

//添加
# firewall-cmd --add-port=9090/tcp --permanent
//重新载入
# firewall-cmd --reload

3.3 Prometheus配置文件

1. 打开prometheus.yml 配置文件

[root@monitor-1 conf]# vim prometheus.yml

Prometheus+Grafana 集群监控_第3张图片

其大致分为四部分:

  • global:全局配置,其中scrape_interval表示抓取一次数据的间隔时间,evaluation_interval 表示进行告警规则检测的间隔时间;
  • alerting:告警管理器(Alertmanager)的配置,目前还没有安装Alertmanager;
  • rule_files:告警规则有哪些;
  • scrape_configs:抓取监控信息的目标。一个 job_name 就是一个目标,其 targets 就是采集信息的IP和端口。这里默认监控了Prometheus自己,可以通过修改这里来修改Prometheus的监控端口。Prometheus的每个 exporter 都会是一个目标,它们可以上报不同的监控信息,比如机器状态,或者mysql性能等等,不同语言sdk也会是一个目标,它们会上报自定义的业务监控信息。

2. prometheus配置语法校验

建议每次修改prometheus配置之后, 都进行语法校验, 以免导致 prometheus server无法启动.

[root@monitor-1 ~# promtool check config prometheus.yml 
Checking prometheus.yml
  SUCCESS: 0 rule files found 

3.4 通过浏览器访问Prometheus监听页面

1. 运行后,在浏览器访问 [机器IP:端口] 就可以查看Prometheus的界面了,这里的机器IP是运行Prometheus服务的机器,端口是上面配置文件中配置的监控自己的端口。打开后界面如下:http://192.168.0.17:9090

Prometheus+Grafana 集群监控_第4张图片

界面非常简单(所以还需要安装 Grafana ),上面标签栏中,Alerts 是告警管理器,还没安装;Graph 是查看监控项的图表,也是访问后的默认页面;Status 中可以查看一些配置、监控目标、告警规则等。

2. 在Graph页面,由于默认已经监控了Prometheus自己,所以可以直接查看一些监控图表,比如在输入框输入 “promhttp_metric_handler_requests_total” ,执行 Execute,下面的小标签中切换到 Graph 就能看到 “/metrics” 访问次数的折线图。

Prometheus+Grafana 集群监控_第5张图片

 

4 被监控端添加系统级采集数据:node-exporter

添加监控exporter —— Linux 环境下系统级采集数据,监控当前机器自身的状态,包括硬盘、CPU、流量等;Prometheus已经有了很多现成的常用exporter,所以可以直接用其中的node_exporter。

注意:node_exporter跟nodejs没有任何关系,在Prometheus看来,一台机器或者说一个节点就是一个node,所以该exporter是在上报当前节点的状态。

4.1 node_exporter 解压安装

1. 两台被监控节点安装node_exporter

# tar xf node_exporter-1.0.1.linux-amd64.tar.gz
# mv node_exporter-1.0.1.linux-amd64 /usr/local/node_exporter
# chown -R root.root /usr/local/node_exporter/

2. 配置node_exporter启动服务

# vim /lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
//启动服务
# systemctl daemon-reload
# systemctl enable node_exporter.service
# systemctl start node_exporter.service
# ps -an | grep node_exporter
 4928 pts/1    S+     0:00 grep --color=auto node_exporter

3. 开放防火墙端口

//添加
# firewall-cmd --add-port=9100/tcp --permanent
//重新载入
# firewall-cmd --reload

4. 验证安装之后的数据,访问:http://localhost:9100/metrics

Prometheus+Grafana 集群监控_第6张图片

Prometheus+Grafana 集群监控_第7张图片

4.2 node_exporter 配置

为了更好的展示,将两个节点的node_exporter 配置到 prometheus server中, 并通过grafana进行展示。

1. 将 node_exporter 加入 prometheus.yml配置文件中

scrape_configs:
  # The job name is added as a label `job=` 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: 'linux'  #命名后期在Grafana与Prometheus 上方便查看管理
    static_configs:
    - targets: ['192.168.0.17:9100','192.168.0.18:9100']   #多节点的情况下使用,号分隔;例如:['localhost:9100','1.1.1.1:9100','2.2.2.2:9100']

Prometheus+Grafana 集群监控_第8张图片

2. 重启Prometheus服务

//为了不影响正在运行的Prometheus服务,可使用以下热加载命令
[root@monitor-1 ~]# curl -X POST http://localhost:9090/-/reload

或
[root@monitor-1 ~]# systemctl restart prometheus

3. 验证Prometheus数据采集

在标签栏的 Status --> Targets 中可以看到多了一个状态;

如果新加的 target 的 status 是 “UP” 的话,就说明监听成功了:

Prometheus+Grafana 集群监控_第9张图片

此时在Graph中,输入框输入node可以发现有很多node开头的监控项,都是和机器状态有关的,执行后可以看到2个被监控端的node_exporter数据采集的结果:

Prometheus+Grafana 集群监控_第10张图片

以上 node_exporter 已安装完全,并且数据采集已更新至Prometheus。

 

5 服务端安装配置可视化页面:Grafana

因为Prometheus的界面看起来比较简单,所以还需要Grafana这个监控展示框架。

5.1 安装Grafana

1. 安装Grafana

[root@monitor-1 package]# tar xf grafana-7.2.0.linux-amd64.tar.gz
[root@monitor-1 package]# mv grafana-7.2.0 /usr/local/grafana

通过log信息可以看到Grafana默认运行在3000端口,这个也可以通过配置文件进行修改:创建名为 custom.ini 的配置文件,添加到 conf 文件夹,复制 conf/defaults.ini 中定义的所有设置,然后修改想要修改的配置内容。

2. 设置系统服务

//配置环境变量
[root@monitor-1 ~]# vim /etc/profile
export GRAFANA_HOME=/usr/local/grafana
export PATH=$GRAFANA_HOME/bin:$PATH

[root@monitor-1 ~]# source /etc/profile
//增加系统服务
[root@monitor-1 ~]# vim /etc/systemd/system/grafana-server.service
[Unit]
Description=grafana-server
After=network.target

[Service]
Type=notify
User=root
ExecStart=/usr/local/grafana/bin/grafana-server -homepath /usr/local/grafana/
Restart=on-failure

[Install]
WantedBy=multi-user.target


[root@monitor-1 ~]# systemctl daemon-reload
[root@monitor-1 ~]# systemctl enable grafana-server
[root@monitor-1 ~]# systemctl start grafana-server

3. 开放防火墙

//添加
# firewall-cmd --add-port=3000/tcp --permanent
//重新载入
# firewall-cmd --reload

5.2 配置数据源 - Prometheus

  • 浏览器访问 http://IP:3000,可打开Grafana界面;
  • 管理员 账号/密码 默认是 admin/admin,首次登录后强制修改密码;
  • 配置数据源 Data sources->Add data source -> Prometheus,输入prometheus数据源的信息,主要是输入 name 和 url 。

1. 在界面左边是一竖排选项,选择设置图标中的 Data Source,添加 Prometheus 的数据源,URL填写上面已经配置的Prometheus Server的 ip:端口,如果没修改且在本机运行的话,就是localhost:9090。

Prometheus+Grafana 集群监控_第11张图片

Prometheus+Grafana 集群监控_第12张图片

Prometheus+Grafana 集群监控_第13张图片

测试并保存,如果此处测试没有问题则返回working,如果有问题,则排查防火墙限制和Prometheus的UI地址。

2. 查看已添加的数据源,可以点击进入修改并删除:

Prometheus+Grafana 集群监控_第14张图片

以上Grafana已安装完成,并已配置接入Prometheus数据源。

 

6 node_exporter采集与Grafana显示

配置Grafana 与Prometheus数据源模板,采集数据使用node_exporter.

6.1 导入Grafana系统服务自带的Prometheus监控模板

1. 此时可以添加dashboard,也就是监控面板,在刚配好的 Prometheus Data Source 的设置中有一个标签是 dashboard,我们导入 Prometheus 2.0 Stats 这个面板,就能看到我们Prometheus的一些基本监控情况了,这其实就是导入了一个已经写好的面板配置,并且连接自己Prometheus的监控数据做展示。

Prometheus+Grafana 集群监控_第15张图片

2. 查看添加的监控面板效果:

Prometheus+Grafana 集群监控_第16张图片

Prometheus+Grafana 集群监控_第17张图片

Prometheus+Grafana 集群监控_第18张图片

6.2 导入下载的监控模板

1. 前面配置运行了node_exporter,为了更好的展现这个监控信息,左边竖排点击加号图标中的 Import,来导入已经写好的面板。

在Grafana的官方面板页面可以看到很多别人配置好的面板,面板中的每个图都是可以编辑的,也可以设置告警,找到想要的面板,比如这个node_exporter模板id:8919

Prometheus+Grafana 集群监控_第19张图片

2. 复制面板ID,然后在 Import 界面输入ID,导入Linux监控模板的json文件,并配置数据源为Prometheus,即前面导入的数据源的name;

配置完保存后即可看到系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。

Prometheus+Grafana 集群监控_第20张图片

Prometheus+Grafana 集群监控_第21张图片

3. 模板导入完成之后,会出现下图,Node_exporter的采集数据已通过prometheus数据源在grafana 显示完成:

注意:采集数据需要时间,导入模板后需要几天不等的时间,才会出现以下完整数据展示画面。

Prometheus+Grafana 集群监控_第22张图片

Prometheus+Grafana 集群监控_第23张图片

 

7 扩展 —— Grafana安装插件(饼图为例)

  • Grafana默认版本中没有饼图插件;
  • 可以通过官网的链接,查看除了默认的plugins之外,还有哪些,点击这里进入;

Prometheus+Grafana 集群监控_第24张图片

进入到官网的插件页面中,可以选择自己需要的插件,例如,选择pieChart饼图插件,进入详情页面如下:

Prometheus+Grafana 集群监控_第25张图片

红框圈住的地方,就是本地安装的命令

7.1 直接安装插件

  1. 进入Grafana安装目录下的plugins插件目录。然后直接执行上述命令,即可完成安装;
  2. 然后重启Grafana就能看到新安装的插件了。
[root@localhost ~]# cd /usr/local/grafana/data/plugins
[root@localhost plugins]# grafana-cli plugins install grafana-piechart-panel

//重启Grafana
[root@monitor-1 plugins]# systemctl restart grafana-server

7.2 离线包安装

1. 下载最新的zip

# wget -nv https://grafana.com/api/plugins/grafana-piechart-panel/versions/latest/download -O /tmp/grafana-piechart-panel.zip

提取并移动到位:

# unzip -q /tmp/grafana-piechart-panel.zip -d /tmp 
# mv /tmp/grafana-piechart-panel /usr/local/grafana/data/plugins

Prometheus+Grafana 集群监控_第26张图片

2. Git克隆

  • 也可以将此仓库直接克隆到插件目录中;
  • 然后重新启动grafana-server,会自动检测并使用该插件。
# cd /usr/local/grafana/data/plugins
# git clone https://github.com/grafana/piechart-panel.git --branch release-1.3.8

3. 克隆到自主选择的目录中

如果插件被克隆到不是默认插件目录的目录,那么需要编辑grafana.ini配置文件(默认位置在/etc/grafana/grafana.ini中)并添加以下内容:

[plugin.piechart]
path = /home/your/clone/dir/piechart-panel

注意:如果将其克隆到grafana plugins目录中,则无需添加上述config选项。仅当您要将插件放置在标准plugins目录之外的目录中时。注意,grafana-server需要对该目录具有读取权限。

你可能感兴趣的:(监控类,linux,centos)