Prometheus 官网地址 https://prometheus.io/
Prometheus 官网文档地址 https://prometheus.io/docs/introduction/overview/
Prometheus GitHub地址 https://github.com/prometheus/prometheus
Prometheus是一个开源的系统监控和警报工具包,最初由SoundCloud开发的,社区活跃,2016年加入了云原生计算基金会成为继Kubernetes之后的第二个托管项目;普罗米修斯以时间序列数据的形式收集并存储度量值;大部分模块由Go语言编写的。最新版本v2.37.0
Prometheus可以通过exporters直接拉取监控指标,或者通过Pushgateway获取短期任务推送监控数据,数据存储在Prometheus服务端本地,基于存储时间序列的数据上运行分析、聚合、生成警报。可以使用Grafana或其他API消费者对收集的数据进行可视化。普罗米修斯可以很好地记录任何纯数字的时间序列,它既适合以机器为中心的监视,也适合高度动态的面向服务的体系结构的监视,特别擅长于微服务和容器下多维数据收集和查询。也适合对可靠性要求高场景,每个Prometheus服务器都是独立的,不依赖于网络存储或其他远程服务。
从根本上说,Prometheus将所有数据存储为时间序列:带有时间戳的数据流属于同一度量标准和同一组标记维度。除了存储的时间序列,Prometheus还可以生成临时的派生时间序列作为查询的结果。
在Prometheus术语中,可以抓取的端点称为实例,通常对应于单个进程。具有相同目的的实例集合,例如为了可伸缩性或可靠性而复制的进程,称为作业。
例如一个有四个复制实例的API服务器作业
1.2.3.4:5670
1.2.3.4:5671
5.6.7.8:5670
5.6.7.8:5671
自动生成标签和时间序列,当Prometheus抓取目标时,它会自动在抓取的时间序列上附加一些标签,用于识别被抓取的目标:
Prometheus监控中,对于采集过来的数据,统一成为metrics数据,metrics已经相信大家都已耳熟,当我们需要为某个系统某个服务做监控、做统计,就需要用到metrics。metrics是一种对采集数据的总称(metrics并不代表某一种具体的数据格式,是一种对于度量计算单位的抽象)
Prometheus客户端库提供了四种核心度量类型;目前仅在客户端库(以支持针对特定类型的使用进行定制的api)和连接协议中区分这些类型。Prometheus服务器还没有使用类型信息,并将所有数据扁平化为无类型的时间序列;常见使用的就是counter、gauges和histogram
Prometheus的查询提供很多内置的函数,这些函数后续在实战使用到再说,可以在使用查阅官网文档说明,比如
# 挂载配置文件方式部署,准备prometheus.yml文件,可以从二进制文件拷贝,默认配置无需修改,或者从github中获取,这里暴露端口我改为9080,本机已有9090的服务
docker run \
-p 9080:9090 \
-v /home/commons/prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
# 挂载配置目录方式部署
docker run \
-p 9090:9090 \
-v //home/commons/prometheus/config:/etc/prometheus \
prom/prometheus
查看docker容器进程
访问http://192.168.50.95:9080/ 出现prometheus的控制台页面
# 下载最新版本v2.37.0的prometheus server
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
# 解压文件
tar -xvf prometheus-2.37.0.linux-amd64.tar.gz
# 进入目录
cd prometheus-2.37.0.linux-amd64
# 后台运行prometheus server,可通过nohup &之类或后台运行管理工具如daemonize、screen
nohup ./prometheus > prometheus.log 2>&1 &
默认情况下无需修改prometheus根目录下的prometheus.yml配置文件就可启动
# 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. 抓取采详数据的时间间隔,默认每15秒去被监控机上采详一次,这个就是我们所说的Prometheus的自定义数据采集频率
# evaluation_interval. 监控数据规则的评估频率,默认为15秒,这个参数是Prometheus多长时间会进行一次监控规则的评估,假如设置当内存使用量 > 70%时,发出报警,这么一条rule(规则),那么Prometheus会默认每15秒来执行一次这个规则,检查内存的情况。
# Alertmanager configuration 这个是Alertmanager是Prometheus的一个用于管理和发出报警的插件
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
# 在这个Jobs 的名字下面,具体来定义,要被监控的节点,以及节点上具体的端口信息等等,如果Prometheus配合,例如consul这种服务发现软件,Prometheus的配置文件,就不在需要人工去手工定义出来,而是能自动发现集群中,有哪些新机器以及新机器上出现了哪些新服务可以被监控
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
访问http://192.168.5.52:9090/ 出现prometheus的控制台页面,无账号密码验证(如果希望加上验证,可以使用apache httpass方式添加)
访问http://192.168.5.52:9090/ 出现prometheus的控制台页面,无账号密码验证(如果希望加上验证,可以使用apache httpass方式添加)
命令行支持参数可以查阅控制台页面http://192.168.5.52:9090/flags ,也可以直接通过控制台页面查询prometheus.yml的配置内容
通过上面scrape_configs配置可以知道默认情况下配置了对prometheus的监控,查询控制台页面prometheus的实例节点也是UP状态
prometheus数据存放在data目录下,其中长串字母的是历史数据保留,⽽当前近期数据实际上保留在内存中,并且按照⼀定间隔存放在 wal / ⽬录中防⽌突然断电或者重启以⽤来恢复内存中的数据。
**本人博客网站 **IT小神 www.itxiaoshen.com