Grafana: [機能リクエスト]現在のユーザーをテンプレート変数として追加

作成日 2016年05月05日  ·  45コメント  ·  ソース: grafana/grafana

メールアドレスかユーザー名かに関係なく、influxdbバックエンドに対するクエリで「現在のgrafanaユーザー」の詳細を使用する方法はありますか?

要件:私は多くの(おそらく数千人の)ユーザーの個人データを保存しています。 私の現在の実装の選択肢は、単一のinfluxdbデータベースと、各測定値が属するユーザーを識別するためのタグが付いた単一の測定値です。 メール、ユーザー名、またはそのタグの実際のユーザーIDとして機能するその他のものを自由に使用できます。

理想的には、バックエンドが常にその特定のユーザーに関連するデータのみを返すように、grafanaに「whereuser = fred」のような句を挿入させる必要があります。

セキュリティ:セキュリティの危険性を理解しており、知識のある+悪意のあるユーザーはhttpツールを使用して他のユーザーのデータを調査できることを理解しています。 ただし、これに対するチェックを、grafanaのリバースプロキシとして機能するnginxフロントエンドに追加する予定です。 私の計画では、nginxはGET / api / datasources / proxy /:datasourceId / *への着信API呼び出しを検査し、現在ログインしているユーザーと一致するwhere句が含まれていることを確認します。 ケーキのように聞こえます:)

aredashboartemplating help wanted prioritnice-to-have typfeature-request

最も参考になるコメント

それでも組み込み変数として持っていればいいのですが

全てのコメント45件

現時点ではそれは不可能です。

grafanaバックエンドへの "/ api / datasources / proxy /:datasourceId / *" API呼び出しをインターセプトし、where句を挿入するリバースプロキシを使用して、これを回避することに成功しました。 grafanaの素晴らしい認証プロキシの振る舞いに関連して、私は今この機能を必要としません。 実際、Torkeloが以前に述べたセキュリティに関する見解のいくつかと、バックエンドデータベースによるユーザーレベルの強制の欠如に基づいて、この動作はおそらく現時点ではGrafanaに属していないように感じます。

@abraaeこの機能をどのように実装するか詳しく説明していただけますか?

@abraae +1
あなたがしたことを説明できますか?

申し訳ありませんが、私がしたことを文書化する時間がありませんが、記憶から:

  • grafanaサーバーの前でリバースプロキシとしてnginxを使用します。つまり、grafanaサーバーへのすべての着信トラフィックはnginxを通過します。
  • nginxconfを設定します。 / api / datasources / proxy /:datasourceId / *への呼び出しをキャプチャします
  • それらを渡す代わりに、nginxを使用して書き換えてwhere句を追加します

したがって、基本的には、グラファナバックエンドに戻るすべてのAPI呼び出しに常に追加のwhere句を強制することです。

それをメモリから機能させるために私がしなければならなかったことがたくさんありました:)申し訳ありませんがこれ以上の助けにはなりません。

    -

@abraaeThxあなたの答え。
nginx.confで何をしたかを確認することは可能ですか?

確かに、ここにnginx.confがあります。

[間違ったファイルをおっと-以下を参照]

/ api / datasources / proxy /:datasourceId / *をどのようにキャプチャするかがファイルに表示されません
あなたは何をした ? 書き換えルールはどこにありますか? :-)

申し訳ありませんが、ファイルが間違っています。これを試してください: https

それでも組み込み変数として持っていればいいのですが

クエリの変数としてユーザー名を取得することは実装されていますか?

この機能とその理由も次のようにしたいと思います。

ITSMツールからの要求を一覧表示するダッシュボードがあり、ログインしたユーザーに割り当てられた要求のみをグラフに表示したいとします。
ログインしたユーザー名を指す変数をダッシュ​​ボードに設定する機能は、私が働いている会社(International BIG Company)の問題を解決します。

別の例は、ログインしたユーザー名を使用してそこの部門にアクセスし、それを使用してそこの部門に関連するデータのみを表示することです。

ログインしたユーザーを指すダッシュボードで使用するグローバル変数を追加して、使用できるようにするのはそれほど難しいことではありません。

まあ言ってみれば:
$ Grafana.User.Email = [email protected]
$ Grafana.User.Name =ガンダルフ
$ Grafana.User.Surname = TheWize
$ Grafana.User.Username = GDog

これにより、Grafanaに関する多くの問題や制限が解決されるため、これを実装することを検討することを強くお勧めします。

これに関するニュースはありますか?

これに関する更新はありますか?

また、この機能は非常に便利だと思います。

私も本当にこの機能のATMが必要です。 それぞれのユーザーデータのみを表示する財務情報を含むユーザー固有のダッシュボードの展開に取り組んでいます。 この目的のために同じダッシュボードのコピーを25個作成することは、不必要に面倒だと感じます。

