prometheus简介
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。
官网地址
Prometheus是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。它涵盖了可以绑定的整个生态系统工具集及其功能。
Prometheus主要用于对基础设施的监控。包括服务器,数据库,VPS,几乎所有东西都可以通过Prometheus进行监控。Prometheus希望通过对Prometheus配置中定义的某些端点执行的HTTP调用来检索度量标准。
普罗米修斯的主要特点是:.
-
业务持续性(及时预警,监控)
-
一个多维数据模型,其中包含通过度量标准名称和键/值对标识的时间序列数据
-
PromQL,一种灵活的查询语言,可以利用此维度完成复杂的查询
-
不依赖分布式存储;单服务器节点是自治的
-
时间序列收集通过HTTP上的拉模型进行
-
通过中间网关支持推送时间序列
-
通过服务发现或静态配置发现目标
-
多种图形和仪表板支持模式
Prometheus 基本服务与作用
主要服务 | 作用 |
---|---|
Prometheus Server | 收集指标和存储时间序列数据,并提供查询接口 |
ClientLibrary | 客户端库 |
Push Gateway | 短期存储指标数据。主要用于临时性的任务 |
Exporters | 采集已有的第三方服务监控指标并暴露metrics |
Alertmanager | 告警 |
Web UI | 简单的Web控制台 |
Prometheus 各组件运行流程
- Prometheus Server:Prometheus Sever 是 Prometheus 组件中的核心部分,负责实现对监 控数据的获取,存储及查询
- Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用 Service Discovery(服务发现)的方式动态管理监控目标,并从这些监控目标中获取数据。
- 其次 Prometheus Sever 需要对采集到的数据进行存储,Prometheus Server 本身就是一个实时数据库,将 采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
- Prometheus Server 对外提供了自定义的PromQL,实现对数据的查询以及分析。另外 Prometheus Server 的联邦集群能力可以使其从其他的Prometheus Server 实例中获取数据。
- Exporters:Exporter将监控数据采集的端点通过 HTTP 服务的形式暴露给Prometheus Server, Prometheus Server 通过访问该 Exporter 提供的 Endpoint 端点,即可以获取到需要采集的监控数据。可以将 Exporter 分为 2 类:
- 直接采集:这一类 Exporter 直接内置了对 Prometheus 监控的支持,比如 cAdvisor,Kubernetes,Etcd等,都直接内置了用于向 Prometheus 暴露监控数据的端点。
- 间接采集:原有监控目标并无直接支持 Prometheus,因此需要通过 Prometheus 提供的 Client Library 编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。
- AlertManager:在 Prometheus Server 中支持基于 Prom QL 创建告警规则,如果满足 Prom QL 定义的规则,则会产生一条告警。常见的接收方式有:电子邮件,webhook 等。
- PushGateway:Prometheus 数据采集基于 Prometheus Server 从 Exporter pull 数据,因此 当网络环境不允许 Prometheus Server和 Exporter 进行通信时,可以使用 PushGateway 来进行中转。
Prometheus 的工作流程:
- Prometheus server 定期从配置好的 jobs 和 exporters 中拉取 metrics,或者接收来自Pushgateway 发送过来的 metrics,或者从其它的 Prometheus server 中拉 metrics。
- Prometheus server 在本地存储收集到的 metrics,并运行定义好的 alerts.rules,记录新的时间序列或者向 Alertmanager 推送警报。
- Alertmanager根据配置文件,对接收到的报进行处理,发出告警.
- 在图形界面中,可视化采集数据。
安装prometheus监控服务
环境准备
主机名 | 角色 | 地址 |
---|---|---|
server | prometheus+grafana | 192.168.2.10 |
client1 | mysql+client | 192.168.2.11 |
client2 | client | 192.168.2.12 |
1.安装Go语言环境
[root@server ~]# curl -s https://mirror.go-repo.io/centos/go-repo.repo | tee /etc/yum.repos.d/go-repo.repo
[go-repo]
name=go-repo - CentOS
baseurl=https://mirror.go-repo.io/centos/$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirror.go-repo.io/centos/RPM-GPG-KEY-GO-REPO
[root@server ~]# yum install go -y
[root@server ~]# go version
go version go1.15.6 linux/amd64
2.下载prometheus软件
[root@server ~]# cd /opt
[root@server opt]# wget https://github.com/prometheus/prometheus/releases/download/v2.23.0/prometheus-2.23.0.linux-amd64.tar.gz
[root@server opt]# ll
总用量 62792
-rw-r--r-- 1 root root 64298432 12月 17 16:12 prometheus-2.23.0.linux-amd64.tar.gz
3.编辑解压目录下的prometheus.yml,配置监控linux主机和mysq|数据库,配置文件为yml语法.注意缩进对齐
[root@server opt]# cd prometheus-2.23.0.linux-amd64/
[root@server prometheus-2.23.0.linux-amd64]# ls
console_libraries consoles LICENSE NOTICE prometheus prometheus.yml promtool
[root@server prometheus-2.23.0.linux-amd64]# vim prometheus.yml
scrape_interval: 15s # 默认15秒到目标处抓取数据
job_name #这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签
在最后进行配置:
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus' # 每一个 job_name 都是一个监控项,这里代表监控操作系统状态
static_configs:
- targets: ['localhost:9090']
labels:
instance: server
- job_name: 'linux'
static_configs:
- targets: ['192.168.2.11:9100','192.168.2.12:9100'] # 被监控主机 IP 地址和端口
labels:
instance: client # 实例名称,在 grafana 中表示对应的主机
- job_name: 'mysql' # 监控 mysql 数据库状态
static_configs:
- targets: ['192.168.2.11:9104'] # 数据库Ip地址+端口
labels:
intance: client # 实例名称,在 grafana 中表示对应的主机
4.后台启动
[root@server prometheus-2.23.0.linux-amd64]# nohup ./prometheus --config.file=prometheus.yml &
[1] 2358
[root@server prometheus-2.23.0.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"
5.浏览器访问
使用浏览器打开该机器的 http://部署机器:9090 ,或者 http://localhost:9090/ 即可以看到Prometheus的graph页面
- 测试访问,由于此时没有配置被监控主机,所以不是up的状态
启动用于采集 Linux 系统和 mysql 服务状态的 exporter 服务
prometheus常见的exporter及作用:
(1). node. exporter 用于监控操作系统的性能和运行状态
(2). mysqld. exporter用于监控mysql服务
(3). snmp. exporter 用于监控网络设备
更多exporter可在官网下载官方传送门—
1.安装运行node_exporter
[root@client1 ~]# cd /opt
[root@client1 opt]# wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
[root@client1 opt]# ll
总用量 9300
-rw-r--r-- 1 root root 9520728 12月 17 17:18 node_exporter-1.0.1.linux-amd64.tar.gz
[root@client1 opt]# tar -xf node_exporter-1.0.1.linux-amd64.tar.gz
[root@client1 opt]# cd node_exporter-1.0.1.linux-amd64/
后台启动
[root@client1 node_exporter-1.0.1.linux-amd64]# nohup ./node_exporter &
[1] 90003
[root@client1 node_exporter-1.0.1.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"
2.配置 mysqld_exporter 用于监控client1上的mysql服务
mysqld_exporter需要连接到Mysql,所以需要Mysql的权限,我们先为它创建用户并赋予所需的权限.
进入mysql数据库,8.0以上的数据库需要先创建用户再授权用户
mysql> create user 'mysql_monitor'@localhost IDENTIFIED BY '123qqq...A';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication client,process on *.* to 'mysql_monitor'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on *.* to 'mysql_monitor'@'localhost';
Query OK, 0 rows affected (0.01 sec)
3.创建.my.cnf文件并运行mysqld_exporter:
[root@client1 opt]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
[root@client1 opt]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz
[root@client1 ~]# vim /opt/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
[client]
user=mysql_monitor
password=123qqq...A
后台启动
[root@client1 ~]# nohup /opt/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf="/opt/mysqld_exporter-0.12.1.linux-amd64/.my.cnf" &
[2] 114311
[root@client1 ~]# nohup: 忽略输入并把输出追加到"nohup.out"
4.浏览器访问
总结prometheus使用方法:
1.想监控操作系统,只需要一步:
在被监控系统上安装node. exporter并启动就ok了
2.想监控操mysql数据库,只需要两步:
(1).创建一个mysql用户
(2).安装mysqld. exporter 并启动
注意:prometheus里面的时区是GMT,图形横轴显示的时间与后面的grafana显示时间不同,我们用的主机时区是CST,大家可以自己了解这个时区间的关系
Prometheus自带的图形并不够强大,于是我们可以使用Grafana作为Prometheus的Dashboard。
使用 Grafana 可视化工具美化监控数据
[root@server opt]# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.0.1-1.x86_64.rpm
[root@server opt]# yum -y install grafana-5.0.1-1.x86_64.rpm
安装插件
[root@server opt]# grafana-cli plugins install grafana-piechart-panel
installing grafana-piechart-panel @ 1.6.1
from url: https://grafana.com/api/plugins/grafana-piechart-panel/versions/1.6.1/download
into: /var/lib/grafana/plugins
✔ Installed grafana-piechart-panel successfully
Restart grafana after installing plugins . <service grafana-server restart>
[root@server opt]# service grafana-server restart
Restarting grafana-server (via systemctl): [ 确定 ]
浏览器访问3000端口,登录,默认账号密码admin/admin
登录执行设置数据源
进入配置页面
点击保存并测试,如果出现如下内容则代表成功
配置完成后可以把默认的dashboards导入
这时候你再进入到datasource可以看到刚配置的数据源;
点击Prometheus 2.0 Stats:
将监控 Linux 系统和 mysql 服务运行状态的 web 仪表盘插件导入 grafana
点击导入,粘贴ID