Prometheus+Grafana监控
介绍一下prometheus
prometheus本身为一种时序数据库(TSDB),还具备开源的监控、报警、时间序列、数据库的组合。其设计用于进行目标(target)监控的关键组件 TSDB:prometheus通过采集的样本以时间序列的方式保存在内存(TSDB时序数据库)中并定时保存到硬盘中(持久化) target:主要指可输出、产生指标数据的组件/对象,包括但不限于主机、应用、服务、K8S ingress(逻辑组件)等(小结:能正常输出指标数据的对象称为target或网络端点) 时序数据:一段时间内通过《重复》测量而获得的观测值的集合,并且可将这些观测值绘制与图形之上,以数据轴(纵轴)和时间轴(横轴)来表示随着时间流逝而产生的“渐变”变化
结构图:
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等图形工具获取到监控数据,并以图形化的方式进行展示。
prometheus三大组件
Server 主要负责数据采集和存储,提供PromQL查询语言的支持。
Alertmanager 警告管理器,用来进行报警。
Push Gateway 支持临时性Job主动推送指标的中间网关。
特性:
① 多维的数据模型(基于时间序列的Key、value键值对)
② 灵活的查询个聚合语言PromQL
③ 提供本地存储和分布式存储
④ 通过基于HTTP和HTTPS的Pull模型采集时间序列数据(pull数据的拉取,时间序列:每段时间点的数据值指标,持续性的产生。横轴标识时间,纵轴为数据值,一段时间内数值的动态变化,所有的点连线形成大盘式的折线图)
⑤ 可利用Pushgateway(prometheus的可选中间件)实现push模式
⑥ 可通过动态服务发现或静态配置发现目标机器(通过consul自动发现和收缩)
⑦ 支持多种图表和数据大盘
使用场景:
1.prometheus可以很好的记录任何纯数字时间序列。它既适用于以机器为中心的监视,也适用于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势 2.prometheus是为可靠性而设计的,它是您在中断期间使用的系统,可让您快速诊断问题。每个prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它, 并且无需设置广泛的基础结构即可使用它
Grafana简介
Grafana是一个开源的度量分析与可视化套件,经常被用作基础设施的时间序列数据和应用程序分析的可视化。
Grafana支持许多不同的数据源,每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。
官方支持以下数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB。
每个数据源的查询语言和能力都是不同的,可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源,它就属于一个特定的组织。
安装部署过程:
1、安装go 语言环境
2、在监控服务器上安装prometheus
3、在被监控环境上安装export
4、安装grafana
准备环境:
我这里使用x86的centos7系统 安装包:以下的安装包版本必须相互匹配 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 部署机和你要监控的所有服务器都需要做时间同步,否则会有坑
一,安装go语言环境
Golang官网下载地址:https://golang.org/dl/
[root@shigj ~]# vim /etc/profile export PATH=$PATH:/usr/local/go/bin [root@shigj ~]# source /etc/profile [root@shigj ~]# go version go version go1.18 linux/amd64
二,安装peometheus
peometheus下载地址:https://prometheus.io/download/ 官方文档:https://prometheus.io/docs/introduction/overview/
[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/
配置环境变量查看版本
[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: 20220901-12:43:43 go version: go1.15.5 platform: linux/amd64
配置prometheus启动方式
[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 --指明数据保留时间
检查是否配置成功
[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
配置防火墙端口
//添加 # firewall-cmd --add-port=9090/tcp --permanent //重新载入 # firewall-cmd --reload
peometheus配置文件
vim prometheus.yml
其大致分为四部分:
global:全局配置,其中scrape_interval表示抓取一次数据的间隔时间,evaluation_interval 表示进行告警规则检测的间隔时间;
alerting:告警管理器(Alertmanager)的配置,目前还没有安装Alertmanager;
rule_files:告警规则有哪些;
scrape_configs:抓取监控信息的目标。一个 job_name 就是一个目标,其 targets 就是采集信息的IP和端口。这里默认监控了Prometheus自己,可以通过修改这里来修改Prometheus的监控端口。Prometheus的每个 exporter 都会是一个目标,它们可以上报不同的监控信息,比如机器状态,或者mysql性能等等,不同语言sdk也会是一个目标,它们会上报自定义的业务监控信息。
peometheus配置语法校验,建议每次修改prometheus配置之后, 都进行语法校验, 以免导致 prometheus server无法启动.
[root@monitor-1 ~# promtool check config prometheus.yml Checking prometheus.yml SUCCESS: 0 rule files found
通过浏览器访问peometheus监听页面
在浏览器访问 [机器IP:端口] 就可以查看Prometheus的界面了,这里的机器IP是运行Prometheus服务的机器,端口是上面配置文件中配置的监控自己的端口。打开后界面如下:http://192.168.6.61:9090
界面非常简单(所以还需要安装 Grafana ),上面标签栏中,Alerts 是告警管理器,还没安装;Graph 是查看监控项的图表,也是访问后的默认页面;Status 中可以查看一些配置、监控目标、告警规则等。
在Graph页面,由于默认已经监控了Prometheus自己,所以可以直接查看一些监控图表,比如在输入框输入 “promhttp_metric_handler_requests_total” ,执行 Execute,下面的小标签中切换到 Graph 就能看到 “/metrics” 访问次数的折线图。
//启动服务 # 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
被监控的服务器上添加系统级别采集数据:node-exporter
添加监控exporter —— Linux 环境下系统级采集数据,监控当前机器自身的状态,包括硬盘、CPU、流量等;Prometheus已经有了很多现成的常用exporter,所以可以直接用其中的node_exporter。
注意:node_exporter跟nodejs没有任何关系,在Prometheus看来,一台机器或者说一个节点就是一个node,所以该exporter是在上报当前节点的状态。
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/
配置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
开放防火墙端口
//添加 # firewall-cmd --add-port=9100/tcp --permanent //重新载入 # firewall-cmd --reload
验证安装之后的数据,访问:http://localhost:9100/metrics
node-exporter配置
将两个节点的node_exporter 配置到 prometheus server中, 并通过grafana进行展示。
1. 将 node_exporter 加入 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"]
#这里我直接把配置注释了,改为动态配置了、这样的好处是,不需要增加监控需要重启了
#- job_name: "prometheus"
#
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
# static_configs:
# - targets: ["192.168.6.61:9090"]
- job_name: '、data_dynamic_auto_discovery_node_exporter' file_sd_configs: - files: - /prometheus/conf/discovery/node_exporter.yml refresh_interval: 5s
130 ✗ 21:52:42 root@localhost.localdomain,192.168.6.61:/usr/local/prometheus # cat /prometheus/conf/discovery/node_exporter.yml [ { "targets": ["192.168.6.100:9100", "192.168.6.101:9100", "192.168.6.102:9100", "192.168.6.104:9100", "192.168.6.103:9100"] } ]
验证Prometheus数据采集
在标签栏的 Status --> Targets 中可以看到多了一个状态;
如果新加的 target 的 status 是 “UP” 的话,就说明监听成功了:
此时在Graph中,输入框输入node可以发现有很多node开头的监控项,都是和机器状态有关的,执行后可以看到几个被监控端的node_exporter数据采集的结果:
以上 node_exporter 已安装完全,并且数据采集已更新至Prometheus。
服务端安装配置可视化页面Grafana
因为Prometheus的界面看起来比较简单,所以还需要Grafana这个监控展示框架。
安装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 中定义的所有设置,然后修改想要修改的配置内容。
设置系统服务
//配置环境变量 [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
开放防火墙
//添加 # firewall-cmd --add-port=3000/tcp --permanent //重新载入 # firewall-cmd --reload
配置数据源-Grafana
1 浏览器访问 http://IP:3000,可打开Grafana界面; 2 管理员 账号/密码 默认是 admin/admin,首次登录后强制修改密码; 3 配置数据源 Data sources->Add data source -> Prometheus,输入prometheus数据源的信息,主要是输入 name 和 url 。
在界面左边是一竖排选项,选择设置图标中的 Data Source,添加 Prometheus 的数据源,URL填写上面已经配置的Prometheus Server的 ip:端口,如果没修改且在本机运行的话,就是localhost:9090。
测试并保存,如果此处测试没有问题则返回working,如果有问题,则排查防火墙限制和Prometheus的UI地址
查看已添加的数据源,可以点击进入修改并删除:
以上Grafana已安装完成,并已配置接入Prometheus数据源。
node_exporter采集与Grafana显示:配置Grafana 与Prometheus数据源模板,采集数据使用node_exporter.
导入Grafana系统服务自带的Prometheus监控模板
此时可以添加dashboard,也就是监控面板,在刚配好的 Prometheus Data Source 的设置中有一个标签是 dashboard,我们导入 Prometheus 2.0 Stats 这个面板,就能看到我们Prometheus的一些基本监控情况了,这其实就是导入了一个已经写好的面板配置,并且连接自己Prometheus的监控数据做展示。
查看添加的监控面板效果:
导入下载的监控模板
前面配置运行了node_exporter,为了更好的展现这个监控信息,左边竖排点击加号图标中的 Import,来导入已经写好的面板。
在Grafana的官方面板页面可以看到很多别人配置好的面板,面板中的每个图都是可以编辑的,也可以设置告警,找到想要的面板,比如这个node_exporter模板id:8919
复制面板ID,然后在 Import 界面输入ID,导入Linux监控模板的json文件,并配置数据源为Prometheus,即前面导入的数据源的name;
配置完保存后即可看到系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。
模板导入完成之后,会出现下图,Node_exporter的采集数据已通过prometheus数据源在grafana 显示完成:
小技巧:
- Grafana默认版本中没有饼图插件;
- 可以通过官网的链接,查看除了默认的plugins之外,还有哪些 https://grafana.com/grafana/plugins/?utm_source=grafana_plugin_list
进入到官网的插件页面中,可以选择自己需要的插件,例如,选择pieChart饼图插件,进入详情页面如下:
红框圈住的地方,就是本地安装的命令,直接安装插件
- 进入Grafana安装目录下的plugins插件目录。然后直接执行上述命令,即可完成安装;
- 进入Grafana安装目录下的plugins插件目录。然后直接执行上述命令,即可完成安装;
[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
离线安装
下载最新的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
也可以git克隆
- 也可以将此仓库直接克隆到插件目录中;
- 然后重新启动grafana-server,会自动检测并使用该插件
# cd /usr/local/grafana/data/plugins # git clone https://github.com/grafana/piechart-panel.git --branch release-1.3.8
克隆到自主选择的目录中,如果插件被克隆到不是默认插件目录的目录,那么需要编辑grafana.ini配置文件(默认位置在/etc/grafana/grafana.ini中)并添加以下内容:
[plugin.piechart] path = /home/your/clone/dir/piechart-panel
注意:如果将其克隆到grafana plugins目录中,则无需添加上述config选项。仅当您要将插件放置在标准plugins目录之外的目录中时。注意,grafana-server需要对该目录具有读取权限