grafanaソースコンパイル二次開発統合oauth 2
背景
既存のシステムにgrafanaの計器パネルを埋め込んでデータ展示を行うには、インターフェースを二次開発してスタイル統一を満たす必要があります.同時に、grafanaの権限部分を修正して、ページを満足させてシームレスにジャンプします.同時に現在のユーザーを識別します.
インストール
grafanaはnodejs、go、gitなどに依存しています.
grafanaをダウンロードしてv 7.0.0の分岐を選んで開発しました.
windowの上で環境構築を行うなら、GCC環境をインストールする必要があります.
ここではミニGW 64を使っていますが、ここではオペレーティングシステムによってインストールを選択します.64ビットのインストールを選択します.
インストールの過程はここを参考にしてもいいです.
遭遇した問題 go getのインストール速度が遅いです. は、プロキシを構成することができます.go env-w GOPROXY=https://goproxy.cn go getは、githubからコードをダウンロードしています.このコマンドを使わずに、直接に関連ディレクトリの下にあるgit clone に行くことができます.
yarn installエラーgyp ERR!configure error yarn install--pure-lockfile--unsafe-perm yarnはミラーソースを切り替え、ダウンロード速度を高めます.yarn config set registry‘https://registry.npm.taobao.org’またはnpm config set registryhttps://registry.npm.taobao.org cnpm:npm install-g cnpm--registry=も使用できます.https://registry.npm.taobao.org Unwon/braを使用してgrafanaを起動する. $GOPATH\src\golang.org\xで実行:git clonehttps://github.com/golang/sync.git --depth 1(depthはクローン深さを指定するために用いられ、1で最近のcomitだけをクローンするという意味) go get github.com/Unwon/bra(ディレクトリを作成した後でも、git clone).ここで成功しても何の反応もありません.GOPATH\src\githb.com\nwon\braディレクトリの生成を確認したら、コマンドを停止することができます. go run bra.go init初期化 go run bra.go runコンパイルbra は、前後の端で構築に成功した後、grafanaディレクトリの下で、grafanaを実行することができ、ファイル修正は自動的に発行されます. grafana包装 windowでgo run build.go build package生成を実行します.exe実行可能ファイルです. linuxでgo run build.go build packageを実行すると、deb、rpm、tar.gzの3つのバージョンの圧縮パケットが生成されます. 包装はdeb、rpmにします.fpm yum-y install ll by ruby bygems ruby-devel gem sources-aをインストールする必要があります.http://gems.ruby-china.com///元http://ruby.taobao.org/メンテナンスを中止しました.gem sources--removehttp://rubygems.org/ここでゲムinstall fpmは複雑です.deb、tar.gzだけ包装しました.包装rpm過程でエラーが発生しました.tar.gzはすでに要求を満たすことができますので、ここではあまり研究していません.包装は一回で20分近くかかります.我慢して待ってください.整合oauth 2匿名ログイン ジャンプ中にgrafanaをイジェクトしない登録ウィンドウを実現するために、匿名登録プロファイルを使用することができる.
このようにすべてのレポートページにアクセスするには、ログイン認証は必要ありません.もちろんoauth 2を統合すれば、この配置はオープンしなくてもいいです.統合oauth 2 grafanaでは、複数の第三者登録検証をサポートしています. Github GitLab Google Grafana.com Azure AD Okta Generac
注:defaults.iniをコピーしてcustom.iniと名前を変えてカスタマイズを実現します.
その他の配置説明ホワイトリストとポート設定
domainはLAN ip:他のホストへのアクセスを避けるために、local hostがルーティングされません. iframeページ調整によりクッキーが失われました. は、GEnese OAuthを構成すると、第三者システムに移行してアイデンティティ検証を行うことができる.ここでは、2つのシステムのユーザ情報のフィールド設定が異なりますので、変更が必要です. パッケージパスpkg/appiは、api.goがすべてのインターフェースルーティング構成である. ユーザ情報設定
既存のシステムにgrafanaの計器パネルを埋め込んでデータ展示を行うには、インターフェースを二次開発してスタイル統一を満たす必要があります.同時に、grafanaの権限部分を修正して、ページを満足させてシームレスにジャンプします.同時に現在のユーザーを識別します.
インストール
grafanaはnodejs、go、gitなどに依存しています.
grafanaをダウンロードしてv 7.0.0の分岐を選んで開発しました.
windowの上で環境構築を行うなら、GCC環境をインストールする必要があります.
ここではミニGW 64を使っていますが、ここではオペレーティングシステムによってインストールを選択します.64ビットのインストールを選択します.
インストールの過程はここを参考にしてもいいです.
遭遇した問題
#################################### Anonymous Auth ######################
[auth.anonymous]
# enable anonymous access
;enabled = true
# specify organization name that should be used for unauthenticated users
;org_name = Main Org.
# specify role for unauthenticated users
;org_role = Viewer
「;enabled=true」のセミコロンを削除すると、設定が有効になります.このようにすべてのレポートページにアクセスするには、ログイン認証は必要ありません.もちろんoauth 2を統合すれば、この配置はオープンしなくてもいいです.
#################################### Generic OAuth ##########################
[auth.generic_oauth]
enabled = true
name = OAuth
allow_sign_up = true
client_id = grafana
client_secret = xxxxxx
scopes = server
;email_attribute_name = email:primary
;email_attribute_path =
auth_url = http://xxxxxx:8083/oauth/authorize
token_url = http://xxxxxx:8083/oauth/token
api_url = http://xxxxxxx:8083/oauth/check_token
;allowed_domains =
;team_ids =
;allowed_organizations =
;role_attribute_path =
;tls_skip_verify_insecure = false
;tls_client_cert =
;tls_client_key =
;tls_client_ca =
具体的な状況に応じてパラメータを調整する必要があります.注:defaults.iniをコピーしてcustom.iniと名前を変えてカスタマイズを実現します.
その他の配置説明
#################################### Server ####################################
[server]
# Protocol (http, https, h2, socket)
;protocol = http
# The ip address to bind to, empty will bind to all interfaces
;http_addr =
# The http port to use
http_port = 8000
# The public facing domain name used to access grafana from a browser
domain = 172.20.4.250
http_ポートはデフォルト3000ですが、windowの下でポートが衝突する可能性があります.domainはLAN ip:他のホストへのアクセスを避けるために、local hostがルーティングされません.
#################################### Security ####################################
[security]
# disable creation of admin user on first start of grafana
;disable_initial_admin_creation = false
# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
cookie_samesite = disabled
# set to true if you want to allow browsers to render Grafana in a ,
cookie_samesite = disabled
allow_embedding = true
ソース解析 r.Get("/logout", hs.Logout)
r.Post("/login", quota("session"), bind(dtos.LoginCommand{}), Wrap(hs.LoginPost))
r.Get("/login/:name", quota("session"), hs.OAuthLogin)
r.Get("/login", hs.LoginView)
r.Get("/invite/:code", hs.Index)
ジェネリックを使うのでoauth、登録するurlは/login/generaic_です.oauthですので、hs.OAuth Loginにジャンプしました.pkg/api/login_oauth.goで処理します. extUser := &models.ExternalUserInfo{
AuthModule: "oauth_" + name,
OAuthToken: token,
AuthId: userInfo.Id,
Name: userInfo.Name,
Login: userInfo.Login,
Email: userInfo.Email,
OrgRoles: map[int64]models.RoleType{},
Groups: userInfo.Groups,
}
ソースはtokenからユーザー情報を取得しましたが、認証センターのユーザー情報はjson形式でtokenに保存されています.// token user json
user := token.Extra("user")
// json map
userInfo, ok := user.(map[string]interface{})
//
userInfo["nickName"]
extUser := &models.ExternalUserInfo{
AuthModule: "oauth_" + name,
OAuthToken: token,
AuthId: fmt.Sprintf("%s", userInfo["id"]),
Name: fmt.Sprintf("%s", userInfo["nickName"]),
Login: fmt.Sprintf("%s", userInfo["username"]),
Email: fmt.Sprintf("%s", userInfo["email"]),
OrgRoles: map[int64]models.RoleType{},
//Groups: groups,
}
tokenのユーザ情報をgrafanaフレームに書き換える.このようにログインすれば、ユーザー情報を得ることができます.