赞
踩
最近项目上有对项目服务及中间件的监控需求,要做实现方案调研,总结一下自己的成果,目前业界主流可选的方案有:
国外开源:
Prometheus:Prometheus - Monitoring system & time series database
优点:使用exporter方式+主动拉取方式,采集灵活,覆盖面广,结合grafana能快速搭建上手,promql功能强大,自定义指标方便,对云环境支持很好
缺点:采用分布式部署,基于本地文件存储数据,数据统一采集不方便,采用配置文件配置较为繁琐,(ps也支持服务发现),promql学习成本较高
zabbix
优点:老牌监控框架、all-in-one 部署,使用MySQL存储数据,使用页面配置采集。推荐6.0以上版本,使用agent2
缺点:比较重,灵活性比较差,自定义指标实现难度高
grafana
开源的可视化框架,可以使用多种数据源,对Prometheus支持非常友好,也支持zabbix。可以很方便的集成到自己的前端项目中。
国内开源
夜莺 夜莺 - 快猫星云
优点:集成了Prometheus和zabbix的优点,可以通过页面配置监控告警还能all-in-one 部署。文档比较友好。(由于是后来才找到这个框架,所以没有深入研究)
本次我验证了(监控服务器,rabbitmq、nacos、redis、mysql、MongoDB,spring-boot,Nginx)等常用中间件的监控,留档以备后续查看。其他的基本都可以参照官网
Prometheus支持两种搭建方式,二进制安装和docker安装,基本所有的组件都提供了这两种安装方式。二进制方式可以将组件注册为Linux系统服务,使用systemctl来管理
主要安装:Prometheus+node_exporter(服务器节点监控)+alertmanager+grafana,适合在离线没有网络的环境。
网上有现成的仓库 prometheus: 二进制安装prometheus
- 项目使用方法
- 1.将项目下载到自己的Linux服务器
- https://gitee.com/lengedcloud/prometheus.git
- 进入目录 cd prometheus
- 2.将服务移动到系统服务目录
- mv *.service /etc/systemd/system/
- 3.创建一个普通用户
- useradd -M -s /usr/sbin/nologin prometheus -M不创建家目录,不允许登录
- 4.启动服务,并设置开机启动
- systemctl enable alertmanager.service --now
- systemctl enable grafana-server.service --now
- systemctl enable node_exporter.service --now
- systemctl enable prometheus.service --now
- 5.检查服务状态
- systemctl status alertmanager.service
- systemctl status grafana-server.service
- systemctl status node_exporter.service
- systemctl status prometheus.service
- 6.访问测试
- alertmanager.service 告警 端口 ip:9093/metrics
- grafana-server 数据展示 端口 ip:3000 账号/密码 admin/admin
- node_exporter 数据采集 ip:9100/metrics
- prometheus 数据存储 端口 ip:9090
主要安装:Prometheus+cadvsior(docker监控)+node_exporter++alertmanager+grafana
此处可以下载打包 docker-compose: docker-compose仓库
docker-compose.yaml文件如下
- version: '3.3'
-
- volumes:
- prometheus_data: {}
- grafana_data: {}
-
- networks:
- monitoring:
- driver: bridge
-
- services:
- prometheus:
- image: prom/prometheus:v2.37.6
- container_name: prometheus
- restart: always
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - ./prometheus/:/etc/prometheus/
- - prometheus_data:/prometheus
- command:
- - '--config.file=/etc/prometheus/prometheus.yml'
- - '--storage.tsdb.path=/prometheus'
- - '--web.console.libraries=/usr/share/prometheus/console_libraries'
- - '--web.console.templates=/usr/share/prometheus/consoles'
- #热加载配置
- - '--web.enable-lifecycle'
- #api配置
- #- '--web.enable-admin-api'
- #历史数据最大保留时间,默认15天
- - '--storage.tsdb.retention.time=30d'
- networks:
- - monitoring
- links:
- - alertmanager
- - cadvisor
- - node_exporter
- expose:
- - '9090'
- ports:
- - 9090:9090
- depends_on:
- - cadvisor
-
- alertmanager:
- image: prom/alertmanager:v0.25.0
- container_name: alertmanager
- restart: always
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - ./alertmanager/:/etc/alertmanager/
- command:
- - '--config.file=/etc/alertmanager/config.yml'
- - '--storage.path=/alertmanager'
- networks:
- - monitoring
- expose:
- - '9093'
- ports:
- - 9093:9093
-
- cadvisor:
- image: google/cadvisor:latest
- container_name: cadvisor
- restart: always
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - /:/rootfs:ro
- - /var/run:/var/run:rw
- - /sys:/sys:ro
- - /var/lib/docker/:/var/lib/docker:ro
- networks:
- - monitoring
- expose:
- - '8080'
- ports:
- - '8080:8080'
-
- node_exporter:
- image: prom/node-exporter:v1.5.0
- container_name: node-exporter
- restart: always
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - /proc:/host/proc:ro
- - /sys:/host/sys:ro
- - /:/rootfs:ro
- command:
- - '--path.procfs=/host/proc'
- - '--path.sysfs=/host/sys'
- - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker)($$|/)'
- networks:
- - monitoring
- ports:
- - '9100:9100'
-
- grafana:
- image: grafana/grafana:9.4.3
- container_name: grafana
- restart: always
- volumes:
- - /etc/localtime:/etc/localtime:ro
- - grafana_data:/var/lib/grafana
- - ./grafana/provisioning/:/etc/grafana/provisioning/
- env_file:
- - ./grafana/config.monitoring
- networks:
- - monitoring
- links:
- - prometheus
- ports:
- - 3000:3000
- depends_on:
- - prometheus
使用docker-compose 一键安装
docker-compose up -d 安装
安装完成后测试 同二进制安装测试相同
Prometheus页面,可以从status>target目录下查看当前的监控任务状态,点击endpoint,确认每个target路径有数据即为正常。
grafana页面
打开 vim prometheus.yaml,修改ip或服务名为自己的宿主机ip
Prometheus重新热加载配置 很常用
curl -X POST http://localhost:9090/-/reload
grafana提供了大量配置模板可以快速生成监控
给grafana配置Prometheus数据源
填写信息,可以测试连接一下,docker版要写宿主机的ip,http一定要加
选择数据源,模板可以按照自己的需要进行修改,有些指标名称在不用版本的Prometheus库中可能已经被替换或者更新,实际使用时要进行相应的更改。
点击要使用的模板,获取模板id或者json文件,此处还有Prometheus中的配置
在grafana中导入
输入ID,并导入
选择数据源,修改面板名称
查看效果
2.配置模板-docker服务监控
选择想要的模板
复制id 10619,重复上面的步骤导入
3.配置模板-alertmanager告警监控,告警也是Prometheus的核心功能。
选择模板id,9578
重复上面的步骤导入
exp告警规则可以通过使用promql定义的非常丰富。
告警配置文件在,prometheus挂载出来的alert.yml文件中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。