前言
Prometheus(go语言开发)是一套开源的监控&报警&时间序列数 据库的组合。适合监控docker容器。因为kubernetes(俗称k8s)的流行带动 了prometheus的发展。
官网地址:https://prometheus.io/docs/introduction/overview/
Prometheus 主要特征
- 多维度数据模型
- 灵活的查询语言
- 不依赖分布式存储
- 单个服务器节点是自主的 以HTTP方式,通过pull模型拉去时间序列数据
- 也可以通过中间网关支持push模型 通过服务发现或者静态配置,来发现目标服务对象 支持多种多样的图表和界面展示
原理架构图
下面给出一张关于Prometheus 的原理架构图
图中主要组件及工作流程介绍:
- Prometheus server 包含数据采集scrapes job, stores time series data;
- push gateway : Prometheus server的一个代理节点, 当一些节点没有提供HTTP endpoint时,可将数据push到代理节点,Prometheus会去代理节点获取数据;
- exporters: 数据采集插件, 暴露一个http服务的接口给Prometheus server定时抓取;
- alertmanager: 报警插件;
Prometheus 适用的监控目标
系统监控对于任何一个庞大的应用来说都是必不可少的,设想类似淘宝这样的大型电商系统,支撑起正常高效运转的背后是众多的服务器组成的集群,设想如果在双11期间,某一台服务器发生了故障,没有及时的监控到故障,带来的损失将是不可估量的;
在《SRE: Google运维解密》一书中指出,监控系统需要能够有效的支持白盒监控和黑盒监控。通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。而黑盒监控,常见的如HTTP探针,TCP探针等,可以在系统或者服务在发生故障时能够快速通知相关的人员进行处理。通过建立完善的监控体系,从而达到以下目的:
- 长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们可以提前预测在未来什么时间节点上需要对资源进行扩容;
- 对照分析:两个版本的系统运行资源使用情况的差异如何?在不同容量情况下系统的并发和负载变化如何?通过监控能够方便的对系统进行跟踪和比较;
- 告警:当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从而能够对问题进行快速的处理或者提前预防问题的发生,避免出现对业务的影响
- 故障分析与定位:当问题发生后,需要对问题进行调查和处理。通过对不同监控监控以及历史数据的分析,能够找到并解决根源问题
- 数据可视化:通过可视化仪表盘能够直接获取系统的运行状态、资源使用情况、以及服务运行状态等直观的信息
Prometheus 优势及适合场景
- Prometheus非常适合记录任何纯数字时间序列。它既适合以机器为中心的监视,也适合于高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一种特别的优势
- Prometheus的设计旨在提高可靠性,使其成为中断期间要使用的系统,以使您能够快速诊断问题。每个Prometheus服务器都是独立的,而不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依靠它,并且无需设置广泛的基础结构即可使用它
搭建步骤
下面来演示如何基于centos7快速搭建起Promethus的环境
1、环境准备
- 两台机器,Node1 ,用于安装Promethus,Node2 用于被监控或者在上面安装其他被监控的服务
- Promethus 安装包,grafana安装包以及node_exporter安装包
2、Node1上传prometheus-2.26.0 安装包
上传并解压prometheus 安装包
tar -zxvf prometheus....
mv prometheus-2.26.0.linux-amd64 prometheus2.26
3、启动prometheus服务
默认情况下,不需要做任何的配置和修改,直接使用下面的命令启动即可
./prometheus --config.file=prometheus.yml &
启动成功后,prometheus 默认暴露的服务访问端口为 9090 ,可以使用下面的命令检查prometheus服务状态 ,
ss -antlp | grep 9090
外部的web端可以访问prometheus 的界面,需要开启9090端口 ,然后浏览器直接访问:http://IP:9090/
点击下面的targets ,看到下面的界面
默认情况不做任何的配置,Promethus会对本机进行监控,可以点击 上面的那个地址,将会跳转到下面的界面,这是一堆大家很难看懂的信息,其实这就是Promethus监控到的本机服务器相关参数信息,
比如可以拿到其中某个参数信息到主页面的搜索框进行查询,这也是Promethus经常操作的地方
配置监控其他服务器
上面的步骤中,我们在Node1机器上快速搭建起了Promethus的环境,设想需要监控另一台服务器Node2的状况,该怎么做呢?下面演示下这个配置步骤,这也是一个非常常用的场景
1、node2节点上传 node_exporter安装包
tar -zxvf node_exporter......
mv node_exporter-0.16.0.linux-amd64 node_exporter
2、启动node_exporter 服务
nohup ./node_exporter &
3、检查服务状态
node_exporter 默认暴露9100端口,可以通过下面命令查看
4、Promethus 所在的node1节点做如下配置
修改 prometheus.yml 配置文件,找到下面的配置所在的位置,然后在后面添加新的配置
- job_name: 'remote_node'
static_configs:
- targets: ['Node2的IP地址:9100']
Promethus 配置监控服务格式比较固定,基本上都类似,重新加一个job_name,然后配置相关的服务、端口等,后续会陆续做说明
配置完毕后,需要杀掉之前的进程,然后重新执行之前的启动命令
pkill prometheus
./prometheus --config.file=prometheus.yml &
然后,我们再次访问之前的界面,这时候可以发现下面多了一个监控的对象,那个job=remote_node的不正是上面在prometheus.yml里面新增的一个嘛
本篇演示了如何基于centos7环境 快速安装promethus(普罗米修斯)的监控环境,后续如果需要接入其他被监控的服务就可以在此基础上继续进行了,本篇到此结束,最后感谢观看!