文章目录
- Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,由 SoundCloud 公司开发。
Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 或者 Docker 。
Prometheus 应该是为数不多的适合 Docker、Mesos、Kubernetes 环境的监控系统之一。
- 易于管理: Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等); 唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。 强大的查询语言 PromQL: Prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合。 同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警中。 高效: 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效的处理这些数据。 可扩展: Prometheus 支持联邦集群,可以让多个 Prometheus 实例产生一个逻辑集群; 当单实例 Prometheus 处理的任务量过大时,通过使用功能分区(sharding)+ 联邦集群(federation)可以对其进行扩展。 易于集成: 目前官网提供了多种语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。 可视化: Prometheus Server 自带一个 UI,通过这个 UI 可以方便对数据进行查询和图形化展示; 同时还可以对接 Grafana 可视化工具展示精美监控指标。
- 如上图,Prometheus 主要由以下部分组成: Prometheus:主要是负责存储、抓取、聚合、查询方面。 Alertemanager:主要是负责实现报警功能。 Pushgateway:主要是实现接收有 Client-push 过来的指标数据,在指定的时间间隔,有主程序来抓取。 *_exporter:主要是负责采集物理机、中间件的信息。
- 准备工作:
主机名
操作系统
IP 地址
Prometheus
CentOS 7.4
192.168.1.1
Client
CentOS 7.4
192.168.1.2
Granfana
CentOS 7.4
192.168.1.3
注意:在所有节点上安装 ntpdate 工具,并进行时间同步(因为 Prometheus 对时间要求非常严格)
yum -y install ntpdate
/usr/sbin/ntpdate ntp1.aliyun.com
- [root@Prometheus ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz [root@Prometheus ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz [root@Prometheus ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
- [root@Prometheus ~]# useradd -s /sbin/nologin prometheus [root@Prometheus ~]# chown -R prometheus:prometheus /usr/local/prometheus/ [root@Prometheus ~]# vim /usr/lib/systemd/system/prometheus.service [Unit] Description=prometheus After=network.target [Service] User=prometheus Group=prometheus WorkingDirectory=/usr/local/prometheus ExecStart=/usr/local/prometheus/prometheus [Install] WantedBy=multi-user.target [root@Prometheus ~]# systemctl daemon-reload [root@Prometheus ~]# systemctl enable –now prometheus # 启动并开启自启 当启动 Prometheus 后,便可以通过 9090 端口来访问 Prometheus 自带的 UI 界面:
- 默认情况下 Prometheus 会将采集的数据存储到本机的 /usr/local/prometheus/data 目录,存储数据的大小受限和扩展不便; 所以这里使用 influxdb 作为后端的数据库来存储数据。 1)安装 [root@Prometheus ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm [root@Prometheus ~]# yum -y localinstall influxdb-1.7.8.x86_64.rpm [root@Prometheus ~]# cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default [root@Prometheus ~]# systemctl enable –now influxdb 2)验证 [root@Prometheus ~]# influx Connected to http://localhost:8086 version 1.7.8 InfluxDB shell version: 1.7.8 > create database prometheus; > exit 3)配置 Prometheus 集成 infuxdb [root@Prometheus ~]# vim /usr/local/prometheus/prometheus.yml 在最后面添加: remote_write: – url: “http://localhost:8086/api/v1/prom/write?db=prometheus” remote_read: – url: “http://localhost:8086/api/v1/prom/read?db=prometheus” [root@Prometheus ~]# systemctl restart prometheus # 重启 Prometheus 注意:如果你们 influxdb 配置密码,请参考 官网文档 来进行配置。
- 因为 Prometheus 并不能直接监控服务,其主要任务负责数据的收集,存储并对外提供数据查询支持;
因此,为了能够监控到某些东西,如:主机的 CPU 使用率,我们需要使用到 Exporter。
- [root@Client ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz [root@Client ~]# tar xf node_exporter-0.18.1.linux-amd64.tar.gz [root@Client ~]# mv node_exporter-0.18.1.linux-amd64 /usr/local/exporter/ [root@Client ~]# vim /usr/lib/systemd/system/node_exporter.service [Unit] Description=node_exporter After=network.target [Service] User=prometheus Group=prometheus ExecStart=/usr/local/exporter/node_exporter \ –web.listen-address=:20001 \ –collector.systemd \ –collector.systemd.unit-whitelist=(sshd|nginx).service \ –collector.processes [Install] WantedBy=multi-user.target [root@Client ~]# systemctl daemon-reload [root@Client ~]# systemctl enable –now node_exporter 当启动 node_exporter 服务后,便可以通过 20001 端口来访问 Client 的监控指标。
- [root@Prometheus ~]# vim /usr/local/prometheus/prometheus.yml – job_name: “Client” static_configs: – targets: – “192.168.1.2:20001” [root@Prometheus ~]# systemctl restart prometheus
- 在 Prometheus 中,我们可以使用 Web 界面进行数据的查询和展示,但是展示效果不是很好; 所以我们这里使用 Grafana 来配合 Prometheus 使用。
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,由 SoundCloud 公司开发。
Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化环境比如 VM 或者 Docker 。
Prometheus 应该是为数不多的适合 Docker、Mesos、Kubernetes 环境的监控系统之一。
易于管理:
- Prometheus核心部分只有一个单独的二进制文件,不存在任何的第三方依赖(数据库,缓存等等);
- 唯一需要的就是本地磁盘,因此不会有潜在级联故障的风险。
强大的查询语言 PromQL:
- Prometheus 内置一个强大的数据查询语言 PromQL,通过 PromQL 可以实现对监控数据的查询、聚合。
- 同时 PromQL 也被应用于数据可视化(如 Grafana)以及告警中。
高效:
- 对于监控系统而言,大量的监控任务必然导致有大量的数据产生。而 Prometheus 可以高效的处理这些数据。
可扩展:
- Prometheus 支持联邦集群,可以让多个 Prometheus 实例产生一个逻辑集群;
- 当单实例 Prometheus 处理的任务量过大时,通过使用功能分区(
sharding)+ 联邦集群(federation)可以对其进行扩展。
易于集成:
- 目前官网提供了多种语言的客户端 SDK,基于这些 SDK 可以快速让应用程序纳入到监控系统中,同时还支持与其它的监控系统集成。
可视化:
- Prometheus Server 自带一个 UI,通过这个 UI 可以方便对数据进行查询和图形化展示;
- 同时还可以对接 Grafana 可视化工具展示精美监控指标。
Prometheus:主要是负责存储、抓取、聚合、查询方面。Alertemanager:主要是负责实现报警功能。Pushgateway:主要是实现接收有 Client-push 过来的指标数据,在指定的时间间隔,有主程序来抓取。*_exporter:主要是负责采集物理机、中间件的信息。
准备工作:
| 主机名 | 操作系统 | IP 地址 |
|---|---|---|
| Prometheus | CentOS 7.4 | 192.168.1.1 |
| Client | CentOS 7.4 | 192.168.1.2 |
| Granfana | CentOS 7.4 | 192.168.1.3 |
- 注意:在所有节点上安装
ntpdate工具,并进行时间同步(因为 Prometheus 对时间要求非常严格)
yum -y install ntpdate
/usr/sbin/ntpdate ntp1.aliyun.com
[root@Prometheus ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
[root@Prometheus ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz
[root@Prometheus ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
[root@Prometheus ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
[root@Prometheus ~]# tar xf prometheus-2.16.0.linux-amd64.tar.gz
[root@Prometheus ~]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
[root@Prometheus ~]# useradd -s /sbin/nologin prometheus
[root@Prometheus ~]# chown -R prometheus:prometheus /usr/local/prometheus/
[root@Prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target
[root@Prometheus ~]# systemctl daemon-reload
[root@Prometheus ~]# systemctl enable --now prometheus # 启动并开启自启
[root@Prometheus ~]# useradd -s /sbin/nologin prometheus
[root@Prometheus ~]# chown -R prometheus:prometheus /usr/local/prometheus/
[root@Prometheus ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target
[root@Prometheus ~]# systemctl daemon-reload
[root@Prometheus ~]# systemctl enable --now prometheus # 启动并开启自启
当启动 Prometheus 后,便可以通过 9090 端口来访问 Prometheus 自带的 UI 界面:


- 默认情况下 Prometheus 会将采集的数据存储到本机的
/usr/local/prometheus/data 目录,存储数据的大小受限和扩展不便;
- 所以这里使用
influxdb 作为后端的数据库来存储数据。
/usr/local/prometheus/data 目录,存储数据的大小受限和扩展不便;influxdb 作为后端的数据库来存储数据。1)安装
[root@Prometheus ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
[root@Prometheus ~]# yum -y localinstall influxdb-1.7.8.x86_64.rpm
[root@Prometheus ~]# cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
[root@Prometheus ~]# systemctl enable --now influxdb
2)验证
[root@Prometheus ~]# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> create database prometheus;
> exit
3)配置 Prometheus 集成 infuxdb
[root@Prometheus ~]# vim /usr/local/prometheus/prometheus.yml
在最后面添加:
remote_write:
- url: "http://localhost:8086/api/v1/prom/write?db=prometheus"
remote_read:
- url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
[root@Prometheus ~]# systemctl restart prometheus # 重启 Prometheus
- 注意:如果你们
influxdb配置密码,请参考 官网文档 来进行配置。
- 因为 Prometheus 并不能直接监控服务,其主要任务负责数据的收集,存储并对外提供数据查询支持;
- 因此,为了能够监控到某些东西,如:主机的 CPU 使用率,我们需要使用到 Exporter。
[root@Client ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
[root@Client ~]# tar xf node_exporter-0.18.1.linux-amd64.tar.gz
[root@Client ~]# mv node_exporter-0.18.1.linux-amd64 /usr/local/exporter/
[root@Client ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/exporter/node_exporter \
--web.listen-address=:20001 \
--collector.systemd \
--collector.systemd.unit-whitelist=(sshd|nginx).service \
--collector.processes
[Install]
WantedBy=multi-user.target
[root@Client ~]# systemctl daemon-reload
[root@Client ~]# systemctl enable --now node_exporter
[root@Client ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
[root@Client ~]# tar xf node_exporter-0.18.1.linux-amd64.tar.gz
[root@Client ~]# mv node_exporter-0.18.1.linux-amd64 /usr/local/exporter/
[root@Client ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/exporter/node_exporter \
--web.listen-address=:20001 \
--collector.systemd \
--collector.systemd.unit-whitelist=(sshd|nginx).service \
--collector.processes
[Install]
WantedBy=multi-user.target
[root@Client ~]# systemctl daemon-reload
[root@Client ~]# systemctl enable --now node_exporter
当启动 node_exporter 服务后,便可以通过 20001 端口来访问 Client 的监控指标。


[root@Prometheus ~]# vim /usr/local/prometheus/prometheus.yml
- job_name: "Client"
static_configs:
- targets:
- "192.168.1.2:20001"
[root@Prometheus ~]# systemctl restart prometheus
[root@Prometheus ~]# vim /usr/local/prometheus/prometheus.yml
- job_name: "Client"
static_configs:
- targets:
- "192.168.1.2:20001"
[root@Prometheus ~]# systemctl restart prometheus
- 在 Prometheus 中,我们可以使用 Web 界面进行数据的查询和展示,但是展示效果不是很好;
- 所以我们这里使用 Grafana 来配合 Prometheus 使用。
[root@Grafana ~]# wget https://dl.grafana.com/oss/release/grafana-6.1.4-1.x86_64.rpm
[root@Grafana ~]# tar xf grafana-6.1.4-1.x86_64.rpm
[root@Grafana ~]# systemctl enable --now grafana-server
[root@Grafana ~]# netstat -anpt | grep 3000
[root@Grafana ~]# wget https://dl.grafana.com/oss/release/grafana-6.1.4-1.x86_64.rpm
[root@Grafana ~]# tar xf grafana-6.1.4-1.x86_64.rpm
[root@Grafana ~]# systemctl enable --now grafana-server
[root@Grafana ~]# netstat -anpt | grep 3000










发表回复