美文网首页
grafana支持mongodb数据源

grafana支持mongodb数据源

作者: xyz098 | 来源:发表于2020-08-28 15:05 被阅读0次

资料

数据流

  • grafana ——> mongodb-grafana插件 ——> mongodb-proxy ——> mongodb
  • 一个mongdb-proxy对应一个mongodb

部署

  • 目录

    ├── control.sh
    ├── Dockerfile  (grafana)
    ├── mongodb-grafana
    └── mongodb-proxy
        ├── Dockerfile  (mongodb-proxy)
        └── mongodb-grafana
    
  • 下载

    git clone https://github.com/JamesOsgood/mongodb-grafana.git
    
  • Dockerfile(grafana)

    From grafana/grafana:6.5.0
    ADD mongodb-grafana /var/lib/grafan  plugins/mongodb-grafana
    
  • Dockerfile(mongodb-proxy)

    From node:14.8.0
    ADD ./mongodb-grafana /usr/localmongodb-grafana
    WORKDIR /usr/local/mongodb-grafana
    RUN npm install --registry=https:/registry.npm.taobao.org 
    EXPOSE 3333
    CMD ["npm","run","server"]
    
  • 安装 (control.sh)

    #!/bin/bash
    # date: 2020/08/29
    # description: grafana support mongodb   datasource
    # auth: vera
    
    function install_grafana(){
        # 3000
        docker pull grafana/grafana:6.5.0
        docker build -t grafana/grafana:6.5.1 .
        docker stop grafana
        docker rm grafana
        docker run -d --name grafana --net=host   grafana/grafana:6.5.1
    }
    
    
    function install_mongodb(){
        #27017
        docker pull mongo:4.2.9
        docker stop mongo
        docker rm mongo
        docker run --name mongo --net=host -d   mongo:4.2.9
    }
    
    function install_mongodb_proxy(){
        # 3333
        docker pull node:14.8.0
        cd mongodb-proxy && docker build -t   grafana/mongodb-proxy:0.0.1 .
        docker stop mongodb-proxy
        docker rm mongodb-proxy
        docker run -d --name mongodb-proxy   --net=host grafana/mongodb-proxy:0.0.1
    }
    
    install_grafana
    install_mongodb
    install_mongodb_proxy
    

验证

  • 创建mongodb数据

    # docker exec -it mongo /bin/bash
    root@9:/# mongodb
    show dbs;
    use test
    db.fruit.insert("name":"apple")
    db.fruit.insert({"name":"orange"})
    db.fruit.insert({"name":"banana"})
    db.fruit.insert({"name":"banana"})
    db.fruit.insert({"name":"banana"})
    db.fruit.insert({"name":"xigua","city":"xian","num":6,"ts":new Date()})
    db.fruit.insert({"name":"xigua","city":"xian","num":6,"ts":new Date()})
    db.fruit.insert({"name":"xigua","city":"xian","num":6,"ts":new Date()})
    db.fruit.insert({"name":"xigua","city":"xian","num":6,"ts":new Date()})
    
  • 聚合查询

    mongodb聚合查询有管道的概念,可以传递。

     # 根据name为维度分组,查询每组出现的次数
     db.fruit.aggregate([{ "$group": { _id: "$name", num:{ "$sum": 1}  }  }])
    
     # 匹配查询
     db.fruit.aggregate([  {  "$match":{"name":"xigua"}  } ,{ "$group": { _id: "$name", num:{ "$sum": 1}  } } ] )
    
  • grafana配置数据源

     HTTP的Access方式选择: Servcer(Dafault)
     mongoDB URL: mong0db://127.0.0.1:27017
     mongDB Database: test
    
  • grafana查询mongodb

    • 变量

      # 查询所有name类型
      db.fruit.aggregate([ { "$group": { "_id": "$name" }} ])
      
    • table格式数据

      # 适用于 mongodb存储时没有时间字段数据
      db.fruit.aggregate([
          {
              "$match": {
                  "name": "xigua"
              }
          },
          {
              "$project": {
                  "name": "$name",
                  "value": "$num",
                  "_id": 0
              }
          }
      ])
      
    • timeserie时间序列数据

      # $from 和 $to 变量是grafana的UI的时间序列范围
      # 适用于 mongodb存储有时间字段(ts)数据
      db.fruit.aggregate([
          {
              "$match": {
                  "name": "xigua",
                  "ts": {
                      "$gte": "$from",
                      "$lte": "$to"
                  }
              }
          },
          {
              "$sort": {
                  "ts": 1
              }
          },
          {
              "$project": {
                  "name": "value",
                  "value": "$num",
                  "_id": 0,
                  "ts": "$ts"
              }
          }
      ])
      

相关文章

网友评论

      本文标题:grafana支持mongodb数据源

      本文链接:https://www.haomeiwen.com/subject/abelsktx.html