Prometheus(是由go语言(golang)开发)是一套开源的监控&报警&时间序列数 据库的组合。适合监控docker容器。
Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 于2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。
Prometheus是一个时间序列数据库。但是,它不仅仅是一个时间序列数据库。
它涵盖了可以绑定的整个生态系统工具集及其功能。
Prometheus主要用于对基础设施的监控。包括服务器,数据库,VPS,几乎所有东西都可以通过Prometheus进行监控。Prometheus希望通过对Prometheus配置中定义的某些端点执行的HTTP调用来检索度量标准。
无人驾驶车辆运行中要记录的经度,纬度,速度,方向,旁边物体的距 离等等。每时每刻都要将数据记录下来做分析。
某一个地区的各车辆的行驶轨迹数据
传统证券行业实时交易数据
实时运维监控数据等
关系型数据库对于大规模数据的处理性能糟糕。NOSQL可以比较好的处理 大规模数据,让依然比不上时间序列数据库。
存储成本低
高效的压缩算法,节省存储空间,有效降低IO
Prometheus有着非常高效的时间序列数据存储方法,每个采样数据仅仅占 用3.5byte左右空间,上百万条时间序列,30秒间隔,保留60天,大概花了 200多G(来自官方数据)
下图说明了Prometheus的体系结构及其某些生态系统组件:
实验环境:
| 主机名 | IP | 服务 |
|---|---|---|
| node2 | 192.168.8.121 | prometheus |
| node1 | 192.168.8.120 | node_exporter |
下载最新版的服务端prometheus和客户端node_exporter

选择对应的系统进行下载
- [root@node2 ~]# tar xf prometheus-2.47.0.linux-amd64.tar.gz -C /usr/local/
- [root@node2 src]# cd /usr/local/
- [root@node2 local]# ls
- bin games lib libexec redis share
- etc include lib64 prometheus-2.47.0.linux-amd64 sbin src
-
- [root@node2 local]# mv prometheus-47.0.linux-amd64/ prometheus
- [root@node2 local]# cd prometheus/
- [root@node2 prometheus]# ./prometheus --config.file=prometheus.yml
在Prometheus.yml中有配置文件,我们可以对其进行配置,当然第一次安装也可以不用配置;
- root@node2 prometheus]# vim /usr/local/prometheus/prometheus.yml
-
- #全局配置
- global:
- scrape_interval: 15s #每隔15秒向目标抓取一次数,默认为一分钟
- evaluation_interval: 15s #每隔15秒执行一次告警规则,默认为一分钟
- # scrape_timeout: 600s #抓取数据的超时时间,默认为10s
-
- #告警配置
- alerting:
- alertmanagers:
- - static_configs:
- - targets:
- # - alertmanager:9093 #alertmanager所部署机器的ip和端口
-
- #定义告警规则和阈值的yml文件
- rule_files:
- # - "first_rules.yml"
- # - "second_rules.yml"
-
- #收集数据配置
- #以下是Prometheus自身的一个配置.
- scrape_configs:
- #这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签.
- - job_name: "prometheus"
- # metrics_path defaults to '/metrics'
- # scheme defaults to 'http'.
- static_configs: #静态配置
- - targets: ["localhost:9090"]
其配置大致可分为四部分:
- [root@node2 prometheus]# ./promtool check config ./prometheus.yml
- Checking ./prometheus.yml
- SUCCESS: 0 rule files found
- [root@node2 prometheus]# cat > /usr/lib/systemd/system/prometheus.service <<EOF
- [Unit]
- Description=The Prometheus Server
- After=network.target
-
- [Service]
- Restart=on-failure
- ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
- RestartSec=15s
-
- [Install]
- WantedBy=multi-user.target
-
- EOF
-
- [root@node2 prometheus]# systemctl daemon-reload
- [root@node2 prometheus]# systemctl restart prometheus
- [root@node2 local]# ss -antl
- State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
- LISTEN 0 128 0.0.0.0:6379 0.0.0.0:*
- LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
- LISTEN 0 128 [::]:22 [::]:*
- LISTEN 0 128 *:9090 *:*
- ##启动
- /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &
-
- ##启动参数介绍
- --config.file #加载prometheus的配置文件
- --web.listen-address #监听prometheus的web地址和端口
- --web.enable-lifecycle #热启动参数,可以在不中断服务的情况下重启加载配置文件
- --storage.tsdb.retention #数据持久化的时间
- --storage.tsdb.path #数据持久化的保存路径
-
输入: “ip地址”+":9090" 在浏览器中进行访问,如果出现可视化界面说明成功;

- [root@node1 ~]# ls
- anaconda-ks.cfg node_exporter-1.6.1.linux-amd64.tar.gz
-
- [root@node1 ~]# tar xf node_exporter-1.6.1.linux-amd64.tar.gz -C /usr/local/
- [root@node1 ~]#
- [root@node1 ~]# cd /usr/local/
- [root@node1 local]# ls
- bin games lib libexec sbin src
- etc include lib64 node_exporter-1.6.1.linux-amd64 share
-
- [root@node1 local]# mv node_exporter-1.6.1.linux-amd64/ node_exporter
- [root@node1 local]#
- 注意:相关启动的参数
- --web.listen-address #node_expoetrt暴露的端口
- --collector.systemd #从systemd中收集
- --collector.systemd.unit-whitelist ##白名单,收集目标
- ".+" #从systemd中循环正则匹配单元
- "(docker|sshd|nginx).service" #白名单,收集目标,收集参数node_systemd_unit_state
-
- [root@node1 local]# vi /usr/lib/systemd/system/node_exporter.service
- [unit]
- Description=The node_exporter Server
- After=network.target
-
- [Service]
- ExecStart=/usr/local/node_exporter/node_exporter
- Restart=on-failure
- RestartSec=15s
- SyslogIdentifier=node_exporter
-
- [Install]
- WantedBy=multi-user.target
-
- [root@node1 local]# systemctl daemon-reload
- [root@node1 local]# systemctl enable node_exporter
- [root@node1 local]# systemctl restart node_exporter
- Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /usr/lib/systemd/system/node_exporter.service.
-
- [root@node1 local]# ss -antl
- State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
- LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
- LISTEN 0 128 [::]:22 [::]:*
- LISTEN 0 128 *:9100 *:*
- [root@node1 local]#
- [root@node2 prometheus]# vim /usr/local/prometheus/prometheus.yml
- ......
-
- rule_files:
- # - "first_rules.yml"
- # - "second_rules.yml"
-
- # A scrape configuration containing exactly one endpoint to scrape:
- # Here it's Prometheus itself.
- 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: ["192.168.8.120:9100"] //此处指定客户端ip和端口
-
使用Prometheus主机IP地址和端口号 http://192.168.8.121:9090/targets访问

