μ΄λ©μΌ μ£Όμ λ μ¬μ©μ μ΄λ¦μ΄λ influxdb λ°±μλμ λν 쿼리μμ "νμ¬ grafana μ¬μ©μ"μ λν μΈλΆ μ 보λ₯Ό μ¬μ©ν μμλ λ°©λ²μ΄ μμ΅λκΉ?
μꡬ μ¬ν : λ§μ (μλ§λ μμ²) μ¬μ©μμ κ°μΈ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μμ΅λλ€. λ΄ νμ¬ κ΅¬ν μ νμ λ¨μΌ influxdb λ°μ΄ν°λ² μ΄μ€μ κ° μΈ‘μ μ΄ μν μ¬μ©μλ₯Ό μλ³νλ νκ·Έκ°μλ λ¨μΌ μΈ‘μ μ λλ€. μ΄λ©μΌ, μ¬μ©μ μ΄λ¦ λλ ν΄λΉ νκ·Έμμ μ€μ μ¬μ©μ IDλ‘ μλνλ λͺ¨λ κ²μ μμ λ‘κ² μ¬μ©ν μ μμ΅λλ€.
μ΄μμ μΌλ‘λ grafanaκ° "where user = fred 'μ κ°μ μ μ μ½μ νμ¬ λ°±μλκ° νμ ν΄λΉ νΉμ μ¬μ©μμ κ΄λ ¨λ λ°μ΄ν° λ§ λ°ννλλ‘ν©λλ€.
보μ : λλ 보μ λ ΈμΆμ μ΄ν΄νκ³ μμΌλ©° μ§μμ΄ νλΆν μ μμ μΈ μ¬μ©μκ° http λꡬλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μ¬μ©μ λ°μ΄ν°λ₯Ό μ‘°μ¬ ν μ μμμ μ΄ν΄ν©λλ€. κ·Έλ¬λ grafanaμ λν μλ°©ν₯ νλ‘μ μν μνλ nginx νλ°νΈ μλμμ μ΄μ λν κ²μ¬λ₯Ό μΆκ°νλ €κ³ ν©λλ€. λ΄ κ³νμ nginxκ° GET / api / datasources / proxy / : datasourceId / *μ λν μμ API νΈμΆμ κ²μ¬νκ³ νμ¬ λ‘κ·ΈμΈ ν μ¬μ©μμ μΌμΉνλ where μ μ΄ ν¬ν¨λμ΄ μλμ§ νμΈνλ κ²μ λλ€. μΌμ΄ν¬ ν μ‘°κ° μ리 :)
νμ¬λ‘μλ λΆκ°λ₯ν©λλ€.
grafana λ°±μλμ λν "/ api / datasources / proxy / : datasourceId / *"API νΈμΆμ κ°λ‘ μ±κ³ where μ μ μ½μ νλ μλ°©ν₯ νλ‘μλ‘μ΄ λ¬Έμ λ₯Ό μ±κ³΅μ μΌλ‘ ν΄κ²°νμ΅λλ€. grafanaμ λ©μ§ μΈμ¦ νλ‘μ λμκ³Ό ν¨κ» μ΄μ λμ΄ κΈ°λ₯μ΄ νμνμ§ μμ΅λλ€. μ¬μ€, Torkeloκ° μ΄μ μ μΈκΈ ν 보μμ λν κ²¬ν΄ μ€ μΌλΆμ λ°±μλ λ°μ΄ν°λ² μ΄μ€μ μν μ¬μ©μ μμ€μ μν λΆμ‘±μ κΈ°λ°μΌλ‘μ΄ νλμ μλ§λ νμ¬ Grafanaμ μνμ§ μμ κ²μ΄λΌκ³ μκ°ν©λλ€.
@abraae μ΄ κΈ°λ₯μ ꡬννλ λ°©λ²μ μμΈν μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ?
@abraae +1
λΉμ μ΄ ν μΌμ μ€λͺ
ν΄ μ£Όμκ² μ΅λκΉ?
μ£μ‘ν©λλ€. λ΄κ° ν μΌμ λ¬Έμν ν μκ°μ΄ μμ§λ§ κΈ°μ΅μμ :
λ°λΌμ κΈ°λ³Έμ μΌλ‘ μννλ μμ μ νμ grafana λ°±μλλ‘ λμκ°λ λͺ¨λ API νΈμΆμ μΆκ° where μ μ κ°μ νλ κ²μ λλ€.
λ©λͺ¨λ¦¬μμ μλνλλ‘νκΈ° μν΄ν΄μΌ ββν μΌμ΄ λ§μμ΅λλ€. :) μ£μ‘ν©λλ€. λ μ΄μ λμμ΄ λ μ μμ΅λλ€.
κ·νμ λ΅λ³μ λν @abraae Thx.
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 = Gandolf
$ Grafana.User.Surname = TheWize
$ Grafana.User.Username = GDog
μ΄κ²μ μ¬λλ€μ΄ Grafanaμ λν΄ κ°μ§κ³ μλ λ§μ λ¬Έμ μ νκ³λ₯Ό ν΄κ²°ν κ²μ λλ€. κ·Έλ¦¬κ³ μ΄κ²μ ꡬννλ κ²μ κ°λ ₯ν κΆμ₯ν©λλ€.
μ΄κ²μ λν μμμ΄ μμ΅λκΉ?
μ΄κ²μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
μ΄ κΈ°λ₯λ λ§€μ° μ μ©ν©λλ€.
μ΄ κΈ°λ₯ atmλ μ λ§ νμν©λλ€. κ° μ¬μ©μ λ°μ΄ν° λ§ νμν΄μΌνλ μ¬λ¬΄ μ 보κ°μλ μ¬μ©μ λ³ λμ 보λλ₯Ό λ°°ν¬νλ μ€μ λλ€. μ΄ λͺ©μ μ μν΄ λμΌν λμ 보λλ₯Ό 25 κ° λ³΅μ¬νλ©΄ λΆνμνκ² μ§λ£¨νκ² λκ»΄μ§λλ€.
+1
+1
μ΄ κ°μ μ¬μ©νμ¬ λ³μμ λν μ‘μΈμ€λ₯Ό μ ννκ³ μΆμ΅λλ€ (κΆν λΆμ¬).
μ΄κ²μ λν μ΅μ μ ν΄κ²°μ±
μ΄ λ κ²μ
λλ€
+1
μ¬μ© μ¬λ‘λ ν μ¬μ©μκ° μμ μ λΆμ μ 보 λ§ λ³Ό μ μλ€λ κ²μ
λλ€.
κ° λΆμμ λν μ 볡μ¬λ³Έ λμ 보λλ₯Ό λ§λλ λμ ACLλ‘ μ¬μ©ν μ μμ΅λλ€.
+1
μλ νμΈμ, μ λ Grafanaλ₯Ό μΈμ¦ μ½λ νλ¦ [1]μ μ¬μ©νμ¬ OIDC ID 곡κΈμμ ν΅ν©νμ¬ νλ«νΌμμ μ 곡νλ μλ‘ λ€λ₯Έ UIκ°μ SSOλ₯Ό μ¬μ©νκ³ μΆμ΅λλ€. μ£Όμ μꡬ μ¬νμΌλ‘ λ©ν° ν λμλ₯Ό 보μ₯ν΄μΌνλ―λ‘ μ΅μμ μ루μ μ JWTμ IdPκ° λ°ννλ μ¬μ©μ ν΄λ μ μ€ νλλ₯Ό grafanaκ° dbμμ λ°μ΄ν°λ₯Ό κ²μνλ λ° μ¬μ©νλ 쿼리 λ§€κ° λ³μλ‘ μ¬μ©νλ κ²μ λλ€. λ‘κΉ λ μ¬μ©μκ° μν tenantIdλ₯Ό ν¬ν¨νλ ν΄λ μ.
[1] https://grafana.com/docs/auth/generic-oauth/
λκ΅°κ° λΉμ·ν κ²μ ꡬννκ±°λ κ·Έλ κ²νκΈ°μν μ μμ΄ μμ΅λκΉ?
미리 κ°μ¬λ립λλ€
+1
λ΄ νΉμ μ¬μ© μ¬λ‘λ λ‘κ·ΈμΈ ν μ¬μ©μμ λ°λΌ λ€λ₯Έ νν°λ§ (Prometheus λ μ΄λΈ κ°)μ μ μ©νλ ν νλ¦Ώ λ³μλ₯Ό λ§λλ κ²μ λλ€.
μ¦, ν νλ¦Ώ λ³μμ "regex"νλ λ΄μ©μ λμ μ΄λ©° λ‘κ·ΈμΈ ν μ¬μ©μμ λ°λΌ λ¬λΌμ§ μ μμ΅λλ€.
μ΄λ₯Ό μν΄ 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μμ λ€μ λ°ννμ¬ ν νλ¦Ώ λ³μλ₯Ό μ±μ°λ κ²μ λλ€.
@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λ₯Ό λ€μκ³Ό κ°μ΄ λ³κ²½ν΄μΌν©λλ€.
[λ°μ΄ν° νλ‘μ]
λ‘κΉ
= μ°Έ
send_user_header = true
μ΄ μμ²μ 2 λ μ μ μμ±λμμΌλ©° μ΄μ λν μ λ°μ΄νΈλ₯Ό λ³΄μ§ λͺ»νμ΅λλ€. μ λ μ΄κ²μ΄ μ λ₯Ό ν¬ν¨ν λ§μ μ¬λλ€μκ² λ§€μ° μ μ©ν λκ΅¬κ° λ κ²μ΄λΌκ³ λ―Ώμ΅λλ€.
μ΄κ²μ λν μ λ°μ΄νΈκ° μμ΅λκΉ?
SimpleJson GRAFANAμμ / api / user / teamsμ κ²°κ³Όλ₯Ό μ»λ λ°©λ²κ³Ό λ³μμμ "name"μ κ°μ κ°μ Έ μ€λ 쿼리λ 무μμ
λκΉ?
https://www.logiserv.re/api/user/teams μ Grafana http api κ²°κ³Όμ μ
κ°μΈν λ λμ 보λμλμ΄ κΈ°λ₯μ΄ νμν©λλ€.
+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, λ§€μ° μ μ©ν κΈ°λ₯μ λν΄ λλ¨ν κ°μ¬ν©λλ€ !!!
λμ 보λ λ³μ μ μ λ΄μμ 쿼리μ μ¬μ©ν λ λ³μκ° μλνμ§ μλ κ² κ°μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
κΈ°λ³Έ λ³μλ‘ μ¬μ©νλ κ²μ΄ μ¬μ ν μ’μ κ²μ λλ€.