夜莺监控(Nightingale)与 Grafana 深度整合

演示如何用 Keycloak 和 OIDC 统一夜莺与 Grafana 的登录,并把 Grafana 内嵌到夜莺中,实现一个入口看图和管告警。

作者 flycat

夜莺方便管理告警规则、通知规则,新引入的 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 配置。供大家参考。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

标签 夜莺监控
快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云