作者选择了COVID-19 救济基金来接受捐赠,作为Write for DOnations计划的一部分。
介绍
Grafana是一个开源数据可视化和监控工具,它集成了来自Prometheus、InfluxDB、Graphite和ElasticSearch等来源的复杂数据。Grafana 允许您为您的数据创建警报、通知和临时过滤器,同时还可以通过内置共享功能更轻松地与您的团队成员协作。
在本教程中,您将安装 Grafana 并使用SSL 证书和Nginx 反向代理保护它。设置 Grafana 后,您可以选择通过 GitHub 配置用户身份验证,从而更好地组织团队权限。
先决条件
要学习本教程,您需要:
- 按照 Ubuntu 20.04 的初始服务器设置指南设置的一台 Ubuntu 20.04 服务器,包括具有
sudo
特权的非 root 用户和配置了ufw
. - 完全注册的域名。本教程
your_domain
通篇使用。你可以购买一个域名Namecheap,免费获得一个在Freenom,或使用你选择的域名注册商。 - 为您的服务器设置的以下 DNS 记录。如果您使用 DigitalOcean,您可以按照如何添加域一文了解有关如何添加域的详细信息。
- 指向您服务器的公共 IP 地址的A记录
your_domain
。 - 指向您服务器的公共 IP 地址的A记录。
www.your_domain
- 指向您服务器的公共 IP 地址的A记录
- 按照如何在 Ubuntu 20.04 上安装 Nginx教程设置Nginx,包括您的域的服务器块。
- 配置了 Let’s Encrypt 的 Nginx 服务器块,您可以按照如何在 Ubuntu 20.04 上使用 Let’s Encrypt 保护 Nginx 进行设置。
- 或者,要设置GitHub身份验证,您需要一个与组织关联的GitHub 帐户。
步骤 1 — 安装 Grafana
在第一步中,您将把 Grafana 安装到 Ubuntu 20.04 服务器上。您可以通过直接从其官方网站下载或通过APT 存储库来安装 Grafana 。由于 APT 存储库可以更轻松地安装和管理 Grafana 的更新,因此您将在本教程中使用该方法。
下载Grafana GPG密钥用wget
,然后通过管道将输出到apt-key
。这会将密钥添加到您的 APT 安装的受信任密钥列表中,这将允许您下载并验证 GPG 签名的 Grafana 包:
- wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
在此命令中,该选项-q
会关闭 的状态更新消息wget
,并将-O
您下载的文件输出到终端。这两个选项可确保仅将下载文件的内容通过管道传输到apt-key
.
接下来,将 Grafana 存储库添加到您的 APT 源:
- sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
刷新您的 APT 缓存以更新您的软件包列表:
- sudo apt update
您现在可以继续安装:
- sudo apt install grafana
一旦安装systemctl
了 Grafana ,使用启动 Grafana 服务器:
- sudo systemctl start grafana-server
接下来,通过检查服务的状态来验证 Grafana 是否正在运行:
- sudo systemctl status grafana-server
您将收到类似于以下内容的输出:
Output● grafana-server.service - Grafana instance
Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago
Docs: http://docs.grafana.org
Main PID: 15982 (grafana-server)
Tasks: 7 (limit: 1137)
...
此输出包含有关 Grafana 进程的信息,包括其状态、主进程标识符 (PID) 等。active (running)
表明进程运行正常。
最后,启用该服务以在启动时自动启动 Grafana:
- sudo systemctl enable grafana-server
您将收到以下输出:
OutputSynchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.
这确认systemd
已创建必要的符号链接来自动启动 Grafana。
Grafana 现在已安装并可以使用。接下来,您将使用反向代理和 SSL 证书保护与 Grafana 的连接。
步骤 2 — 设置反向代理
使用 SSL 证书将通过加密进出 Grafana 的连接来确保您的数据安全。但是,要利用此连接,您首先需要将 Nginx 重新配置为 Grafana 的反向代理。
打开在先决条件中使用 Let’s Encrypt 设置 Nginx 服务器块时创建的 Nginx 配置文件。您可以使用任何文本编辑器,但在本教程中,我们将使用nano
:
- sudo nano /etc/nginx/sites-available/your_domain
找到以下块:
...
location / {
try_files $uri $uri/ =404;
}
...
因为您已经将 Nginx 配置为通过 SSL 进行通信,并且因为所有到您服务器的 Web 流量都已经通过 Nginx,所以您只需要告诉 Nginx 将所有请求转发到3000
默认运行在端口上的 Grafana 。
删除此try_files
行中的现有行location block
并将其替换为以下proxy_pass
选项:
...
location / {
proxy_pass http://localhost:3000;
}
...
这会将代理映射到适当的端口。一旦你完成后,按保存并关闭文件CTRL+X
,Y
,然后ENTER
如果你使用nano
。
现在,测试新设置以确保一切配置正确:
- sudo nginx -t
您将收到以下输出:
Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
最后,通过重新加载 Nginx 来激活更改:
- sudo systemctl reload nginx
您现在可以通过将 Web 浏览器指向 来访问默认的 Grafana 登录屏幕。如果您无法访问 Grafana,请确认您的防火墙设置为允许端口上的流量,然后重新跟踪之前的说明。https://your_domain
443
通过加密与 Grafana 的连接,您现在可以实施额外的安全措施,首先是更改 Grafana 的默认管理凭据。
第 3 步 – 更新凭据
由于默认情况下每个 Grafana 安装都使用相同的管理凭据,因此最好尽快更改您的登录信息。在此步骤中,您将更新凭据以提高安全性。
首先从 Web 浏览器导航到。这将打开默认登录屏幕,您将在其中看到 Grafana 徽标、要求您输入电子邮件或用户名和密码的表单、登录按钮和忘记密码?关联。https://your_domain
进入admin
到这两个电子邮件或用户名和密码字段,然后点击登录按钮。
在下一个屏幕上,系统会要求您通过更改默认密码来提高帐户的安全性:
在新密码和确认新密码字段中输入您要开始使用的密码。
从这里,您可以单击提交以保存新信息或按跳过跳过此步骤。如果跳过,下次登录时会提示修改密码。
为了提高 Grafana 设置的安全性,请单击Submit。您将转到欢迎使用 Grafana仪表板:
您现在已经通过更改默认凭据保护了您的帐户。接下来,您将对 Grafana 配置进行更改,以便任何人未经您的许可就无法创建新的 Grafana 帐户。
第 4 步 – 禁用 Grafana 注册和匿名访问
Grafana 提供了允许访问者为自己创建用户帐户和预览仪表板而无需注册的选项。当 Grafana 无法通过互联网访问时,或者当它使用公共可用数据(如服务状态)时,您可能希望允许这些功能。但是,当在线使用 Grafana 处理敏感数据时,匿名访问可能是一个安全问题。要解决此问题,请对您的 Grafana 配置进行一些更改。
首先打开 Grafana 的主配置文件进行编辑:
- sudo nano /etc/grafana/grafana.ini
allow_sign_up
在[users]
标题下找到以下指令:
...
[users]
# disable user signup / registration
;allow_sign_up = true
...
启用此指令true
会在登录屏幕上添加一个注册按钮,允许用户注册自己并访问 Grafana。
禁用此指令false
会删除“注册”按钮并增强 Grafana 的安全性和隐私性。
通过删除该;
行开头的 ,然后将选项设置为false
:
...
[users]
# disable user signup / registration
allow_sign_up = false
...
接下来,enabled
在[auth.anonymous]
标题下找到以下指令:
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...
设置enabled
为true
允许非注册用户访问您的仪表板;设置此选项以false
将仪表板访问权限仅限于注册用户。
通过删除该;
行开头的 ,然后将选项设置为 ,取消对该指令的注释false
。
...
[auth.anonymous]
# enable anonymous access
enabled = false
...
保存文件并退出文本编辑器。
要激活更改,请重新启动 Grafana:
- sudo systemctl restart grafana-server
通过检查 Grafana 的服务状态来验证一切是否正常:
- sudo systemctl status grafana-server
和以前一样,输出将报告 Grafana 是active (running)
.
现在,将您的 Web 浏览器指向. 要返回注册屏幕,请将光标移至屏幕左下方的头像,然后单击出现的注销选项。https://your_domain
退出后,请确认没有“注册”按钮,并且不输入登录凭据就无法登录。
此时,Grafana 已完全配置并可以使用。接下来,您可以通过 GitHub 进行身份验证来简化组织的登录过程。
(可选)第 5 步 – 设置 GitHub OAuth 应用程序
对于登录的替代方法,您可以将 Grafana 配置为通过 GitHub 进行身份验证,这为授权的 GitHub 组织的所有成员提供登录访问权限。当您希望允许多个开发人员协作和访问指标而无需创建特定于 Grafana 的凭据时,这尤其有用。
首先登录到与您的组织关联的 GitHub 帐户,然后导航到您的 GitHub 个人资料页面https://github.com/settings/profile
。
通过单击屏幕左侧的姓名,然后在下拉菜单中选择您的组织来切换设置上下文。这会将上下文从Personal settings切换到Organization settings。
在下一个屏幕上,您将看到您的组织配置文件,您可以在其中更改组织显示名称、组织电子邮件和组织URL 等设置。
由于 Grafana 使用OAuth(一种允许远程第三方访问本地资源的开放标准)来通过 GitHub 对用户进行身份验证,因此您需要在 GitHub 中创建一个新的OAuth 应用程序。
单击屏幕左下方开发人员设置下的OAuth 应用程序链接。
如果您在 GitHub 上还没有与您的组织关联的任何 OAuth 应用程序,您将被告知没有组织拥有的应用程序。否则,您将看到已连接到您的帐户的 OAuth 应用程序列表。
单击新建 OAuth 应用程序按钮继续。
在下一个屏幕上,填写有关 Grafana 安装的以下详细信息:
- 应用程序名称– 这有助于您区分不同的 OAuth 应用程序。
- 主页 URL – 这告诉 GitHub 在哪里可以找到 Grafana。在此字段中键入,替换为您的域。
https://your_domain
your_domain
- 应用程序描述– 这提供了对您的 OAuth 应用程序用途的描述。
- 应用程序回调 URL – 这是用户在成功通过身份验证后将被发送到的地址。对于 Grafana,此字段必须设置为。
https://your_domain/login/github
请记住,通过 GitHub 登录的 Grafana 用户将看到您在前三个字段中输入的值,因此请务必输入有意义且适当的内容。
完成后,表格将如下所示:
单击绿色的注册应用程序按钮。
您现在将被重定向到包含与您的新 OAuth 应用程序关联的客户端 ID和客户端密钥的页面。记下这两个值,因为您需要将它们添加到 Grafana 的主配置文件中才能完成设置。
警告:请确保将您的客户端 ID和客户端机密保存在安全且非公开的位置,因为它们可能会被用作攻击的基础。
创建 GitHub OAuth 应用程序后,您现在可以重新配置 Grafana 以使用 GitHub 进行身份验证。
(可选)第 6 步 – 将 Grafana 配置为 GitHub OAuth 应用程序
要完成 Grafana 设置的 GitHub 身份验证,您现在将对 Grafana 配置文件进行一些更改。
首先,打开主 Grafana 配置文件。
- sudo nano /etc/grafana/grafana.ini
找到[auth.github]
标题,并通过删除;
除;allowed_domains =
and之外的每一行开头的 来取消对本节的注释;team_ids =
,本教程中不会更改。
接下来,进行以下更改:
- 设置
enabled
和allow_sign_up
到true
。这将启用 GitHub 身份验证并允许被允许组织的成员自己创建帐户。请注意,此设置与您在步骤 4 中更改的allow_sign_up
属性不同。[users]
- 将
client_id
和设置client_secret
为您在创建 GitHub OAuth 应用程序时获得的值。 - 设置
allowed_organizations
为您组织的名称以确保只有您组织的成员才能注册和登录 Grafana。
完整的配置将如下所示:
...
[auth.github]
enabled = true
allow_sign_up = true
client_id = your_client_id_from_github
client_secret = your_client_secret_from_github
scopes = user:email,read:org
auth_url = https://github.com/login/oauth/authorize
token_url = https://github.com/login/oauth/access_token
api_url = https://api.github.com/user
;allowed_domains =
;team_ids =
allowed_organizations = your_organization_name
...
你现在已经告诉 Grafana 它需要知道的关于 GitHub 的一切。要完成设置,您需要启用反向代理背后的重定向。这是通过root_url
在[server]
标题下设置一个值来完成的。
...
[server]
root_url = https://your_domain
...
保存您的配置并关闭文件。
然后,重新启动 Grafana 以激活更改:
- sudo systemctl restart grafana-server
最后,验证服务是否已启动并正在运行。
- sudo systemctl status grafana-server
输出将指示该服务是active (running)
。
现在,通过导航到 来测试您的新身份验证系统。如果您已经登录 Grafana,请将鼠标悬停在屏幕左下角的头像日志上,然后单击您姓名旁边的二级菜单中的注销。https://your_domain
在登录页面上,您将在原始登录按钮下看到一个新部分,其中包含带有 GitHub 徽标的“使用 GitHub 登录”按钮。
单击“使用 GitHub 登录”按钮重定向到 GitHub,您将在其中登录您的 GitHub 帐户并确认您打算授权 Grafana。
单击绿色的授权your_github_organization按钮。
注意:请确保您的 GitHub 帐户是您批准的组织的成员,并且您的 Grafana 电子邮件地址与您的 GitHub 电子邮件地址相匹配。如果您尝试使用不是您批准的组织成员的 GitHub 帐户进行身份验证,您将收到一条登录失败消息,告诉您用户不是所需组织之一的成员。
您现在将使用现有的 Grafana 帐户登录。如果您登录的用户的 Grafana 帐户尚不存在,Grafana 将创建一个具有查看者权限的新用户帐户,以确保新用户只能使用现有仪表板。
要更改新用户的默认权限,请打开主 Grafana 配置文件进行编辑。
- sudo nano /etc/grafana/grafana.ini
找到标题auto_assign_org_role
下的指令[users]
,并通过删除;
行开头的 来取消注释设置。
将指令设置为以下值之一:
Viewer
— 只能使用现有的仪表板Editor
— 可以使用、修改和添加仪表板Admin
– 有权做任何事情
本教程将自动分配设置为Viewer
:
...
[users]
...
auto_assign_org_role = Viewer
...
保存更改后,关闭文件并重新启动 Grafana:
- sudo systemctl restart grafana-server
查看服务状态:
- sudo systemctl status grafana-server
像以前一样,状态将显示为active (running)
。
此时,您已完全配置 Grafana 以允许 GitHub 组织的成员注册和使用您的 Grafana 安装。
结论
在本教程中,您安装、配置和保护了 Grafana,还学习了如何允许组织成员通过 GitHub 进行身份验证。
要扩展您当前的 Grafana 安装,请参阅官方和社区构建的仪表板和插件列表。要了解有关使用 Grafana 的更多信息,请参阅Grafana 官方文档,或查看我们的其他监控教程。