1.选型对比
最近项目上有对项目服务及中间件的监控需求,要做实现方案调研,总结一下自己的成果,目前业界主流可选的方案有:
国外开源:
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)等常用中间件的监控,留档以备后续查看。其他的基本都可以参照官网
2. Prometheus基础环境搭建
Prometheus支持两种搭建方式,二进制安装和docker安装,基本所有的组件都提供了这两种安装方式。二进制方式可以将组件注册为Linux系统服务,使用systemctl来管理
2.1 二进制方式安装
主要安装: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
2.2 docker方式安装
主要安装: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页面
2.3 配置Prometheus监控
打开 vim prometheus.yaml,修改ip或服务名为自己的宿主机ip
Prometheus重新热加载配置 很常用
curl -X POST http://localhost:9090/-/reload
2.4 配置grafana监控页面
grafana提供了大量配置模板可以快速生成监控
给grafana配置Prometheus数据源
填写信息,可以测试连接一下,docker版要写宿主机的ip,http一定要加
1.配置模板-服务器监控
选择数据源,模板可以按照自己的需要进行修改,有些指标名称在不用版本的Prometheus库中可能已经被替换或者更新,实际使用时要进行相应的更改。
点击要使用的模板,获取模板id或者json文件,此处还有Prometheus中的配置
在grafana中导入
输入ID,并导入
选择数据源,修改面板名称
查看效果
2.配置模板-docker服务监控
选择想要的模板
复制id 10619,重复上面的步骤导入
3.配置模板-alertmanager告警监控,告警也是Prometheus的核心功能。
选择模板id,9578
重复上面的步骤导入
exp告警规则可以通过使用promql定义的非常丰富。
告警配置文件在,prometheus挂载出来的alert.yml文件中