如何在本地网络部署Prometheus用于IoT设备数据监控
本地网络部署Prometheus采集ESP8266温湿度指标方案
笔记本直接运行Prometheus的隐患
- 服务可用性完全绑定笔记本运行状态:你提到的关机场景必然会中断服务,除此之外笔记本休眠、系统更新强制重启、设备脱离本地网络,都会导致Prometheus停服,历史数据查询、温湿度异常告警等功能都会同步失效
- 资源冲突概率高:笔记本日常办公、运行其他软件时会抢占Prometheus的CPU、内存资源,容易出现指标采集丢点、查询延迟高等问题
- 环境依赖不稳定:本地系统的软件更新、运行库版本变动可能导致Prometheus运行异常,排查成本很高
- 数据丢失风险大:如果没有专门做定时备份,笔记本系统崩溃、硬盘损坏会直接丢失所有历史温湿度采集数据
容器化部署的适用性
容器化是提升服务可用时长的优选方案,尤其是搭配本地常年开机的设备(比如闲置树莓派、小主机、软路由)部署时,可以把服务可用性拉到99%以上,优势如下:
- 环境隔离:Prometheus的运行环境和宿主机系统完全 decouple,不会受宿主机软件更新、版本变动的影响
- 部署成本低:不需要手动处理依赖、配置系统服务,一行命令就能完成启动
- 迁移成本低:如果后续要更换宿主机,只要复制配置文件和数据目录就能无缝迁移
- 资源开销小:Docker容器本身额外占用极低,就算是性能一般的闲置ARM设备也能稳定运行
容器化部署Prometheus操作步骤
建议优先把Prometheus部署在本地网络内7*24小时开机的设备上,比部署在笔记本上可用性高非常多,操作流程如下:
第一步:安装Docker和Docker Compose
对应宿主机的系统版本完成安装后,执行docker -v和docker compose version验证安装成功即可。
第二步:编写Prometheus配置文件
在宿主机上新建工作目录,比如/opt/prometheus,在目录下新建prometheus.yml配置文件,参考内容:
global: scrape_interval: 15s # 采集间隔可以根据你ESP8266的上报频率自定义调整 scrape_configs: - job_name: 'esp8266_dht' static_configs: - targets: ['<你的ESP8266在本地网络的IP>:<端口>'] # 替换成你ESP8266的实际访问地址
第三步:编写docker-compose配置
同目录下新建docker-compose.yml文件,参考内容:
version: '3.8' services: prometheus: image: prom/prometheus:latest container_name: prometheus restart: always # 配置宿主机开机、服务异常时自动重启 ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - ./data:/prometheus # 把数据存在宿主机目录,避免容器销毁时丢失历史数据 command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.enable-lifecycle'
第四步:启动服务
在工作目录下执行docker compose up -d,等待启动完成后访问http://<宿主机本地IP>:9090就能打开Prometheus UI,在搜索栏输入你ESP8266输出的温湿度指标名就能查询采集数据。
额外可用性优化建议
- 给运行Prometheus的宿主机配置静态IP,避免DHCP地址变动导致采集失效、UI访问地址变动
- 定期备份
/opt/prometheus目录下的配置和数据文件 - 如果需要长期存储大量历史数据,可以给Prometheus配置远程写入到时序数据库
内容的提问来源于stack exchange,提问作者Dylan Powers
相关产品推荐
相关产品推荐

