prometheus+grafana安装部署(入门初探)
官网:https://prometheus.io/download/#mysqld_exporter
【1】基本介绍
【1.0】Prometheus 与 其他监控产品的优劣
优点:
(1)监控数据的精细程度非常高,可以精确到1-5秒的采集精度
(2)软件的部署非常快,大大缩减搭建时间成本
(3)周边插件很丰富,比如 exporter pushgateway 大多数都步需要自己开发了
(4)基于数学计算模型(proMQL),大量的使用函数,可以实现很复杂规则的业务逻辑监控(比如QPS曲线,弯曲,凸起,下跌,比例等等模糊)
(5)可以嵌入很多开源工具的内部,比如nignx 、数据库 等,进行监控,数据更准时更可信(其他监控比较难做到)
(6)结合grafana 图形很高大上很美观
不足:
(1)因为图形菜鸡经度,如果集群数据量太大,那么简单监控有性能瓶颈。
(2)学习成本大,还有 proMQL,中文资料极少,没有人教 官网英文资料也是比较难入门
(3)对磁盘资源消耗比较大,这个具体要看监控的集群数量 和 监控项的多少 以及保存时长的设置
(4)本身的使用,需要使用者数学不能太差,有一定的数据逻辑
【1.1】概念及特点
简介:
Prometheus是一个最初在SoundCloud上构建的开源系统监控和警报工具包 。自2012年成立以来,许多公司和组织都采用 Prometheus,该项目拥有非常活跃的开发人员和用户社区。
它现在是一个独立的开源项目,并且独立于任何公司。为了强调这一点,并澄清 项目的治理结构,Prometheus 于2016年加入 云本地计算基金会,作为Kubernetes之后的第二个托管项目。
特点:
Prometheus 属于一站式监控告警平台,依赖少,功能齐全。 Prometheus 支持对云的或容器的监控,其他系统主要对主机监控。
Prometheus 数据查询语句表现力更强大,内置更强大的统计函数。 Prometheus 在数据存储扩展性以及持久性上没有 InfluxDB,OpenTSDB,Sensu 好。
优质特性:
(1)基于 time series 时序模型,既使用时序数据库存储模型。什么是时序序列呢?就是(x,y)轴,x为时间,y为值
(2)使用 K/V 的数据模型,格式简单,速度快,易维护开发
(3)采样数据查询:promQL,比如可以 (增量A+增量B)/ 总量C
(4)采用 HTTP pull /push 两种对应的数据采集方式传输
(5)【开源,及大量插件】
(6)【本身自带挺调试】、【秒级数据采样频率,秒级采样间隔】
不足:
(1)本身不支持集群化
(2)被监控集群过大后,本身可能会产生性能瓶颈
(3)中文支持不好,中文资料也少
【1.2】prometheus 基本组件
- Prometheus Server, 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
- client libraries,用于对接 Prometheus Server, 可以查询和上报数据。
- push gateway ,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
- 各种汇报数据的 exporters ,例如汇报机器数据的 node_exporter, 汇报 MongoDB 信息的 MongoDB exporter 等等。
- 用于告警通知管理的 alertmanager 。
【1.3】基本原理
Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统, 不需要任何SDK或者其他的集成过程。
这样做非常适合虚拟化环境比如VM或者Docker 。 Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。
输出被监控组件信息的HTTP接口被叫做exporter 。
目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、 Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等)
【1.4】监控的基本体系流程
【2】认识prometheus
【2.1】基本架构与模块
从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。
(1)
【2.2】prometheus metrics 四种数据类型
采集器存储的四种数据类型如下:(K/V 形式)
Counter
Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。
例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total {method=”GET”,endpoint=”/api/tracks”} 100。
Gauge
Gauge常规数值,例如 温度变化、内存使用变化。可变大,可变小。重启进程后,会被重置。 例如: memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、 memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。
Histogram
Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模。
例如:请求耗时、响应大小。它特别之处是可以对记录的内 容进行分组,提供count和sum全部值的功能。
例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。
Summary
Summary和Histogram十分相似,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。
例如:count=7次,sum=7次的值求值。 它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。
【2.3】默认端口
服务器端:
9090端口是必须配置的,这是prometheus自带的web界面
9100是node_exporter的默认端口
9104是mysqld_exporter默认端口
【3】prometheus安装
装在 192.168.175.129
【3.1】下载
官网:https://prometheus.io/download/#mysqld_exporter
linux:
mkdir /soft
cd /soft
wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
【3.2】安装 prometheus、配置prometheus配置文件
#【1】安装go
yum -y install go
#【2】安装 prometheus 服务端
cd /soft
tar -zxf prometheus-2.20.1.linux-amd64.tar.gz
cd prometheus-2.20.1.linux-amd64
vim prometheus.yml
修改配置文件 vim prometheus.yml
从上到下,有4个大模块,这里我们解析一下:
(1)全局模块
# 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).
全局配置:
scrape_interval:向被监控节点发出HTTP请求的采集间隔,系统自带的配置文件默认是15s,要是不配置的话,就默认是1分钟。
evaluation_interval:监控数据规则的评估频率,也就是rules(即(3中的定义))的访问判定频率。
例如:我们设置一个 rule(即(3)中的定义),当内存使用量 > 70% 时,发出警报。那么 prometheus 会默认 每15秒来执行一次这个规则;
(2)监控报警模块
# Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: - 192.168.175.130:9093
很明显,这就是配置一下报警触发后,报警信息发送到 AlertManager 的目标服务器;
(3)报警规则设置模块
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: - "first_rules.yml" # - "second_rules.yml"
配置告警规则文件,比如这里我就配置了一个first_rules.yml文件在 该配置文件的同名配置文件下。比如这里我就配置了节点挂掉的报警规则(这里没有演示 理解一下就好了,是在不行就看我该系列的下一篇文章)
(4)监控目标配置
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: 'agent_linux' static_configs: - targets: ['192.168.175.129:9100'] labels: instance: linux_db1
顾名思义,就是监控的目标对象,默认是有监控本地
这里我们额外设置监控了
['192.168.175.129:9100']
并且我们还给它所在的 job 起了名字,针对这个对象,还起了实例名;
主要是把红框中的加上:
9090端口是必须配置的,这是prometheus自带的web界面
9100是 node_exporter 的默认端口
9104是 mysqld_exporter 默认端口
【3.3】启动与查看
#prometheus启动命令添加参数 --web.enable-lifecycle ,这样修改配置文件后就不用再重启 prometheus 了
nohup ./prometheus --web.enable-lifecycle
如果有错误会显示的,没有错误我们就看看进程起来没有,如下图,没有问题,OK
【3.4】验证:访问 prometheus Web界面
我们输入IP+它的自带web 端口 9090,URL输入下列
http://192.168.175.129:9090
【3.5】收集器信息
http://192.168.175.129:9090/metrics
【4】node_exporter 采集器
装在 192.168.175.129
【4.1】什么是 node_exporter
举个例子,如果你有一台服务器,你想要获取它运行时候的参数,比如当前的CPU负载、系统负载、内存消耗、硬盘使用量、网络IO等等。
那么你就可以在服务器上运行一个 node_exporter
,它能帮你把这些参数收集好,并且暴露出一个HTTP接口以便你访问查询。废话不多说我们直接试一试
【4.2】node_exporter 下载
官网:https://github.com/prometheus/node_exporter/releases
linux:
mkdir /soft
cd /soft
wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
【4.3】node_exporter 安装启动
sudo tar -zxf node_exporter-1.0.1.linux-amd64.tar.gz
cd node_exporter-1.0.1.linux-amd64
sudo ./node_exporter
启动成功会显示如下信息:注意后后续有没有报错
【4.4】核验
(1)curl访问核验
有数据就没有问题
(2)prometheus 界面核验
状态是up就ok
【4.5】监控指标举例
#HELP node_cpu_seconds_total Seconds the cpus spent in each mode.
#TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 1.40181324e+06
这是其中一条指标,由指标名+{标签键值对}+值
组成。
#HELP
开头的行用来说明下面指标 node_cpu_seconds_total
的意义:
指标node_cpu_seconds_total
用来表示CPU在每种模式下工作的秒数,而大括号里的称之为标签,以键值对的形式出现。
可以用来细分同一个指标下的不同部分,比如这里的cpu="0"
表示CPU的第0个核心,mode="idle"
表示工作模式为idle,也就是没被任何程序使用的空闲模式。
#TYPE
开始的第二行表示指标的数值类型为counter
类型。在Prometheus的规范中,counter
类型表示只增长的类型,也就是只会增加不会减少的值,且数值只能是正整数。大数值会启用科学计数法。
此时可以看出指标node_cpu_seconds_total{cpu="0",mode="idle"} 1.40181324e+06
表示节点的CPU0的空闲时间共计1.40181324e+06秒。数值从系统开机时算起,重启归零。
小结:
此时我们可以从页面中看到很多类似的指标以及值,如果只打算监控这一台,又或者只需要这一个值,我们可以自行编写代码访问这个接口,匹配出想要的指标和值即可。
但是如果有很多台服务器,而且想要综合多台进行对比分析,更有甚者希望将指标绘制成图表,或者说保留历史数据以便查询过去的某个时间点其服务器的运行状态,那么这将会变得很麻烦。
而Prometheus
就是干这个事情的。
【5】mysqld_exporter 采集器安装
这个我是装在另外一台机器上 192.168.175.130
【5.1】下载
官网:https://prometheus.io/download/#mysqld_exporter
linux:
mkdir /soft
cd /soft
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
【5.2】解压、配置、启动、核验
tar -zxf mysqld_exporter-0.12.1.linux-amd64.tar.gz
cd mysqld_exporter-0.12.1.linux-amd64/
vim mysqld_exporter.cnf
[client]
user=root
password=123456
nohup ./mysqld_exporter --config.my-cnf ./mysqld_exporter.cnf &
如上,就没有问题,就成功了。
【5.3】prometheus 界面核验
看到我们的状态是up就OK
【6】prometheus 界面查看
【6.1】基本抓取值查看
上免的界面中可以看到,标题栏Graph链接到图形查询界面,在输入框中允许输入查询语句,点击execute执行,insert metric at cursor下拉列表中列举了当前所有的存在的指标可以不用输入而直接选择。
往下,默认的console栏表示查询结果以文字的形式显示,而Graph栏表示绘制图表。
我们试一下,在输入框中输入先前的指标名 node_cpu_seconds_total
单机Execute。
可以看到很多指标被列举了出来
为了更精确的查询,我们输入
node_cpu_seconds_total{cpu="0",mode="idle"},可以看到选项很竞争的被显示出来了
node_cpu_seconds_total{cpu="0",instance="localhost:9100",job="node",mode="idle"} 613608.34
为了方便我直接拷贝出来了,可以看到,指标新增了很多的标签
比如instance就表示IP地址和端口号,是配置文件中输入的
点击Graph查看图形,下面还可以调节时间
【6.2】状态查看
【7】Grafana
【7.1】下载安装
官网:https://grafana.com/grafana/download
安装:https://grafana.com/docs/grafana/latest/installation/rpm/
(1)下载安装
cd /soft
wget https://dl.grafana.com/oss/release/grafana-7.1.3.linux-amd64.tar.gz
tar -zxf grafana-7.1.3.linux-amd64.tar.gz
cd grafana-7.1.3
(2)启动
./bin/grafana-server web
(3)核验
netstat -anp|grep -E "9100|9104|3000"
(4)相关信息
- 默认端口:3000
- 默认日志:var/log/grafana/grafana.log
- 默认持久化文件:/var/lib/grafana/grafana.db
- web默认账户密码:admin/admin
【7.2】进入Grafana web界面
http://192.168.175.129:3000 进入图形界面
web默认账户密码:admin/admin
【7.3】配置 Grafana 添加 Prometheus 数据源
然后点击 add data source,点击prometheus
输入好 prometheus 的服务端地址和端口
然后点击完成,查看信息是否成功
【7.4】配置Linux仪表盘
如下图,我们可以看到似乎图形界面中并没有可以选择的仪表盘
实际上这需要我们去官网找
https://grafana.com/grafana/dashboards
这边有可以筛选
如果可以联网,就可以用 ID 来导入,如果服务器网络不好或没有外网就可以下载json
然后import,点击load
最后,起个名字,然后选择好数据源,点击也没下方的 蓝色 import 按钮
最终,仪表盘导入成功