如何在Ubuntu16.04上安装和保护Grafana
介绍
Grafana 是一个开源的数据可视化和监控工具,它集成了来自 Prometheus、InfluxDB、Graphite、和 弹性搜索 。 Grafana 让您可以为您的数据创建警报、通知和临时过滤器,同时还可以通过内置的共享功能更轻松地与您的队友进行协作。
在本教程中,您将安装 Grafana 并使用 SSL 证书 和 Nginx 反向代理 对其进行保护,然后您将修改 Grafana 的默认设置以获得更严格的安全性。
先决条件
要遵循本教程,您将需要:
- 按照 Initial Server Setup with Ubuntu 16.04 教程设置一台 Ubuntu 16.04 服务器,包括 sudo 非 root 用户和防火墙。
- 完全注册的域名。 本教程始终使用
example.com
。 您可以在 Namecheap 上购买一个域名,在 Freenom 上免费获得一个域名,或者使用您选择的域名注册商。 - 为您的服务器设置了以下 DNS 记录。 您可以关注 如何使用 DigitalOcean 设置主机名,了解如何添加它们的详细信息。 带有 example.com 的 A 记录指向您的服务器的公共 IP 地址。 www.example.com 的 A 记录指向您服务器的公共 IP 地址。
- 按照 如何在 Ubuntu 16.04 上安装 Nginx 教程的前两个步骤设置 Nginx。
- 一个配置了 Let's Encrypt 的 Nginx 服务器块,可以按照 How To Set Up Let's Encrypt with Nginx Server Blocks on Ubuntu 16.04 进行设置。
- 或者,要设置 GitHub 身份验证,您需要一个与组织 关联的 GitHub 帐户。
第 1 步 — 安装 Grafana
您可以通过 直接从其官方网站 下载或通过 APT 存储库 来安装 Grafana。 因为 APT 存储库可以更轻松地安装和管理 Grafana 的更新,所以我们将使用该方法。
虽然 Grafana 在 官方 Ubuntu 16.04 软件包存储库 中可用,但 Grafana 的版本可能不是最新的,因此我们将使用 Grafana 在 packagecloud 上的官方存储库。
使用 curl
下载 packagecloud GPG 密钥,然后 将输出 传输到 apt-key
。 这会将密钥添加到您的 APT 安装的受信任密钥列表中,这将允许您下载和验证 GPG 签名的 Grafana 包。
curl https://packagecloud.io/gpg.key | sudo apt-key add -
接下来,将 packagecloud 存储库添加到您的 APT 源。
sudo add-apt-repository "deb https://packagecloud.io/grafana/stable/debian/ stretch main"
注意: 虽然本教程是为 Ubuntu 16.04 编写的,但 packagecloud 仅提供 Debian、Python、RPM 和 RubyGem 包。 不过,您可以在上一个命令中使用基于 Debian 的存储库,因为它包含的 Grafana 包与 Ubuntu 的相同。 请务必使用 stretch
存储库来获取最新版本的 Grafana。
刷新您的 APT 缓存以更新您的软件包列表。
sudo apt-get update
并且,确保 Grafana 将从 packagecloud 存储库安装。
apt-cache policy grafana
输出会告诉您将安装的 Grafana 版本以及将从何处检索包。 验证安装候选者将来自 https://packagecloud.io/grafana/stable/debian
的官方 Grafana 存储库。
Output of apt-cache policy grafanagrafana: Installed: (none) Candidate: 4.6.2 Version table: 4.6.2 500 500 https://packagecloud.io/grafana/stable/debian stretch/main amd64 Packages ...
您现在可以继续安装。
sudo apt-get install grafana
安装 Grafana 后,您就可以启动它了。
sudo systemctl start grafana-server
接下来,通过检查服务的状态来验证 Grafana 是否正在运行。
sudo systemctl status grafana-server
输出包含有关 Grafana 进程的信息,包括其状态、主进程标识符 (PID)、内存使用情况等。
如果服务状态不是 active (running)
,请查看输出并重新跟踪前面的步骤以解决问题。
Output of grafana-server status● grafana-server.service - Grafana instance Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2017-12-07 12:10:33 UTC; 19s ago Docs: http://docs.grafana.org Main PID: 14796 (grafana-server) Tasks: 6 Memory: 32.0M CPU: 472ms CGroup: /system.slice/grafana-server.service └─14796 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins ...
最后,启用服务以在启动时自动启动 Grafana。
sudo systemctl enable grafana-server
输出确认 systemd
已创建必要的符号链接以自动启动 Grafana。 如果您收到错误消息,请按照终端中的说明解决问题,然后再继续。
Output of systemctl enable grafana-serverSynchronizing state of grafana-server.service with SysV init with /lib/systemd/systemd-sysv-install... Executing /lib/systemd/systemd-sysv-install enable grafana-server Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
Grafana 现在已安装并可以使用。 接下来,使用反向代理和 SSL 证书保护与 Grafana 的连接。
第 2 步 — 设置反向代理
使用 SSL 证书将通过加密与 Grafana 的连接来确保您的数据安全。 但是,要使用此连接,您首先需要重新配置 Nginx。
在 Prerequisites 中使用 Let's Encrypt 打开您在设置 Nginx 服务器块时创建的 Nginx 配置文件。
sudo nano /etc/nginx/sites-available/example.com
找到以下块:
/etc/nginx/sites-available/example.com
... location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; } ...
因为您已经将 Nginx 配置为通过 SSL 进行通信,并且所有到服务器的 Web 流量都已经通过 Nginx,所以您只需告诉 Nginx 将所有请求转发到 Grafana,默认情况下在端口 3000
上运行。
删除该位置块中已有的try_files
行,替换为以下内容,均以proxy_
开头。
/etc/nginx/sites-available/example.com
... location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } ...
完成后,保存文件并关闭文本编辑器。
现在,测试新设置以确保一切配置正确。
sudo nginx -t
输出应该告诉您 syntax is ok
和 test is successful
。 如果您收到错误消息,请按照屏幕上的说明进行操作。
最后,通过重新加载 Nginx 来激活更改。
sudo systemctl reload nginx
您现在可以通过将 Web 浏览器指向 https://example.com
来访问默认的 Grafana 登录屏幕。 如果您无法访问 Grafana,请确认您的防火墙设置为允许端口 443
上的流量,然后重新跟踪之前的说明。
通过加密与 Grafana 的连接,您现在可以实施其他安全措施,首先是更改 Grafana 的默认管理凭据。
第 3 步 — 更新凭证
由于默认情况下每个 Grafana 安装都使用相同的管理登录凭据,因此在此步骤中,您将更新凭据以提高安全性。
首先从您的网络浏览器导航到 https://example.com
。 这将打开默认登录屏幕,您将在其中看到 Grafana 徽标,一个要求您输入 User 和 Password 的表单,一个 Log in 按钮,以及 忘记密码? 链接。
在 User 和 Password 字段中输入 admin,然后单击 Log in 按钮。
在下一个屏幕上,欢迎您来到 Home Dashboard。 您可以在此处添加数据源以及创建、预览和修改仪表板。
单击屏幕左上角的小 Grafana 徽标以调出应用程序的主菜单。 然后,将鼠标悬停在 admin 按钮上以打开第二组菜单选项。 最后,点击Profile按钮。
您现在位于 用户个人资料 页面,您可以在其中更改与您的帐户关联的 名称、电子邮件 和 用户名。 您还可以更新您的 Preferences 以进行 UI Theme 等设置,并且您可以更改密码。
在 Name、Email 和 Username 字段中输入您的姓名、电子邮件地址和您要使用的用户名,然后单击 Update[ Information 部分中的 X161X] 按钮以保存您的设置。
如果需要,您还可以更改 UI Theme 和 Timezone 以满足您的需要,然后按 Preferences 中的 Update 按钮区域以保存您的更改。 Grafana 提供 Dark 和 Light UI 主题,以及 Default 主题,默认设置为 Dark。
最后,通过点击页面底部的更改密码按钮更改与您的帐户关联的密码。 这将带您进入 更改密码 屏幕。
在 Old Password 字段中输入您当前的密码 admin,然后在 New Password 和 中输入您想开始使用的密码确认密码 字段。
单击更改密码保存新信息或按取消放弃更改。
从那里,您将返回到 用户配置文件 页面,您将在屏幕右上角看到一个绿色框,告诉您 用户密码已更改 [X186X ]。
您现在已经通过更改默认凭据来保护您的帐户,所以我们还要确保没有人可以在未经您许可的情况下创建新的 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] enabled = false ...
保存文件并退出文本编辑器。
要激活更改,请重新启动 Grafana。
sudo systemctl restart grafana-server
通过检查 Grafana 的服务状态来验证一切是否正常。
sudo systemctl status grafana-server
和以前一样,输出应该报告 Grafana 是 active (running)
。 如果不是,请查看任何终端消息以获取更多帮助。
现在,将您的网络浏览器指向 https://example.com
以确认没有 注册 按钮,并且您必须输入登录凭据才能登录。
如果您看到 注册 按钮或者您能够匿名登录,请在继续本教程之前重新检查前面的步骤以解决问题。
至此,Grafana 已完全配置并可以使用。 或者,您可以通过 GitHub 进行身份验证来简化组织的登录过程。
(可选)第 5 步 — 设置 GitHub OAuth 应用程序
对于登录的替代方法,您可以将 Grafana 配置为通过 GitHub 进行身份验证,这为授权的 GitHub 组织的所有成员提供登录访问权限。 当您希望允许多个开发人员协作和访问指标而无需创建特定于 Grafana 的凭据时,这可能特别有用。
首先登录到与您的组织关联的 GitHub 帐户,然后导航到位于 https://github.com/settings/profile
的 GitHub 个人资料页面。
在屏幕左侧的导航菜单中单击 组织设置 下的组织名称。
在下一个屏幕上,您将看到您的 组织配置文件 ,您可以在其中更改设置,例如您的 组织显示名称 、组织 电子邮件 和组织 URL 。
由于 Grafana 使用 OAuth(一种授予远程第三方访问本地资源的开放标准)来通过 GitHub 对用户进行身份验证,因此您需要在 GitHub 中创建一个新的 OAuth 应用程序。
单击屏幕左下方 开发者设置 下的 OAuth 应用程序 链接。
如果您在 GitHub 上还没有与您的组织关联的任何 OAuth 应用程序,您将被告知 没有组织拥有的应用程序 。 否则,您将看到已连接到您帐户的 OAuth 应用程序列表。
点击【X10X】注册应用【X37X】按钮继续。
在下一个屏幕上,您将填写有关 Grafana 安装的以下详细信息:
- 应用程序名称 - 这可以帮助您区分不同的 OAuth 应用程序。
- 主页 URL - 这告诉 GitHub 在哪里可以找到 Grafana。
- 应用程序描述 - 这提供了您的 OAuth 应用程序用途的描述。
- 应用程序回调 URL - 这是成功验证后将发送用户的地址。 对于 Grafana,此字段必须设置为
https://example.com/login/github
。
请记住,通过 GitHub 登录的 Grafana 用户将看到您在前三个字段中输入的值,因此请务必输入有意义且适当的内容。
完成后,表格应如下所示:
单击绿色的注册应用程序按钮。
您现在将被重定向到包含与您的新 OAuth 应用程序关联的 Client ID 和 Client Secret 的页面。 记下这两个值,因为您需要将它们添加到 Grafana 的主配置文件中才能完成设置。
警告: 确保将您的 Client ID 和 Client Secret 保存在安全和非公开的位置,因为它们可能被用作攻击的基础.
创建 GitHub OAuth 应用程序后,您现在可以重新配置 Grafana。
(可选)第 6 步 — 将 Grafana 配置为 GitHub OAuth 应用程序
首先,打开主要的 Grafana 配置文件。
sudo nano /etc/grafana/grafana.ini
找到 [auth.github]
标题,并通过删除每一行开头的 ;
来取消注释此部分,除了 ;team_ids=
,我们不会在本教程中使用它。
然后,将 Grafana 配置为将 GitHub 与您的 OAuth 应用程序的 client_id
和 client_secret
值一起使用。
- 将
enabled
和allow_sign_up
设置为真。 这将启用 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 ;team_ids = allowed_organizations = your_organization_name ...
您现在已经告诉 Grafana 它需要了解的有关 GitHub 的所有信息,但要完成设置,您需要在反向代理后面启用重定向。 这是通过在 [server]
标题下设置 root_url
值来完成的。
/etc/grafana/grafana.ini
... [server] root_url = https://example.com ...
保存配置并关闭文件。
然后,重新启动 Grafana 以激活更改。
sudo systemctl restart grafana-server
最后,验证服务是否已启动并正在运行。
sudo systemctl status grafana-server
如果输出未指示服务为 active (running)
,请参阅屏幕消息以获取更多信息。
现在,通过导航到 https://example.com
来测试您的新身份验证系统。 如果您已经登录 Grafana,请单击屏幕左上角的小 Grafana 徽标,将鼠标悬停在您的用户名上,然后在出现的二级菜单中单击 退出 在你名字的右边。
在登录页面上,您将在原始 Log in 按钮下看到一个新部分,其中包括一个带有 GitHub 徽标的 GitHub 按钮。
单击 GitHub 按钮以重定向到 GitHub,您需要在此处确认 Authorize Grafana 的意图。
单击绿色的 Authorize your_github_organization 按钮。 在此示例中,按钮显示为 Authorize SharkTheSammy。
如果您尝试使用不是您批准的组织成员的 GitHub 帐户进行身份验证,您将收到 Login Failed 消息告诉您,用户不是所需组织之一的成员。
如果 GitHub 帐户是您批准的组织的成员,并且您的 Grafana 电子邮件地址与您的 GitHub 电子邮件地址匹配,您将使用现有的 Grafana 帐户登录。
但是,如果您登录的用户不存在 Grafana 帐户,Grafana 将创建一个具有 Viewer 权限的新用户帐户,确保新用户只能使用现有仪表板。
要更改新用户的默认权限,请打开主 Grafana 配置文件进行编辑。
sudo nano /etc/grafana/grafana.ini
在 [users]
标题下找到 auto_assign_org_role
指令,并通过删除行首的 ;
取消注释设置。
将指令设置为以下值之一:
Viewer
— 只能使用现有的仪表板Editor
— 可以更改使用、修改和添加仪表板Admin
— 有权做所有事情
/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 用作系统监控软件堆栈的一部分,请参阅 如何在 Ubuntu 16.04 上安装 Prometheus 和 如何将 Prometheus 仪表板添加到 Grafana 。
要扩展您当前的 Grafana 安装,请参阅 官方和社区构建的仪表板列表 。
并且,要了解有关使用 Grafana 的更多信息,请参阅 官方 Grafana 文档 。