尝试使用Grafana-MongoDB插件

首先

由于Enterprise版价格过高,无法购买官方的mongodb插件,所以尝试使用非官方插件时遇到了各种问题,这是一个备忘录。截至2022年2月28日的信息。

只需要将其作为开发环境暂时手动运行即可,因此没有进行自动构建或自动启动。

我主要做了三件事情。

    • unsigned pluginを読み込めるようにiniファイルに設定

 

    • datastore作成はpluginから選択して作成

 

    id/passを渡してくれなかったのでproxyサーバで書き換え

使用Docker搭建Grafana。

只需一种选项,以下是中文的释义:

按照您喜欢的方式。
对于我来说,我已经在我的开发环境中创建了MongoDB容器,所以我在docker-compose文件中添加了以下内容。

  grafana:
    image: grafana/grafana:8.4.2
    ports:
      - '13000:3000'
      - '3333:3333'
    environment:
      - 'GF_SECURITY_ADMIN_PASSWORD=xxxx'
    volumes:
      - ./grafana_data:/var/lib/grafana

安装插件

    • pluginsフォルダにmongodb-grafanaを格納

 

    grafanaのcontainer_nameを確認して接続し、コンテナ内で作業します。
host$ docker ps 
host$ docker exec -it -u 0 grafana /bin/bash

container-bash$ cd /var/lib/grafana/plugins/
container-bash$ wget https://github.com/JamesOsgood/mongodb-grafana/archive/refs/heads/master.zip
container-bash$ unzip master.zip
container-bash$ mv mongodb-grafana-master/ mongodb-grafana/
    • mongodb-grafanaに必要なモジュールをインストール

 

    指定されているnodeのバージョンが古い(6.10.0)ので、念の為、古いものに入れ替えました。気持ち新し目の8.17にしましたが、ここは依存モジュールなどが動くなら任意のなるべく新しいものでよさそうです。
container-bash$ cd /var/lib/grafana/plugins/mongodb-grafana/
container-bash$ apk add --update npm
container-bash$ npm install -g n
container-bash$ n 8.17.0
container-bash$ hash -r
container-bash$ npm install --save --legacy-peer-deps
container-bash$ npm audit fix --save --legacy-peer-deps
    grafana.iniを編集してallow_loading_unsigned_pluginsに追加
container-bash$ vi /etc/grafana/grafana.ini

# 下記の行をコメントアウトを消して、設定を追加する
allow_loading_unsigned_plugins = mongodb-grafana-datasource
    • このあたりでいったんGrafanaを再起動してpluginを読み込ませます

 

    docker-composeつかってるならdown & upでもOK。

在mongodb-grafana中启动mongodb-proxy服务器。

由于该插件通过代理服务器访问MongoDB,因此我正在启动它。
由于数据源没有提供包含id/pass的指定参数,所以我通过代理服务器强制修改了连接信息。
从安全角度来看,这种处理方式存在问题,因此在使用生产环境时需要注意。至少,在将此代理服务器用于外部公开的环境是不允许的。

    • /var/lib/grafana/plugins/mongodb-grafana/dist/server/config/default.jsonに下記のmongourlを追加

 

    user, password, mongodbhostは自分の環境のものを入れます。

如果在创建或操作面板时出现”command aggregate requires authentication”等错误提示,可能是因为在这里指定的身份验证信息不正确。
根据问题观察,似乎有很多人都在这里遇到了问题(我最初也是这么想的……认真传递了身份验证信息)。

{
    "server":
    {
      "mongoUrl": "mongodb://[user]:[password]@[mongodbhost]:27017",
      "port": 3333,
      "logRequests": false,
      "logQueries": false,
      "logTimings": false
    }
}
    /var/lib/grafana/plugins/mongodb-grafana/dist/server/mongodb-proxy.jsを下記のように編集します。
function runAggregateQuery( requestId, queryId, body, queryArgs, res, next )
{
  // MongoClient.connect(body.db.url, function(err, client) 
  MongoClient.connect( serverConfig.mongoUrl, function(err, client) 
  {

    proxyサーバを起動しておきます。

因为它是手动启动的,所以每次启动容器时都需要执行这个操作。如果想要自动启动,最好将容器分割如下所述。

host$ docker ps 
host$ docker exec -it -u 0 grafana /bin/bash

container-bash$ cd /var/lib/grafana/plugins/mongodb-grafana/dist/server
container-bash$ node mongodb-proxy.js

在Grafana中创建数据源。

在这里,您可以使用Grafana的初始用户登录,并在界面上进行操作。

    pluginsから選択してCreate a MongoDB data sourceボタンをクリックして作成

很遗憾,无论从数据源中选择插件都没有反应。不要着急,可以从插件中找到并创建。
(已经创建过的项目可以从数据源进行编辑)

スクリーンショット 2022-02-27 1.32.02.png
    datasourceを設定する

如果要在另一个容器中设置此代理服务器,请更改localhost:3333的配置。您需要在MongoDB详细信息中设置信息(虽然MongoDB URL将被前面提到的代理服务器重写)。

スクリーンショット 2022-02-28 10.59.57.png

这个应该差不多可以了。
建议您参考mongodb-grafana的示例,根据需求进行面板设置。

最终

由于这是用于本地开发的,所以暂时到这里。
但是,如果要部署到生产环境,必须要确保安全性,可能需要通过某种方式限制对代理服务器的访问,或者稍微定制一下插件,以尽可能满足要求。

如果有人想要建立一个代理服务器的容器,可以参考一下这个问题。

请看以下信息。

 

广告
将在 10 秒后关闭
bannerAds