prometheus监控栈监控redis,Prometheus监控栈:Prometheus+Grafana+Alertmanager
一、环境介绍
主机清单
| 职责 | ip地址 | 备注 |
|---|---|---|
| Prometheus服务器 | 192.168.92.11 | docker模式的prometheus |
| 待监控Linux(test) | 192.168.92.12 | 待准备组件:redis6版本、mongodb4.2.5版本 |
redis概述
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API
redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多包括string、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序,在部 分场合可以对关系数据库起到很好的补充作用
mongodb概述(这里没讲到)
MongoDB是一个基于分布式文件存储[1]的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似ison的bson格式,因此可以存储比较复杂的数据类型。Mong0最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
二、prometheus监控Redis
docker安装(略)
docker-compose安装
#从github中拉取下载docker-compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-Linux-x86_64" -o /usr/local/bin/docker-compose
#设置文件具备执行权限
sudo chmod +x /usr/local/bin/docker-compose
#查看已安装的版本,如果能正常输出版本号说明安装compose完毕
docker-compose -v
2.1待监控Linux安装Redis
创建docker-compose目录
#test虚拟机(第二台虚拟机)
mkdir /data/docker-compose -p
cd /data/docker-compose
创建docker-compose.yaml
version: '3.3' #指定 Docker Compose 文件格式版本为 3.3
services: #所有服务的根节点
redis: #定义一个名为 "redis" 的服务
image: redis:6 #使用 Redis 官方镜像,版本 6
container_name: redis #设置容器名称(而非自动生成的随机名称)
restart: always #容器退出时总是重启
volumes:
- /data/redis/data:/data #将宿主机目录挂载到容器内部,格式:宿主机路径:容器内路径
command: redis-server --maxmemory 512mb
ports:
- "6379:6379"
运行docker-compose
docker-compose up -d
查看docker 的信息
docker images
docker ps -a
2.2 待监控Linux安装redis_exporter
二进制安装或者docker安装(或者docker-compose安装),此处选用docker-compose安装修改docker-compose.yaml文件
cd /data/docker-compose
vi docker-compose.yaml
yaml文件增加redis_exporter组件
version: '3.3'
services:
redis_exporter:
image: oliver006/redis_exporter # 使用最新版
container_name: redis_exporter
restart: always
environment:
- REDIS_ADDR=192.168.92.12:6379 # 连接本地的Redis容器
- REDIS_PASSWORD= # 无密码
ports:
- "9121:9121"
depends_on:
- redis # 确保redis先启动,如果 Redis 没启动,Redis Exporter 会启动失败或报连接错误
启动docker-compose.yaml
docker-compose up -d
访问redis_exporter
http:/192.168.92.12:9121/metrics
2.3 prometheus服务器添加redis_exporter的地址
192.168.92.11的prometheus上,修改prometheus的配置文件
#进入docker-prometheus目录
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加待监控的redis_exporter
- job_name: 'redis-exporter'
static_configs:
- targets: ['192.168.92.12:9121']
labels:
instance: 'redis服务器'
prometheus的热加载:
在prometheus中执行
curl -X POST http://localhost:9090/-/reload
刷新访问http://192.168.92.11:9090/targets?search=,确认新监控的redis服务器是否生效
down的http://192.168.92.12:9100/metrics是上一个虚拟机的node-exporter,因为我第二台虚拟机是测试服务器,拍摄了一个just set static ip 的快照,第三个实验我已经重置了just set static ip

2.4 redis服务器指标查询
redis_up 服务是否在线
redis_uptime_in_seconds 运行时长,单位s
rate(redis_cpu_sys_seconds_total[1m])+rate(redis_cpu_user_seconds_total[1m]) CPU使用时间
redis_memory_used_bytes 占用内存量
redis_memory_max_bytes 限制的最大内存
delta(redis_net_input_bytes_total[1m]) 网络接收的bytes
delta(redis_net_output_bytes_total[1m]) 网络发送的bytes
redis_connected_clients 客户端连接数
redis_connected_clients/redis_config_maxclients 连接数使用率
redis_rejected_connections_total 拒绝的客户端连接数
redis_connected_slaves slave连接数
2.5 grafana中对redis进行监控
copy id to clipboard->grafana的dashboards中lmport dashboard
https://grafana.com/grafana/dashboards
选一个redis的面板,复制id

grafana里导入这个面板,输入面板id导入

继续导入

然后就可以了,完成了grafana中对redis进行监控

