Grafana: [Запрос функции] Добавить текущего пользователя в качестве переменной шаблона

Созданный на 5 мая 2016  ·  45Комментарии  ·  Источник: grafana/grafana

Есть ли способ использовать сведения о «текущем пользователе grafana» в запросе к серверной части InfxDB, будь то его адрес электронной почты или имя пользователя?

Требование: я храню личные данные многих (возможно, тысяч) пользователей. Мой текущий выбор реализации - это одна база данных Influxdb и одно измерение с тегом для идентификации пользователя, которому принадлежит каждое измерение. У меня есть свобода использовать электронную почту, имя пользователя или что-либо еще, что работает как фактическое удостоверение пользователя в этом теге.

В идеале мне нужно было бы как-то добавить в grafana предложение типа «where user = fred», чтобы серверная часть всегда возвращала только данные, относящиеся к этому конкретному пользователю.

Безопасность: я понимаю уязвимость безопасности, и что любой знающий + злонамеренный пользователь сможет использовать инструменты http для проверки данных других пользователей. Однако я намерен добавить проверку для этого в интерфейсе nginx, который действует как обратный прокси для grafana. Мой план заключается в том, что nginx будет проверять входящие вызовы API к GET / api / datasources / proxy /: datasourceId / * и проверять, содержат ли они предложение where, которое соответствует текущему авторизованному пользователю. Звучит проще простого :)

aredashboartemplating help wanted prioritnice-to-have typfeature-request

Самый полезный комментарий

Было бы неплохо иметь его как встроенную переменную

Все 45 Комментарий

На данный момент это невозможно.

Я успешно справился с этим с помощью обратного прокси, который перехватывает вызовы API "/ api / datasources / proxy /: datasourceId / *" в серверной части Grafana и вводит предложение where. В сочетании с потрясающим поведением прокси-сервера grafana мне теперь не нужна эта функция. Фактически, основываясь на некоторых из ранее заявленных взглядов Торкело на безопасность и на недостаточном обеспечении соблюдения пользовательского уровня серверными базами данных, я считаю, что такое поведение, вероятно, в настоящее время не принадлежит Grafana.

@abraae Не могли бы вы рассказать, как вы реализуете эту функцию?

@abraae +1
не могли бы вы объяснить, что вы сделали?

Извините, у меня нет времени задокументировать то, что я сделал, кроме как по памяти:

  • использовать nginx в качестве обратного прокси перед сервером grafana, т.е. весь входящий трафик на сервер grafana проходит через nginx
  • настроить nginx conf. для захвата вызовов к / api / datasources / proxy /: datasourceId / *
  • вместо того, чтобы передавать их, вместо этого перепишите, используя nginx, чтобы добавить предложение where

Таким образом, в основном то, что вы делаете, - это всегда принудительное добавление дополнительного предложения where во все вызовы API, которые возвращаются в серверную часть графаны.

Мне пришлось многое сделать, чтобы заставить его работать по памяти :) Извините, ничем не могу больше помочь.

    -

@abraae Спасибо за ответ.
Можно ли увидеть, что вы сделали, в nginx.conf?

Конечно, это nginx.conf.

[к сожалению, неправильный файл - см. ниже]

Я не вижу в вашем файле, как вы захватываете / api / datasources / proxy /: datasourceId / *
Что ты сделал ? Где твое правило перезаписи ?? :-)

Извините, неправильный файл, попробуйте это: https://gist.github.com/abraae/c209b537350b2b2d9703ba126872cc3f

Было бы неплохо иметь его как встроенную переменную

Реализовано ли использование имени пользователя в качестве переменной в запросе?

Мне бы тоже хотелось, чтобы эта функция была следующей:

Допустим, у вас есть информационная панель, на которой вы перечисляете запросы от инструмента ITSM, и вы хотите, чтобы на графиках отображались только запросы, назначенные зарегистрированному пользователю.
Возможность установить на панели управления переменную, указывающую на имя пользователя, вошедшего в систему, решит нашу проблему в компании, в которой я работаю (International BIG Company).

Другой пример - использовать зарегистрированное имя пользователя для доступа к этому отделу и использовать его для отображения только данных, относящихся к этому отделу.

Добавление глобальной переменной, которая будет использоваться в информационных панелях, которая указывает на вошедшего в систему пользователя, чтобы ее можно было использовать, не должно быть таким сложным.

Допустим:
$ Grafana.User.Email = [email protected]
$ Grafana.User.Name = Гандольф
$ Grafana.User.Surname = TheWize
$ Grafana.User.Username = GDog

