先来学习下 Prometheus 的储存,然后实战怎么高可用部署!
参考 prometheus-book:https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/readmd/prometheus-local-storage
Prometheus内置了一个基于本地存储的时间序列数据库。在Prometheus设计上,使用本地存储可以降低Prometheus部署和管理的复杂度同时减少高可用(HA)带来的复杂性。 在默认情况下,用户只需要部署多套Prometheus,采集相同的Targets即可实现基本的HA。同时由于Promethus高效的数据处理能力,单个Prometheus Server基本上能够应对大部分用户监控规模的需求。
当然本地存储也带来了一些不好的地方,首先就是数据持久化的问题,特别是在像Kubernetes这样的动态集群环境下,如果Promthues的实例被重新调度,那所有历史监控数据都会丢失。 其次本地存储也意味着Prometheus不适合保存大量历史数据(一般Prometheus推荐只保留几周或者几个月的数据)。最后本地存储也导致Prometheus无法进行弹性扩展。为了适应这方面的需求,Prometheus提供了remote_write和remote_read的特性,支持将数据存储到远端和从远端读取数据。通过将监控与数据分离,Prometheus能够更好地进行弹性扩展。
除了本地存储方面的问题,由于Prometheus基于Pull模型,当有大量的Target需要采样本时,单一Prometheus实例在数据抓取时可能会出现一些性能问题,联邦集群的特性可以让Prometheus将样本采集任务划分到不同的Prometheus实例中,并且通过一个统一的中心节点进行聚合,从而可以使Prometheuse可以根据规模进行扩展。
除了讨论Prometheus自身的高可用,Alertmanager作为Promthues体系中的告警处理中心,本章的最后部分会讨论如何实现Alertmanager的高可用部署。
在 CentOS 7 上使用二进制部署,使用 Systemd 进行管理。
添加用户组及用户:
$ sudo groupadd --system prometheus
$ sudo useradd -s /sbin/nologin --system -g prometheus prometheus
添加目录:
$ sudo mkdir /data/prometheus
$ sudo chown -R prometheus:prometheus /data/prometheus/
$ for i in rules rules.d files_sd; do sudo mkdir -p /etc/prometheus/${i}; done
$ for i in rules rules.d files_sd; do sudo chown -R prometheus:prometheus /etc/prometheus/${i}; done
$ for i in rules rules.d files_sd; do sudo chmod -R 775 /etc/prometheus/${i}; done
去官网下载 Prometheus 二进制包。移动二进制文件到 PATH:
$ sudo mv prometheus promtool tsdb /usr/local/bin/
移动配置文件到配置目录:
$ sudo mv prometheus.yml /etc/prometheus/prometheus.yml
$ sudo mv consoles/ console_libraries/ /etc/prometheus/
移动完成后,就可以删掉二进制包了。
修改配置文件,可以修改自定义配置 :
$ sudo vim /etc/prometheus/prometheus.yml
添加 service 文件:
$ sudo vim /usr/lib/systemd/system/prometheus.service
内容如下:
[Unit]
Description=Prometheus
Documentation=https://prometheus.io/docs/introduction/overview/
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
Environment="GOMAXPROCS=16"
User=prometheus
Group=prometheus
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/data/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.external-url=
SyslogIdentifier=prometheus
Restart=always
[Install]
WantedBy=multi-user.target
因为我这里 CPU 为 16 核,所以设置了环境变量 GOMAXPROCS=16
启动:
$ sudo systemctl daemon-reload
$ sudo systemctl start prometheus
$ sudo systemctl enable prometheus
查看状态:
$ sudo systemctl status prometheus
浏览器打开界面:http://drift-1:9090/graph
安装一个单机 Elasticsearch:
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
编写 repo:
sudo vim /etc/yum.repos.d/elasticsearch.repo
内容如下:
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
安装 ES:
sudo yum install --enablerepo=elasticsearch elasticsearch
启动:
$ sudo systemctl daemon-reload
$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch
安装 Metricbeat:
$ sudo yum install metricbeat --enablerepo=elasticsearch
$ sudo systemctl enable metricbeat
$ sudo systemctl start metricbeat