三、prometheus监控mongodb
docker安装(略)
docker-compose安装(略)
3.1待监控Linux安装mongodb
test虚拟机,创建docker-compose目录
mkdir /data/docker-compose -p
cd /data/docker-compose
修改docker-compose.yaml,增加mongodb配置节
version: '3.3' #指定 Docker Compose 文件格式版本为 3.3
services:
# mongodb配置节
mongo: #定义一个名为 "mongo" 的服务
image: mongo:4.2.5 #使用 MongoDB 官方镜像,版本 4.2.5
container_name: mongo #将容器命名为 "mongo"
restart: always #容器退出时总是自动重启
volumes:
- /data/mongo/db:/data/db #将宿主机的 /data/mongo/db 目录挂载到容器的 /data/db
command: ["mongod", "--auth"] #--auth:启用 MongoDB 的认证功能,需要用户名密码才能访问数据库
ports: #格式:宿主机端口:容器端口
- "27017:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root #初始化 root 用户名
MONGO_INITDB_ROOT_PASSWORD: "123456" #初始化 root 密码
运行docker-compose up -d的命令,观察mongodb的程序是否成功运行
3.2待监控Linux安装monogodb_exporter(monogodb的监控器)
3.2.1 创建监控用户
test机器上,登录MongoDB创建监控用户,权限为"readAnyDatabase",如果是cluster环境,需要有"clusterMonitor"
登录MongoDB
docker exec -it mongo mongo admin
创建监控用户
> db.auth('root','123456')
1
> db.createUser({
... user: 'exporter',
... pwd: 'password',
... roles: [
... { role: 'readAnyDatabase', db: 'admin' },
... { role: 'clusterMonitor', db: 'admin' }
... ]
... })
#提示创建成功
#测试 使用上面创建的用户信息进行连接
> db.auth('exporter','password')
1
#表示成功
> exit
3.2.2 安装monogodb exporter
test机器上,编辑/data/docker-compose/docker-compose.yaml文件
version: '3.3' #指定 Docker Compose 文件格式版本为 3.3
services:
mongodb_exporter: #定义一个名为 "mongodb_exporter" 的服务,专门用于从 MongoDB 收集监控指标
image: percona/mongodb_exporter:0.30 # 使用官方认证的镜像(Percona 维护)
container_name: mongodb_exporter #将容器命名为 "mongodb_exporter"
restart: always #容器退出时总是自动重启
environment:
MONGODB_URI: "mongodb://exporter:password@192.168.92.12:27017/admin?ssl=false"
ports: #格式:宿主机端口:容器端口
- "9216:9216"
宿主机上访问mongodb_exporter的metrics
http://192.168.92.12:9216/metrics
3.3 prometheus服务器添加monogodb_exporter的地址
192.168.92.11的prometheus上,修改prometheus的配置文件
#进入docker-prometheus目录
cd /data/docker-prometheus
#修改prometheus.yml
vi prometheus/prometheus.yml
添加待监控的monogodb_exporter
- job_name: 'mongodb-exporter'
static_configs:
- targets: ['192.168.92.12:9216']
labels:
instance: 'mongodb服务器'
prometheus的热加载:
在prometheus中执行
curl -X POST http://localhost:9090/-/reload
刷新访问http://192.168.92.11:9090/targets?search=,确认新监控的mongodb服务器是否生效

3.4 mongodb服务器指标查询
1. 连接数
mongodb_ss_connections{conn_type="available"} - 可用的连接数
mongodb_ss_connections{conn_type="current"} - 当前客户端连接数
2. 内存
mongodb_ss_mem_virtual - 虚拟内存大小
mongodb_ss_mem_resident - 常驻内存大小
3. 服务器状态
mongodb_up - 服务器是否在线 (值为1在线,0离线)
mongodb_ss_ok{cl_id="", cl_role="current", rs_state=""} - 服务器是否正常运行
mongodb_ss_uptime - 服务器的运行时长,单位:秒
4. 主机信息
mongodb_sys_cpu_num_cpus - 主机的CPU核数
5. 集合(collection)统计
mongodb_collstats_storageStats_count{database="xx", collection="xx"} - collection中的文档总数
mongodb_collstats_storageStats_size{database="xx", collection="xx"} - collection全部文档的体积,单位:bytes
mongodb_collstats_storageStats_storageSize{database="xx", collection="xx"} - collection全部文档占用的磁盘空间
delta(mongodb_collstats_latencyStats_reads_ops[1m]) - collection 1分钟内的读操作数
delta(mongodb_collstats_latencyStats_reads_latency[1m]) - collection 1分钟内的读操作延迟
delta(mongodb_collstats_latencyStats_writes_ops[1m]) - collection 1分钟内的写操作数
delta(mongodb_collstats_latencyStats_writes_latency[1m]) - collection 1分钟内的写操作延迟
3.5 grafana中对mongodb进行监控
copy id to clipboard->grafana的dashboards中Import dashboard
https://grafana.com/grafana/dashboards/12079-mongodb/


