mongo命令行免交互以及prometheus监控-偏运维

2020年8月19日 评论 167 views 2219字阅读7分23秒

前言

主要记录
- mongo如何接入prometheus
- 一些前置条件(开启权限、创建用户的知识)
- 使用命令行快速创建用户

启用权限验证

# 临时
mongo --auth

或者修改mongo.conf,最后一行添加

#启用权限访问
auth=true

重新启动mongodb, 启动方式不一定是这个,看你自己的了

net stop mongodb;
net start mongodb;

mongo 命令行交互与免交互

无密码登陆,如果设置了有密码登陆,那这种方式就登陆不进去,登陆进去也无法执行命令,如果链接的是数据库127.0.0.1:27017那么端口和ip可以省略

mongo [ip:port]
mongo [--host ip]  [--p port] #一个杠,两个杠都可以

有密码登陆,如果不设置数据库名,默认test数据库,必须具备test数据库访问权限,没有什么实际意义

mongo [-host ip] -port 27017 [dbname] -u "username" -p "password"

有密码登陆且指定有权访问的数据库,注意此用户必须具备该数据库访问权限,下面的例子指定只能访问xxx数据库

mongo -port 27017 -u "username" -p "password" --authenticationDatabase "xxx"
mongos> show dbs
xxx  0.015GB

使用命令行交互

# 创建一个只读用户,可以读取所有数据库,并具备admin数据库的集群管理权限
mongo -port xxx -u "username" -p "password" --authenticationDatabase "admin" --eval 'db.getSiblingDB("admin").createUser({user: "mongodb_exporter",pwd: "password",roles: [{
role: "clusterMonitor", db: "admin" },{ role: "read", db: "local" }]})'

# 查询一行记录,不指定数据库就是在test数据库里执行命令
# eval参数只能执行数据库操作命令,不能执行use db之类的
mongo [必须指定数据库] -port xxx -u "username" -p "password" --authenticationDatabase "admin" --eval "db.集合名称.findOne()"

使用命令行执行js脚本,大部分的mongo shell命令都可以在js文件中使用,load命令也不例外。

mongo xxx.js

prometheus监控

创建集群监控的只读用户,具备读取所有数据库的权限

db.getSiblingDB("admin").createUser({
    user: "mongodb_exporter",
    pwd: "password",
    roles: [
        { role: "clusterMonitor", db: "admin" },
        { role: "read", db: "local" }
    ]
})

监控集群,启动exporter

nohup ./mongodb_exporter-linux-amd64 --mongodb.uri "mongodb://mongodb_exporter:password@xxx.xxx.xxx.xxx:8888,xxx.xxx.xxx.xxx:8888,xxx.xxx.xxx.xxx:8888" &

prometheus 配置

- job_name: mongo_exporter
      static_configs:
      - targets:
        - 'xxx.xxx.xxx.xxx:9001'
        labels:
          service: mongo

导入模板

https://grafana.com/dashboards/2583

能创建哪些权限用户

创建不受限制的超级管理员

db.createUser({"user":"root","pwd":"root","roles":["root"]})

创建admin超级管理员

db.createUser({user: "admin", pwd: "admin",roles: [ { role: "userAdminAnyDatabase", db: "admin"}]})

创建一个业务数据库管理员用户
(只负责某一个或几个数据库的増查改删)

db.createUser({
    user:"user001",
    pwd:"123456",
    customData:{
        name:'jim',
        email:'jim@qq.com',
        age:18,
    },
    roles:[
        {role:"readWrite",db:"db001"},
        {role:"readWrite",db:"db002"},
        'read'// 对其他数据库有只读权限,对db001、db002是读写权限
    ]
})

Mongodb 数据库角色

1.数据库用户角色:read、readWrite;
2.数据库管理角色:dbAdmin、dbOwner、userAdmin;
3.集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4.备份恢复角色:backup、restore;
5.所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase
6.超级用户角色:root

weinxin
公众号
在号内与我交流,回复【资源】获取技术大礼包
小熊