prometheus|装在笔记本里的私有云环境:网络存储篇(中)( 二 )


(上面打印出来的的内容,就是我们前文中提到的 Prometheus 实际工作时,进行定时抓取的性能指标数据。)
配置 Prometheus 抓取 MinIO 性能指标数据在上报数据就绪后,我们来配置 Prometheus 的抓取配置,让这个数据能够持续的写入 Prometheus 的时序数据库中。
在监控篇中,我们提到了 Prometheus 的部署和配置,其中主要的抓取配置都保存在了 config/prometheus.yml,所以我们需要继续修改这个配置,让它能够抓取 MinIO。

- job_name: minio
scrape_interval: 10smetrics_path: /minio/v2/metrics/clusterscheme: httpstatic_configs:- targets: ['s3.storage.lab.com']
更新完毕配置后,同样使用 docker-compose down && docker-compose up -d 重启 prometheus,然后在浏览器中访问:http://monitor.lab.com:9090/targets,在列表中就能看到 MinIO 已经被正确的作为新的数据源使用啦。
prometheus|装在笔记本里的私有云环境:网络存储篇(中)
文章插图

为 MinIO 配置 Grafana 监控面板为了直观的观测 MinIO 的运行状况,我们可以继续在 Grafana 中为 MinIO 配置一个监控面板。MinIO 官方已经将一个比较通用的模版上传到了 Grafana 模版市场,我们可以直接进行使用。
prometheus|装在笔记本里的私有云环境:网络存储篇(中)
文章插图

参考监控篇中的“Grafana 控制面板导入”方式,将编号“13502”的面板导入 Grafana 中,就可以看到下面的监控面板界面了。
prometheus|装在笔记本里的私有云环境:网络存储篇(中)
文章插图

可以看到上面的界面中出现了非常多的 “N/A”,这是因为 Grafana 并不知道我们要使用哪一个上报的应用数据进行展示,在界面的左上角筛选并使用“minio”(上一小节在 Prometheus 抓取配置中配置的内容)之后,我们就能够看到正确的监控界面了。
prometheus|装在笔记本里的私有云环境:网络存储篇(中)
文章插图

接着来聊聊另外一种普通应用的监控配置方式。
Syncthing 的监控集成和 MinIO 不同的是,Syncthing 原生虽然支持通过 API 进行应用运行数据查询,但是它并不符合 Prometheus 的监控数据格式要求,所以我们需要为它搭建一个监控指标接口服务( exporter )进行数据暴露,以及配置 Prometheus 对它进行数据抓取。
配置 Syncthing 性能指标服务关于 Syncthing Exporter 的运行细节,可以围观 GitHub 的仓库。为了更好的执行性能,我将这个项目的容器镜像进行了重新构建,并上传到了 https://github.com/soulteary/syncthing_exporter。镜像已经推送到了 DockerHub,所以,你可以通过下面的方式获取这个更小的容器镜像(压缩后仅有12M):
docker pull soulteary/syncthing-exporter
访问 https://syncthing.storage.lab.com ,点击顶部导航栏右侧的操作按钮,选择“高级”配置菜单,在弹出的对话框里获取我们接下来要使用的“API KEY”。
prometheus|装在笔记本里的私有云环境:网络存储篇(中)
文章插图

接着,编辑上篇文章中提到的 Syncthing 环境变量配置文件 .env,在文件尾部添加下面的内容,并使用刚刚获取的 API 替换下面的“DOCKER_EXPORTER_API_TOKEN”中的内容:
# == exporter
DOCKER_EXPORTER_IMAGE_NAME=soulteary/syncthing-exporterDOCKER_EXPORTER_API_TOKEN=YOUR_API_TOKENDOCKER_EXPORTER_HOSTNAME=syncthing-exporter-on-storageDOCKER_EXPORTER_DOMAIN=syncthing-exporter.storage.lab.com
然后,编写 Exporter 的容器配置 docker-compose.exporter.yml:
version: "3"services:syncthing-exporter:image: ${DOCKER_EXPORTER_IMAGE_NAME}container_name: DOCKER_EXPORTER_HOSTNAMEexpose:- 9093restart: alwaysenvironment:SYNCTHING_URI: "http://${DOCKER_SYNCTHING_HOSTNAME}:8384/"SYNCTHING_TOKEN: ${DOCKER_EXPORTER_API_TOKEN}labels:- "traefik.enable=true"- "traefik.docker.network=traefik"- "traefik.http.routers.sync-exporter-http.entrypoints=http"- "traefik.http.routers.sync-exporter-http.rule=Host(`${DOCKER_EXPORTER_DOMAIN}`)"- "traefik.http.routers.sync-exporter-http.service=sync-exporter-backend"- "traefik.http.routers.sync-exporter-https.entrypoints=https"- "traefik.http.routers.sync-exporter-https.tls=true"- "traefik.http.routers.sync-exporter-https.rule=Host(`${DOCKER_EXPORTER_DOMAIN}`)"- "traefik.http.routers.sync-exporter-https.service=sync-exporter-backend"- "traefik.http.services.sync-exporter-backend.loadbalancer.server.scheme=http"- "traefik.http.services.sync-exporter-backend.loadbalancer.server.port=9093"networks:- traefiklogging:driver: "json-file"options:max-size: "1m"networks:traefik:external: true