一:简介
1.Prometheus 的介绍
Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在 最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
2.Prometheus 的优点:
(1)配置灵活
使用过zabbix的同学应该都体验过安装时候的安装依赖包的痛苦,而premetheus核心部分只有一个单独的二进制文件,下载解压安装即可, 没有依赖的第三方库
(2)监控的多样性
prometheus支持多种语言的的客户端,我们通过客户端方便对核心业务进行埋点,比如下单,添加购物车等流程。
而且prometheus已经有非常多的系统集成
比如:
应用层面的监控:nginx,haproxy,mysql ,docker等
系统层面如:SNMP协议监控,主机监控,进程监控
容器云监控:docker,k8s openstack私有云
(3)非常高效的存储
平均一个采样数据占 ~3.5 bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G
二:prometheus的架构
对照图中的每一部分进行介绍:
·prometheus server
主要负责数据的采集和存储,提供PromQL查询语言支持
Retrieval:采样模块,prometheus的服务器在哪里拉取数据,检索拉取到的数据分发给 TSDB进行存储
TSDB:存储模块默认本地存储为TSDB
HTTP server : 提供http接口查询和面板,默认端口为9090
·short-lived jobs:
存在时间不足以被删除的短暂或批量业务,无法通过pull的方式拉取,需要使用push的方式,与pushgeteway结合使用
·Service Discovery:
服务发现,prometheus支持多种服务发现机制:文件,DNS,k8s,openstack,等,基于服务发现的过程,通过第三方接口,prometheus查询到需要监控的target列表,然后轮询这些target获取监控数据
·客户端SDK
官方提供的客户端类库有go,java,python,ruby
·pushgateway
支持临时性的job主动推送指标的中间网关,prometheus默认通过pull方式从exporters拉取,但有些情况我们是不允许promethes与exporters直接进行通信的,这时候我们可以使用pushgateway由客户端主动push数据到pushgateway,在由prometheus拉取。很多时候我们需要自定义一些组件来采集
·proDash
使用rails开发的dashboard,用于可视化指标数据
·exporters
支持其他数据源的指标导入到prometheus,支持数据库,硬件,消息中间件,存储系统,http服务器,jmx等
负责收集目标对象的性能数据,并通过http接口供prometheus server获取
只要符合接口格式,就可以被采集
·alertmanager
实验性组件,用来进行报警
·prometheus_cli
命令行工具
三:prometheus的工作流程
1.prometheus server 定期从配置好的jobs或者exporters中拉metrics.或者接受来自pushgateway发过来的metrics,或者从其他的prometheus server中拉取metrics
2.prometheus server 在本地存储收集到的metrics,并运行已经定义好的arlt.rules,记录新的时间序列或者向alertmanager推送报警
3.Alertmanager根据配置文件,对接受的警报进行处理,发出告警
4.在图形界面中,可视化采集数据,可以使用别人写好的grafana模板。
部署前说明
prometheus 服务端一台主机
grafana 服务端一台主机
prometheus和grafana可以安装在同一主机上
node_exporter和mysqld_exporter 被监控的主机插件一台主机
我是在做演示,所以全部安装在同一台主机上
四:prometheus 部署
1.安装前准备
安装前先检查一下时间是不是同步,不同步的话会导致数据收集不到,会报错
[root@localhost ~]# date
2020年 08月 31日 星期一 12:19:18 CST
我是还原快照,所以时间并不同步
解决办法:
命令如下:
# yum -y install ntp
# ntpdate time1.aliyun.com #同步阿里云时间
# hwclock -w #将系统时间赋值给硬件时间,有些时候 硬件时间会比系统时间快8个小时
关闭防火墙和selinux
# systemctl stop firewalld && setenforce 0 && iptables -F
准备安装包
prometheus-2.6.1.linux-amd64.tar
grafana-7.1.5-1.x86_64
node_exporter-0.17.0.linux-amd64.tar
mysqld_exporter-0.12.1.linux-amd64.tar
官网下载地址https://prometheus.io/download/
2.开始安装部署
命令如下:
# tar -zvxf prometheus-2.6.1.linux-amd64.tar.gz
# mv prometheus-2.6.1.linux-amd64 /usr/local/prometheus
# cd /usr/local/prometheus/
# ./prometheus & #后台启动
然后通过浏览器访问:http://192.168.20.100:9090
web网页介绍
http://IP:9090
查看监控目标
可以看到系统默认监控了自己的主机信息,监控接口通过http://IP:9090/metrics 可以直接看到监控数据,如下图:
prometheus默认监控图像,如下图:
在图2的位置输入process_cpu_seconds_total ,可以查看到cpu的使用情况
3.实例:监控linux主机
需要在被监控的主机安装node_exporter插件,是prometheus来收集数据
在官网上下载node_exporter-0.17.0.linux-amd64.tar安装包
命令如下:
# tar -zvxf node_exporter-0.17.0.linux-amd64.tar.gz
# mv node_exporter-0.17.0.linux-amd64 node_exporter
# cd node_exporter
# nohup ./node_exporter &
nohup 是 Linux 的一个常用命令,当你想要在退出账户或者关闭终端 后进程仍在运行时,就可以使用 nohup 命令。nohup 就是不挂断的意思(no hang up)
在浏览器上查看监控信息 http://IP:9100/metrics
配置prometheus server端文件 prometheus.yml 可以拉取node信息
# vim /usr/local/prometheus/prometheus.yml
将以下内容添加到文件最后
- job_name: 'agent'
static_configs:
- targets: ['192.168.20.100:9100']
注意:一定格式正确,否则服务重启不了 IP应该填写的是被监控主机的IP,我是把服务端客户端做在同一主机上了
添加完成后重新启动prometheus
命令如下:
# pkill prometheus
# cd /usr/local/prometheus/
# ./prometheus &
然后通过web可以看见两台,如下两张图
监控mysql需要在被监控机器安装mysql_exporter
mysql_exporter下载地址:https://prometheus.io/download/mysqld_exporter-0.12.1.linux-amd64.tar.gz
命令如下:
# tar -zvxf mysqld_exporter-0.12.1.linux-amd64.tar.gz
# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter
# cd /usr/local/mysqld_exporter/
# yum -y install mariadb* (这里mariadb数据库为参考)
# systemctl start mariadb && systemctl enable mariadb 启动并设置开机自启
在数据库里创建mysql账号用户收集数据
# mysql
MariaDB [(none)]> grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '12345678';
MariaDB [(none)]> flush privileges;
注意:此处是prometheus服务器来找mysql_exporter,然后mysql_exporter 在找mariadb,所以这里用的是localhost,指的是mysql_exporter的ip
在mysql_exporter中设置mysql配置信息
命令如下:
# cd /usr/local/mysqld_exporter
# vim .my.cnf (手工创建)
[client]
user=mysql_monitor
password=12345678
启动mysql_exporter
# nohup ./mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &
配置prometheus拉取mysql节点信息
在prometheus的server端进行修改
# vim /usr/local/prometheus/prometheus.yml
- job_name: 'mariadb'
static_configs:
- targets: ['192.168.20.100:9104']
重启prometheus服务
命令如下:
# pkill prometheus
# cd /usr/local/prometheus/
# ./prometheus &
然后在web网页中刷新一下,会出现三台
知识扩展:
prometheus.yml配置文件详解
global:
# 全局配置
scrape_interval: 15s # 多久收集一次数据
evaluation_interval: 15s # 多久评估一次规则
scrape_timeout: 10s # 每次收集数据的超时时间
# Alertmanager configuration #告警设置
alerting:
alertmanagers:
- static_configs: #告警规则,也可以基于动态方式进行告警
- targets:
rule_files: #规则文件
#收集数据配置列表
scrape_configs:
- job_name: 'prometheus'
五:Grafana介绍
Grafana是开源的度量分析和可视化工具,,可以通过将采集的数据查询然后可视化的展示,并实现报警。它主要有以下六大特点:
(1)展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
(2)数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;
(3)通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;
(4)混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
(5)注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;
(6)过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
1.安装grafana
下载地址:grafana官网下载
# wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
# yum -y install grafana-7.1.5-1.x86_64.rpm
启动服务并设置开机自启
# systemctl start grafana-server && systemctl enable grafana-server
在浏览器上访问http://IP:3000 用户名和密码默认是admin
2.添加数据源(prometheus的数据源)
点击齿轮的图标,可以看到刚才添加的prometheus的数据源信息信息
3. 现成模板添加版
先要找到模板的添加码:
模板网址: https://grafana.com/grafana/dashboards
4.点击“+”里面的import选项
点击后就会看到当前服务器监控信息:
可以看到已经添加了相关的模板之后,图表就非常漂亮,省去了我们人工的一些操作,当然grafana还有一些比较高级的功能,官网上也有介绍,比如定制变量,定制图形模板等。