作者选择了 COVID-19 Relief Fund 作为 Write for DOnations 计划的一部分来接受捐赠。
介绍
Grafana 是一个开源数据可视化和监控工具,集成了来自 Prometheus、InfluxDB、Graphite 和弹性搜索。 Grafana 让您可以为您的数据创建警报、通知和临时过滤器,同时还可以通过内置的共享功能更轻松地与您的队友进行协作。
在本教程中,您将安装 Grafana 并使用 SSL 证书 和 Nginx 反向代理 保护它。 设置 Grafana 后,您可以选择通过 GitHub 配置用户身份验证,从而更好地组织团队权限。
先决条件
要遵循本教程,您将需要:
- 按照 Initial Server Setup Guide for Ubuntu 20.04 设置一台 Ubuntu 20.04 服务器,包括具有
sudo
权限的非 root 用户和使用ufw
配置的防火墙。 - 完全注册的域名。 本教程始终使用
your_domain
。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。 - 为您的服务器设置了以下 DNS 记录。 如果您使用的是 DigitalOcean,您可以按照 如何添加域 文章详细了解如何添加它们。 带有 your_domain 的 A 记录指向您服务器的公共 IP 地址。 带有 www.your_domain 的 A 记录指向您服务器的公共 IP 地址。
- 按照 如何在 Ubuntu 20.04 上安装 Nginx 教程设置 Nginx,包括您的域的 服务器块 。
- 一个配置了 Let's Encrypt 的 Nginx 服务器块,您可以按照 How To Secure Nginx with Let's Encrypt on Ubuntu 20.04 进行设置。
- 或者,要设置 GitHub 身份验证,您需要一个与组织 关联的 GitHub 帐户。
第 1 步 — 安装 Grafana
在这第一步中,您将把 Grafana 安装到您的 Ubuntu 20.04 服务器上。 您可以通过 直接从其官方网站 下载或通过 APT 存储库 来安装 Grafana。 因为 APT 存储库可以更轻松地安装和管理 Grafana 的更新,所以您将在本教程中使用该方法。
使用 wget 下载 Grafana GPG 密钥 ,然后 将输出 传输到 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
安装 Grafana 后,使用 systemctl
启动 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 的反向代理。
在 Prerequisites 中使用 Let's Encrypt 打开您在设置 Nginx 服务器块时创建的 Nginx 配置文件。 您可以使用任何文本编辑器,但在本教程中,我们将使用 nano
:
sudo nano /etc/nginx/sites-available/your_domain
找到以下块:
/etc/nginx/sites-available/your_domain
... location / { try_files $uri $uri/ =404; } ...
因为您已经将 Nginx 配置为通过 SSL 进行通信,并且所有到服务器的 Web 流量都已经通过 Nginx,所以您只需告诉 Nginx 将所有请求转发到 Grafana,默认情况下在端口 3000
上运行。
删除此 location block
中现有的 try_files
行,并将其替换为以下 proxy_pass
选项:
/etc/nginx/sites-available/your_domain
... location / { proxy_pass http://localhost:3000; } ...
这会将代理映射到适当的端口。 完成后,按 CTRL+X
、Y
保存并关闭文件,如果您使用的是 nano
,然后按 ENTER
。
现在,测试新设置以确保一切配置正确:
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 浏览器指向 https://your_domain
来访问默认的 Grafana 登录屏幕。 如果您无法访问 Grafana,请确认您的防火墙设置为允许端口 443
上的流量,然后重新跟踪之前的说明。
通过加密与 Grafana 的连接,您现在可以实施其他安全措施,首先是更改 Grafana 的默认管理凭据。
第 3 步 — 更新凭证
因为默认情况下每个 Grafana 安装都使用相同的管理凭据,所以最好尽快更改您的登录信息。 在此步骤中,您将更新凭据以提高安全性。
首先从您的网络浏览器导航到 https://your_domain
。 这将打开默认登录屏幕,您将在其中看到 Grafana 徽标,一个要求您输入 电子邮件或用户名 和 密码 的表单,一个 登录 [X171X ] 按钮,以及 忘记密码? 链接。
在电子邮件或用户名和密码字段中输入admin
,然后单击登录按钮。
在下一个屏幕上,系统会要求您更改默认密码以使您的帐户更安全:
在新密码和确认新密码字段中输入您想开始使用的密码。
在此处,您可以单击 提交 保存新信息或按 Skip 跳过此步骤。 如果跳过,下次登录时会提示更改密码。
为了提高 Grafana 设置的安全性,请单击 Submit。 您将转到 Welcome to Grafana 仪表板:
您现在已通过更改默认凭据来保护您的帐户。 接下来,您将对 Grafana 配置进行更改,这样任何人都无法在未经您许可的情况下创建新的 Grafana 帐户。
第 4 步 — 禁用 Grafana 注册和匿名访问
Grafana 提供了允许访问者为自己创建用户帐户和预览仪表板而无需注册的选项。 当 Grafana 无法通过 Internet 访问时,或者当它使用服务状态等公开可用的数据时,您可能希望允许这些功能。 但是,当在线使用 Grafana 处理敏感数据时,匿名访问可能是一个安全问题。 要解决此问题,请对您的 Grafana 配置进行一些更改。
首先打开 Grafana 的主配置文件进行编辑:
sudo nano /etc/grafana/grafana.ini
在 [users]
标题下找到以下 allow_sign_up
指令:
/etc/grafana/grafana.ini
... [users] # disable user signup / registration ;allow_sign_up = true ...
使用 true
启用此指令会在登录屏幕上添加一个 Sign Up 按钮,允许用户注册自己并访问 Grafana。
使用 false
禁用此指令会删除 Sign Up 按钮并增强 Grafana 的安全性和隐私性。
通过删除行首的 ;
取消注释该指令,然后将选项设置为 false
:
/etc/grafana/grafana.ini
... [users] # disable user signup / registration allow_sign_up = false ...
接下来,在 [auth.anonymous]
标题下找到以下 enabled
指令:
/etc/grafana/grafana.ini
... [auth.anonymous] # enable anonymous access ;enabled = false ...
将 enabled
设置为 true
使非注册用户可以访问您的仪表板; 将此选项设置为 false
会将仪表板访问权限仅限于注册用户。
通过删除行首的 ;
取消注释该指令,然后将选项设置为 false
。
/etc/grafana/grafana.ini
... [auth.anonymous] # enable anonymous access enabled = false ...
保存文件并退出文本编辑器。
要激活更改,请重新启动 Grafana:
sudo systemctl restart grafana-server
通过检查 Grafana 的服务状态来验证一切是否正常:
sudo systemctl status grafana-server
和之前一样,输出会报告 Grafana 是 active (running)
。
现在,将您的网络浏览器指向 https://your_domain
。 要返回注册屏幕,请将光标移至屏幕左下方的头像,然后单击出现的退出选项。
退出后,请确认没有 注册 按钮,并且您必须输入登录凭据才能登录。
至此,Grafana 已完全配置并可以使用。 接下来,您可以通过 GitHub 进行身份验证来简化组织的登录过程。
(可选)第 5 步 — 设置 GitHub OAuth 应用程序
对于登录的替代方法,您可以将 Grafana 配置为通过 GitHub 进行身份验证,这为授权的 GitHub 组织的所有成员提供登录访问权限。 当您希望允许多个开发人员协作和访问指标而无需创建特定于 Grafana 的凭据时,这可能特别有用。
首先登录到与您的组织关联的 GitHub 帐户,然后导航到位于 https://github.com/settings/profile 的 GitHub 个人资料页面。
通过单击屏幕左侧的姓名,然后在下拉菜单中选择您的组织来切换设置上下文。 这会将上下文从 个人设置 切换到 组织设置 。
在下一个屏幕上,您将看到您的 组织配置文件 ,您可以在其中更改设置,例如您的 组织显示名称 、组织 电子邮件 和组织 URL 。
由于 Grafana 使用 OAuth(一种授予远程第三方访问本地资源的开放标准)来通过 GitHub 对用户进行身份验证,因此您需要在 GitHub 中创建一个新的 OAuth 应用程序。
单击屏幕左下方开发者设置下的OAuth Apps链接。
如果您在 GitHub 上还没有与您的组织关联的任何 OAuth 应用程序,您将被告知 没有组织拥有的应用程序 。 否则,您将看到已连接到您帐户的 OAuth 应用程序列表。
单击 New OAuth App 按钮继续。
在下一个屏幕上,填写有关 Grafana 安装的以下详细信息:
- 应用程序名称 - 这有助于您区分不同的 OAuth 应用程序。
- 主页 URL - 这告诉 GitHub 在哪里可以找到 Grafana。 在此字段中键入
https://your_domain
,将your_domain
替换为您的域。 - 应用程序描述 - 这提供了您的 OAuth 应用程序用途的描述。
- 应用程序回调 URL - 这是成功验证后将发送用户的地址。 对于 Grafana,此字段必须设置为
https://your_domain/login/github
。
请记住,通过 GitHub 登录的 Grafana 用户将看到您在前三个字段中输入的值,因此请务必输入有意义且适当的内容。
完成后,表格将如下所示:
点击绿色的【X16X】注册应用【X40X】按钮。
您现在将被重定向到包含与您的新 OAuth 应用程序关联的 Client ID 和 Client Secret 的页面。 记下这两个值,因为您需要将它们添加到 Grafana 的主配置文件中才能完成设置。
警告: 确保将您的 Client ID 和 Client Secret 保存在安全和非公开的位置,因为它们可能被用作攻击的基础.
创建 GitHub OAuth 应用程序后,您现在可以重新配置 Grafana 以使用 GitHub 进行身份验证。
(可选)第 6 步 — 将 Grafana 配置为 GitHub OAuth 应用程序
要完成 Grafana 设置的 GitHub 身份验证,您现在将对 Grafana 配置文件进行一些更改。
首先,打开主要的 Grafana 配置文件。
sudo nano /etc/grafana/grafana.ini
找到 [auth.github]
标题,并通过删除除 ;allowed_domains =
和 ;team_ids =
之外的每一行开头的 ;
来取消注释该部分,在本教程。
接下来,进行以下更改:
- 将
enabled
和allow_sign_up
设置为true
。 这将启用 GitHub 身份验证并允许允许组织的成员自己创建帐户。 请注意,此设置与您在 Step 4 中更改的[users]
下的allow_sign_up
属性不同。 - 将
client_id
和client_secret
设置为您在创建 GitHub OAuth 应用程序时获得的值。 - 将
allowed_organizations
设置为您组织的名称,以确保只有您组织的成员才能注册和登录 Grafana。
完整的配置将如下所示:
/etc/grafana/grafana.ini
... [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 的所有信息。 要完成设置,您需要在反向代理后面启用重定向。 这是通过在 [server]
标题下设置 root_url
值来完成的。
/etc/grafana/grafana.ini
... [server] root_url = https://your_domain ...
保存配置并关闭文件。
然后,重新启动 Grafana 以激活更改:
sudo systemctl restart grafana-server
最后,验证服务是否已启动并正在运行。
sudo systemctl status grafana-server
输出将指示服务为 active (running)
。
现在,通过导航到 https://your_domain
来测试您的新身份验证系统。 如果您已经登录 Grafana,请将鼠标悬停在屏幕左下角的头像日志上,然后在您的姓名旁边显示的二级菜单中单击 退出 。
在登录页面上,您会在原来的 Log in 按钮下看到一个新部分,其中包括一个带有 GitHub 徽标的 Sign in with GitHub 按钮。
单击 Sign in with GitHub 按钮以重定向到 GitHub,您将在此处登录您的 GitHub 帐户并确认您打算 Authorize Grafana。
单击绿色的 Authorize your_github_organization 按钮。
注意: 确保您的 GitHub 帐户是您批准的组织的成员,并且您的 Grafana 电子邮件地址与您的 GitHub 电子邮件地址匹配。 如果您尝试使用不是您批准的组织成员的 GitHub 帐户进行身份验证,您将收到 Login Failed 消息,告诉您 User 不是所需组织之一的成员[ X213X]。
您现在将使用现有的 Grafana 帐户登录。 如果您登录的用户不存在 Grafana 帐户,Grafana 将创建一个具有 Viewer 权限的新用户帐户,确保新用户只能使用现有仪表板。
要更改新用户的默认权限,请打开主 Grafana 配置文件进行编辑。
sudo nano /etc/grafana/grafana.ini
在 [users]
标题下找到 auto_assign_org_role
指令,并通过删除行首的 ;
取消注释设置。
将指令设置为以下值之一:
Viewer
— 只能使用现有的仪表板Editor
— 可以使用、修改和添加仪表板Admin
— 有权做所有事情
本教程将自动分配设置为 Viewer
:
/etc/grafana/grafana.ini
... [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 安装,请参阅官方和社区构建的 dashboards 和 plugins 列表。 要了解有关使用 Grafana 的更多信息,请参阅 Grafana 官方文档 ,或查看我们的 其他监控教程 。