0. 方案比较
由于被监控唯一端口暴露,所以需要基于 push 的方案。
0.1 Prometheus
Prometheus 中有一个 Pushgateway 组件,大致流程为被监控节点实现脚本将数据推送到 Pushgateway,Prometheus 从 Pushgateway pull 数据:
优点 :
- 开源框架成熟;
- PromQL 支持复杂的查询和分析。
缺点 :
- 多个节点汇总到 Pushgateway,如果它挂了就全完了;
- Prometheus 拉取状态只针对 Pushgateway,无法对所有目标有效;
- Pushgateway 会持久化数据,如果监控下线,Prometheus 会拉取到旧的数据,因此需要手动清理 Pushgateway 不要的数据。
0.2 InfluxDB+Telegraf
在被监控节点上设置 Telegraf 代理,将数据 push 到 InfluxDB 的 API。
优点 :
- Telegraf 轻量级,易于部署;
缺点 :
- 与 Pushgateway 相比,Telegraf 可能会有轻微延迟。
- 可能不如 Prometheus 灵活度高。
- Influxdb 查询效率低。
3. Telegraf+Influxdb+Prometheus
使用 Telegraf 获取并推送数据到 Prometheus 。使用 Influxdb 做可持久化存储。
优点 :
- 继承了前两者的优点。
- 使用 Prometheus 查询,效率高。
1. 监控节点部署 InfluxDB
- 新建文件夹
/data/influxdb
- 执行
docker run -d --name=influxdb -p 8086:8086 -v /data/influxdb:/root/.influxdb2 influxdb:1.8-alpine
- 部署的是1.8 版本,不用可视化。
docker exec -it influxdb /bin/bash
进入容器,influx
启动 Influxdb 命令行交互。CREATE DATABASE mydb;
CREATE DATABASE telegraf;
创建数据库
2. 监控节点部署 Prometheus
- 创建
/data/prometheus/prometheus.yml
12345678910111213141516171819202122232425# my global configglobal:scrape_interval: 10s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 10s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# 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=<job_name>` to any timeseries scraped from this config.- job_name: "prometheus"# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets: ["<监控节点IP>:9090"]storage:tsdb:out_of_order_time_window: 12h# When running prometheus in Agent mode, remote-write is required.remote_write:# Agent is able to run with a invalid remote-write URL, but, of course, will fail to push timeseries.- url: "http://<监控节点IP>:9090/api/v1/write" - 执行
docker run -d -p 9090:9090 -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name=prometheus prom/prometheus:v2.47.2 --enable-feature=remote-write-receiver --config.file=/etc/prometheus/prometheus.yml --query.max-concurrency=10 --storage.tsdb.retention.time=6d
(–web.enable-remote-write-receiver/–enable-feature=remote-write-receiver)
3. 被监控节点部署 telegraf
-
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.28.3_linux_amd64.tar.gz
-
tar xf telegraf-1.28.3_linux_amd64.tar.gz
-
vim ~/.bashrc
添加export TELEGRAF_PATH=/data/telegraf/telegraf-1.28.3/usr/bin
并source ~/.bashrc
$TELEGRAF_PATH/telegraf version
查看版本- 编写 telegraf.conf 文件,样例。
/data/telegraf/telegraf-1.28.3/usr/bin/telegraf --config /data/telegraf/telegraf.conf
启动服务
4. 监控节点部署 Grafana
- 建立存储目录
mkdir /data/grafana & chmod 777 -R /data/grafana
-
执行
docker run -d -p 3000:3000 --name=grafana -v /data/grafana:/var/lib/grafana grafana/grafana:main
-
进入登录界面,输入初始密码 admin/admin 登录。
- 建立 Grafana 和 Prometheus 的连接
- 建立看板