docker-compose搭建Prometheus+Grafana监控系统 · SpringCloud微服务实战 · 看云
导航
本节主要通过docker-compose的方式搭建Prometheus+Grafana监控系统,包括Docker容器监控、MySQL监控、Redis监控,应用监控后面再补充
主要的组件及作用如下:
- Prometheus:获取、存储监控数据,供第三方查询;
- Grafana:提供Web页面,从Prometheus获取监控数据可视化展示;
- alertmanager:定义预警规则,发送预警信息;
- node_exporter:收集微服务端点监控数据;
- mysql_exporter:收集MySQL数据库监控数据;
- redis_exporter:收集Redis监控数据;
- cadvisor:收集Docker容器监控数据。
1. 先安装 docker,docker-compose
这里不做介绍了,前面章节已经说明
2. 添加配置文件
先建一个文件夹,可根据需要自己设置,笔者设置在根目录
mkdir fwcloud
3. 添加prometheus.yml配置文件
这里主要对Prometheus、Grafana、alertmanager、node_exporter、mysql_exporter、redis_exporter、cadvisor信息的采集,默认全局每15秒采集一次,超时时间默认是10秒。
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['127.0.0.1:9091']
labels:
instance: 'node_exporter'
- job_name: 'redis_exporter'
static_configs:
- targets: ['127.0.0.1:9092']
labels:
instance: 'redis_exporter'
- job_name: 'mysql_exporter'
static_configs:
- targets: ['127.0.0.1:9093']
labels:
instance: 'mysql_exporter'
- job_name: 'cadvisor'
static_configs:
- targets: ['127.0.0.1:9094']
labels:
instance: 'cadvisor'
rule_files: #配置规则的数组
- '/fwcloud/rules/memory_over.yml'
- '/fwcloud/rules/server_down.yml'
alerting:
alertmanagers:
- static_configs:
- targets: ["127.0.0.1:9095"]
4. 添加邮件告警配置文件
告警邮件配置,这里笔者使用的是163服务器,注意配置的邮箱密码不是邮箱的登录密码,而是需要配置客户端授权码。
global:
smtp_smarthost: 'smtp.163.com:25' #163服务器
smtp_from: 'yisutest@163.com' #发邮件的邮箱
smtp_auth_username: '用户名'
smtp_auth_password: '密码'
smtp_require_tls: false #不进行tls验证
route:
group_by: ['alertname'] #告警分组名称
group_wait: 10s #等待时间,这段时间内的警告会合并后发送
group_interval: 5m #分组尝试再次发送告警的时间间隔 5分钟
repeat_interval: 5m #重复预警时间 5分钟
receiver: 'default-receiver' #接收者
receivers:
- name: 'default-receiver'
email_configs:
- to: 'xxxxxx@qq.com' #收邮件的邮箱
send_resolved: true
5. 添加报警规则
添加一个server_down.yml为 prometheus targets 监控
vim server_down.yml
配置当某个节点宕机(up==0表示宕机,1表示正常运行)超过20秒后,则触发监控
groups:
- name: server_down
rules:
- alert: InstanceDown
expr: up == 0
for: 20s
labels:
user: xuyisu
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 20 s."
配置内存溢出监控
添加一个memory_over.yml为 prometheus targets 监控
当某个节点的内存使用率大于80%,并且持续时间大于20秒后,触发监控预警
groups:
- name: memory_over
rules:
- alert: NodeMemoryUsage
expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 80
for: 20s
labels:
user: xuyisu
annotations:
summary: "{{$labels.instance}}: High Memory usage detected"
description: "{{$labels.instance}}: Memory usage is above 80% (current value is:{{ $value }})"
根据业务需要还可以配置更多的监控内容
同时预警不止邮箱通知,还可以使用企业微信、WebHook等。
6. 编写docker-compose
version: '3'
services:
mysql:
image: mysql:5.7.24
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
ports:
- 3306:3306
volumes:
- /fwcloud/mysql/data:/var/lib/mysql #挂载 MySQL数据
redis:
image: redis:4.0.14
container_name: redis
command: redis-server /usr/local/etc/redis/redis.conf --appendonly yes
volumes:
- /fwcloud/redis/data:/data #挂载 Redis数据
- /fwcloud/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf #挂载 Redis配置
ports:
- 6379:6379
prometheus:
image: prom/prometheus
container_name: prometheus
volumes:
- /fwcloud/prometheus/:/etc/prometheus/
ports:
- 9090:9090
restart: on-failure
node_exporter:
image: prom/node-exporter
container_name: node_exporter
ports:
- 9091:9100
redis_exporter:
image: oliver006/redis_exporter
container_name: redis_exporter
command:
- '--redis.addr=redis://127.0.0.1:6379'
ports:
- 9092:9121
restart: on-failure
mysql_exporter:
image: prom/mysqld-exporter
container_name: mysql_exporter
environment:
- DATA_SOURCE_NAME=root:123456@(127.0.0.1:3306)/
ports:
- 9093:9104
cadvisor:
image: google/cadvisor
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- 9094:8080
alertmanager:
image: prom/alertmanager
container_name: alertmanager
volumes:
- /fwcloud/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
ports:
- 9095:9093
grafana:
image: grafana/grafana
container_name: grafana
ports:
- 3000:3000
最终的配置目录
进入 prometheus 目录 执行docker-compose up -d启动这些容器
然后通过docker ps -a,可以看到启动状态
prometheus targets界面如下
7. 防火墙配置
7.1 关闭selinux
直接输入下面命令回车临时关闭
setenforce 0
或者输入以下命令永久关闭,将disabled打开
vim /etc/sysconfig/selinux
7.2 防火墙端口放开
对以下端口放开
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9090 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9091 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9093 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9094 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9095 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT
如果用的一些云服务器,需要将安全组的端口的方案。
到此安装成功
8. Grafana使用
浏览器输入http://127.0.0.1:3000/ 用户名密码为admin/admin,首次登录需要修改密码
8.1 配置数据源
登录进来后,默认会进入到这个页面
数据源选择Prometheus
填写自己服务器的Prometheus应用的Ip + Port,保存即可
8.2 导入监控的Dashboard
导入的文件内容监控面板已提交到群文件中
8.2.1 Docker 面板
可以直接配置监控Json,也可以导入别人已经配置好的文件
一次导入下面3个配置文件
Redis 监控Dashboard
Docker 容器监控Dashboard
MySQL 监控Dashboard
以上Prometheus+Grafana监控系统 搭建完毕