Это решит множество проблем и ограничений, которые есть у людей с Grafana, и я настоятельно рекомендую вам рассмотреть возможность реализации этого.

Есть новости по этому поводу?

Есть новости по этому поводу?

Я также считаю эту функцию очень полезной.

Мне также очень нужна эта функция банкомата. Я работаю над развертыванием пользовательских панелей мониторинга с финансовой информацией, которые должны отображать только соответствующие данные пользователей. Создание 25 копий одной и той же информационной панели для этой цели излишне утомительно.

+1

+1

Я хочу использовать это значение для ограничения доступа к переменным (авторизация)
Это было бы лучшим решением для этого

+1
Вариант использования состоит в том, что только один пользователь может видеть информацию о своем отделе.
Его можно использовать как ACL вместо создания новой информационной панели для каждого отдела.

+1

Привет всем, я хотел бы интегрировать Grafana с поставщиком удостоверений OIDC, используя поток кода авторизации [1], чтобы иметь единый вход между различными пользовательскими интерфейсами, предоставляемыми платформой. В качестве основного требования я должен гарантировать мультиарендность, поэтому лучшим решением должно быть использование одного из утверждений пользователя, возвращаемых IdP в JWT, в качестве параметра запроса, используемого grafana для извлечения данных из базы данных, в частности, я бы использовал утверждение, содержащее tenantId, которому принадлежит зарегистрированный пользователь.

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

Кто-нибудь реализовал что-то подобное или есть предложения по этому поводу?

заранее спасибо

+1

Моим конкретным вариантом использования было бы создание переменных шаблона для применения различных фильтров (значений меток Prometheus) в зависимости от вошедшего в систему пользователя.

Другими словами, содержимое поля «регулярное выражение» переменной шаблона может быть динамическим и зависеть от вошедшего в систему пользователя.

Для этого у каждого пользователя в Grafana может быть несколько дополнительных полей метаданных, которые задаются администратором во время создания пользователя. На эти необязательные поля метаданных можно ссылаться из поля «регулярное выражение» переменной шаблона.

Это может позволить применять эту «динамическую» фильтрацию, значение которой контролируется администратором более высокого уровня.

Большое спасибо!

+1

$__currentUserEmail было бы круто.

+1

+1

+1 Мне бы хотелось сделать панель управления для пользователей нашего университета, чтобы они могли видеть статистику своих WiFi и VPN на основе своего имени пользователя. Это может помочь им устранить проблемы с подключением, прежде чем звонить в службу поддержки!

+1

Мне кажется, прогресса нет :( Это было бы очень полезно.

++

Привет!

Кому- нибудь удалось реализовать это решение с кодом
Я пытаюсь использовать его с grafana-azure-data-explorer (Kusto DB)

Благодаря!!

+1

Привет,

Мой обходной путь основан на источнике данных SimpleJSON (https://github.com/grafana/simple-json-datasource)

Основная идея - включить заголовок X-Grafana-User и вернуть его обратно из DS для заполнения переменной шаблона.

Реализация: https://github.com/rlklaser/grafana-logged-user

@rlklaser - вот пример для Express JS?
или можно поделиться .war файлом?
это не работает для меня на Express JS (((

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 должен изменить grafana defaults.ini на:

[датапрокси]

logging = true
send_user_header = правда

Этот запрос был создан два года назад, и я не видел обновлений по этому поводу. Я считаю, что это был бы очень полезный инструмент для многих людей, включая меня.

Есть ли обновления по этому поводу?

Как получить результат / api / user / team в SimpleJson GRAFANA и каков запрос для получения значений «name» в переменной?
Пример результата Grafana http api на https://www.logiserv.re/api/user/teams

Нам также очень нужна эта функция для персонализированных дашбордов.

+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,
Это было бы очень полезной функцией, которая значительно упростит для нас работу по авторизации данных. Мы оцениваем и в процессе реализации более крупномасштабной службы отчетности на основе Grafana, которая включает возможность подключения к нескольким источникам данных.
Эта особенность будет иметь решающее значение для безопасности данных при многопользовательском развертывании.

++ 1, привет, команда разработчиков Grafana,
это очень полезная функция для нас, мы хотим управлять доступом к данным на основе пользователя для конкретного запроса, разные пользователи видят разную область видимости.

Grafana Dev Team, большое спасибо за очень полезную функцию !!!

Переменная не работает при использовании в запросе внутри определений переменных панелей мониторинга.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги