尝试使用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ボタンをクリックして作成
很遗憾,无论从数据源中选择插件都没有反应。不要着急,可以从插件中找到并创建。
(已经创建过的项目可以从数据源进行编辑)

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

这个应该差不多可以了。
建议您参考mongodb-grafana的示例,根据需求进行面板设置。
最终
由于这是用于本地开发的,所以暂时到这里。
但是,如果要部署到生产环境,必须要确保安全性,可能需要通过某种方式限制对代理服务器的访问,或者稍微定制一下插件,以尽可能满足要求。
如果有人想要建立一个代理服务器的容器,可以参考一下这个问题。
请看以下信息。