Prometheus 是什么?
Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社区也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
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 部署
官网下载地址https://prometheus.io/download/
tar -zxvf prometheus-2.21.0.-rc.0.linux-amd64.tar.gz
mv prometheus-2.21.0.-rc.0.linux-amd64 /usr/local/Prometheus
cd /usr/local/prometheus/
[root@zmedu-17 prometheus]# ls
console_libraries NOTICE promtool
consoles prometheus
LICENSE prometheus.yml
后台启动prometheus:
# ./prometheus &
通过网址访问
通过后台执行http://192.168.1.17:9090
web端的基本使用及介绍
http:.//ip:9090
查看监控目标:
可以看到系统默认监控了自己的主机信息,监控接口通过http://服务器IP:9090/metrics 可以直接看到监控数据,如下图:
prometheus默认监控图像
在图1的位置输入process_cpu_seconds_total ,可以查看到cpu的使用情况。
案例:监控远程linux主机
首先在远程linux上安装node_export组件,帮助prometheus来收集数据
官网下载
node_exporter-1.0.1.linux-amd64.tar.gz
1. 上传并解压安装
Tar -zxvf node_exporter-1.0.1.linux-amd64.tar.gz
mv node_exporter-1.0.1.linux-amd64 node_exporte
2. 后台启动node_exporter来收集数据
# nohup ./node_exporter &
此处用nohup让程序一直运行下去,且在后台运行
备注:
关于nohup
nohup 是 Linux 的一个常用命令,当你想要在退出账户或者关闭终端后进程仍在运行时,就可以使用 nohup 命令。nohup 就是不挂断的意思(no hang up)。
3. 查看9100端口的占用情况
# lsof -i:9100
4. 查看监控的信息
5. 配置prometheus server端可以拉取node信息
/usr/local/prometheus-2.20.1.linux-amd64.tar.gz/prometheus.yml
在文件最后添加内容
- job_name: 'agent'
static_configs:
- targets: ['192.168.1.20:9100']
添加完成后重新启动prometheus
pkill Prometheus
# ./prometheus &
# ss -naltp |grep 9090
LISTEN 0 128 [::]:9090 [::]:* users:(("prometheus",pid=83351,fd=8))
6. 通过web端查看,是否成功
可以看到增加了一台监控的信息
监控mysql需要在被监控机器安装mysql_exporter
mysql_exporter下载地址:https://prometheus.io/download/
mysqld_exporter-0.12.1.linux-amd64.tar.gz
1. 上传解压安装mysqld_exporter
Tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz
Mv mysqld_exporter-0.12.1.linux-amd64.tar.gz mysqld_exporter
cd mysqld_exporter/
2. 安装mariadb (这里mariadb数据库为参考)
# yum install mariadb\* -y
systemctl start mariadb && systemctl enable mariadb
3. 在数据库里创建mysql账号用户收集数据
# mysql
grant select,replication client,process ON *.* to 'mysql_monitor'@'localhost' identified by '12345678';
flush privileges;
备注:此处是prometheus服务器来找mysql_exporter,然后mysql_exporter 在找mariadb,所以这里用的是localhost,指的是mysql_exporter的ip
5.在mysql_exporter中设置mysql配置信息
Cd /usr/local/mysql_exporter
# vim .my.cnf (手工创建)
[client]
user=mysql_monitor
password=12345678
5. 启动mysql_exporter
nohup ./mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf &
ss -naltp |grep 9104
LISTEN 0 128 *:9104 *:* users:(("mysqld_exporter",pid=68249,fd=3))
6. 配置prometheus拉取mysql节点信息
在prometheus的server端进行修改
vim prometheus.yml
- job_name: 'mariadb'
static_configs:
- targets: ['192.168.1.20:9104']
重启prometheus服务
pkill Prometheus
# ./prometheus &
7. 通过web端查看
http://192.168.1.17:9090
8. 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过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。
二. 下载安装
下载地址:grafana官网下载
wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
yum install grafana-7.1.5-1.x86_64.rpm
启动服务并开机自启
# systemctl start grafana-server && # systemctl enable grafana-server
3. 浏览器访问:http://192.168.1.63:3000
备注:用户名和密码都是admin
4. 修改密码
第一次登陆需要修改密码:本次修改为123456
三.添加数据源(prometheus的数据源)
设置数据源,名称,类型,ip地址及端口号
设置完成后,save 保存
点击齿轮的图标,可以看到刚才添加的prometheus的数据源信息信息
2. 现成模板添加版
先要找到模板的添加码:
模板网址: https://grafana.com/grafana/dashboards
点击import
出来信息后,等一会,选择prometheus data source 为prometheus,然后点击import
点击后就会看到当前服务器监控信息:
可以看到已经添加了相关的模板之后,图表就非常漂亮,省区了我们人工的一些操作,当然grafana还有一些比较高级的功能,官网上也有介绍,比如定制变量,定制图形模板等。