夜莺监控(Nightingale)与 Grafana 深度整合
夜莺方便管理告警规则、通知规则,新引入的 Pipeline 机制也非常灵活,可以和自己公司的 CMDB 等打通。但是我司长期已经习惯使用 Grafana 看图,Grafana 里积累了很多配置,没法迁移到夜莺,而且在看图方面,还是 Grafana 道行深。
所以,希望二者整合,强强联合。
我司最终决定使用统一的 SSO 来解决夜莺和 Grafana 的登录,然后把 Grafana 内嵌到夜莺里(老版本使用集成仪表盘
内嵌,新版本使用集成中心-系统集成
内嵌)。
最终效果
用户使用 SSO 登录夜莺,然后在夜莺里访问 Grafana,Grafana 发现当前用户没有登录(因为 iframe 无法共享外部的 jwt token 或 cookie),就会自动跳转到 SSO 登录页面,SSO 那边发现当前用户已经登录过了,又自动跳转回来,所以对终端用户而言,就像是夜莺和 Grafana 共享了登录信息一样。
下面介绍一下配置方式。
提前准备
- 最新版夜莺并配置域名 HTTPS
- 最新版 Grafana 并配置域名 HTTPS
- 支持 OIDC 认证的单点认证系统 如 Keycloak 本文使用 Keycloak
配置 Keycloak
在 Keycloak 中分别为夜莺和 Grafana 创建 ClientID 和 Secret。注意 Client Protocol 选择 openid-connect。
下面是 Keycloak 中配置 Grafana 的截图,供参考:
分别将夜莺和 Grafana 的 Client ID 以及 Secret 保存,后面会用到。
配置夜莺
在夜莺的 系统配置-单点登录-OIDC
中修改 SSO 配置,内容如下:
Enable = true
DisplayName = 'SSO登录'
RedirectURL = 'https://xxx.com/callback' # 修改为夜莺地址
SsoAddr = 'https://xxx/auth/realms/xxx' # SSO地址
SsoLogoutAddr = 'https://xxx/auth/realms/xxx/protocol/openid-connect/logout' # SSO注销地址
ClientId = 'xxx' # 夜莺Client ID
ClientSecret = 'xxx' # 夜莺Client Secret
CoverAttributes = true
DefaultRoles = ['xxx']
Scopes = ['openid', 'profile', 'email', 'phone']
[Attributes]
Username = 'preferred_username'
Nickname = 'preferred_username'
Phone = 'phone_number'
Email = 'email'
保存后测试是否可通过 SSO 登录夜莺。
配置 Grafana
修改 Grafana 的配置文件,我的环境下,配置文件的路径是 /etc/grafana/grafana.ini
,修改的部分如下:
[auth.generic_oauth]
name = SSO
icon = signin
enabled = true
allow_sign_up = true
auto_login = true
client_id = xxx
client_secret = xxx
scopes = openid email profile offline_access
email_attribute_name = preferred_username
email_attribute_path = email
login_attribute_path = preferred_username
auth_url = https://xxx/auth/realms/xxx/protocol/openid-connect/auth
token_url = https://xxx/auth/realms/xxx/protocol/openid-connect/token
api_url = https://xxx/auth/realms/xxx/protocol/openid-connect/userinfo
skip_org_role_sync = true
role_attribute_path = grafana_role
[auth]
# Login cookie name
disable_signout_menu = false
auto_assign_org = true
auto_assign_org_role = Viewer
[security]
cookie_secure = true
cookie_samesite = none
allow_embedding = true
allow_embedding = true
[server]
domain = xxx
root_url = https://xxx.com/
enable_gzip = true
保存后重启 Grafana 测试是否可通过 SSO 登录夜莺。当然,在 Grafana 启用 SSO 之前,可以提前创建一个管理员,后续 SSO 登录的用户可由管理员分配权限。
如上就完成了两个系统的 SSO 配置。供大家参考。