+1

+1

この値を使用して変数へのアクセスを制限したい(承認)
これに最適なソリューションです

+1
ユースケースは、1人のユーザーが自分の部門の情報しか見ることができないというものです。
部門ごとに新しいコピーダッシュボードを作成する代わりに、ACLとして使用できます。

+1

こんにちは。認証コードフロー[1]を使用してGrafanaをOIDCIdentityプロバイダーと統合し、プラットフォームによって提供されるさまざまなUI間にSSOを設定したいと思います。 主な要件として、マルチテナンシーを保証する必要があるため、最善の解決策は、JWTのIdPによって返されるユーザークレームの1つを、データベースからデータを取得するためにgrafanaが使用するクエリパラメーターとして使用することです。ログに記録されたユーザーが属するtenantIdを含むクレーム。

[1] https://grafana.com/docs/auth/generic-oauth/

誰かが同様の何かを実装したか、それを行うための提案がありますか?

前もって感謝します

+1

私の特定のユースケースは、ログインしたユーザーに応じて異なるフィルタリング(Prometheusラベル値)を適用するテンプレート変数を作成することです。

つまり、テンプレート変数の「正規表現」フィールドの内容は動的であり、ログインしているユーザーに依存する可能性があります。

これを実現するために、Grafanaの各ユーザーは、ユーザーの作成時に管理者によって設定されるいくつかのオプションのメタデータフィールドを持つことができます。 これらのオプションのメタデータフィールドは、テンプレート変数の「regex」フィールドから参照できます。

これにより、値の設定が上位レベルの管理者によって制御されるこの「動的」フィルタリングを適用できるようになります。

どうもありがとう!

+1

$__currentUserEmailは素晴らしいでしょう。

+1

+1

+1大学のユーザーがユーザー名に基づいてWiFiとVPNの統計を確認できるように、ダッシュボードを作成したいと思います。 ヘルプデスクに電話する前に、接続のトラブルシューティングに役立つ可能性があります。

+1

進歩がないように私には思えます:(それは非常に役に立ちます。

++

こんにちは!

誰かが@abraaeコードでこのソリューションを実装することに成功しましたか?
grafana-azure-data-explorer(Kusto DB)で使おうとしています

ありがとう!

+1

こんにちは、

私の回避策はSimpleJSONデータソース(https://github.com/grafana/simple-json-datasource)に基づいています

主なアイデアは、X-Grafana-Userヘッダーを有効にし、DSから返して、テンプレート変数にデータを入力することです。

実装: https

@rlklaser
または、 .warファイルを共有できますか?
これはExpressJSでは機能しません(((

app.get('/query', function (req, res) {
  res.status(200);
  res.json({ username: req.header('X-Grafana-User') })
});

app.get('/search', function (req, res) {
  res.status(200);
  res.json({ username: req.header('X-Grafana-User') })
});

https://github.com/simPod/grafana-json-datasourceをDSとして使用したい

@baurは、

[データプロキシ]

ロギング= true
send_user_header = true

このリクエストは2年前に作成されたもので、更新はありません。 これは私を含む多くの人々にとって非常に便利なツールになると思います。

これに関する更新はありますか?

SimpleJsonGRAFANAで/ api / user / teamの結果を取得する方法と、変数で「name」の値を取得するためのクエリは何ですか?
https://www.logiserv.re/api/user/teamsでのGrafanahttpapi結果の例

パーソナライズされたダッシュボードにもこの機能が必要です

+1

テンプレートが__orgのグローバル変数サポートを追加したので、これに関する更新はありますか? https://github.com/grafana/grafana/pull/21790

__user変数を追加すると、同じメカニズムが使用されるようです。

    templateSrv.setGlobalVariable('__user', {
      value: {
        name: contextSrv.user.login,
        id: contextSrv.user.id,
        toString: function() {
          return this.id;
        },
      },
    });

+ + 1
Grafana Dev Team、
これは非常に便利な機能であり、データ認証ジョブを非常に簡単にします。複数のデータソースとの接続を含む大規模なGrafanaベースのレポートサービスを評価し、実装中です。
この特定の機能は、マルチテナント展開のデータセキュリティにとって非常に重要です。

++ 1、こんにちはGrafana開発チーム、
これは私たちにとって非常に便利な機能です。特定のクエリのユーザーに基づいてデータアクセス制御を実行したいのですが、ユーザーが異なればスコープも異なります。

Grafana Dev Team、非常に便利な機能をありがとうございました!!!

ダッシュボード変数定義内のクエリで使用すると、変数が機能しないようです。

このページは役に立ちましたか?
0 / 5 - 0 評価