如何在 Ubuntu 18.04 上安装并保护 Grafana

作者选择了 /dev/color以作为 Write for Donations计划的一部分获得捐款。

介绍

Grafana是一个开源数据可视化和监控工具,可以集成来自诸如 Prometheus, InfluxDB, GraphiteElasticSearch等来源的复杂数据。

在本教程中,您将安装Grafana,并使用SSL证书(https://andsky.com/tech/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrs)和Nginx反向代理(https://andsky.com/tech/tutorials/understanding-nginx-http-proxying-load-balancing-buffering-and-caching)保护它。一旦设置了Grafana,您将有选择通过GitHub配置用户身份验证,允许您更好地组织您的团队权限。

前提条件

要遵循本教程,您将需要:

  • 通过遵循Ubuntu 18.04初始服务器设置的1个Ubuntu 18.04服务器,包括一个拥有 " sudo " 权限的非根基用户和一个配置有 " ufw " 的防火墙。
  • A全注册域名. 该教程全程使用"你的域". 您可以在 [Namecheap] (https://namecheap.com/) 上购买域名, 在 [Freenom] (http://www.freenom.com/en/index.html 上免费获取域名, 或者使用您选择的域名注册员.
  • 为您的服务器设置的以下 DNS 记录 。 您可以跟随[如何用 DigitalOcean (https://andsky.com/tech/tutorials/how-to-set-up-a-host-name-with-digitalocean) 设置主机名的详情,了解如何添加主机名.
  • 一个A 记录,其中你的域名指向您的服务器的公开IP地址.
  • 一个A 记录,其中www.your_domain'指向您的服务器的公开IP地址. X Nginx 是随[如何在Ubuntu 18.04 (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-18-04)) 设置的,包括用于您的域名的[服务器块 (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-18-04# step-5-%E2%80%93-setting-up-server-blocks-(recommended]。 *在可选的情况下,要设置GitHub认证,你需要一个GitHub账户与一个组织有关. (韩语)_

步骤 1 - 安装 Graphana

在这个第一步中,你将安装Grafana到你的Ubuntu 18.04服务器上。你可以通过直接从其官方网站下载Grafana(https://grafana.com/grafana/download)或通过一个APT存储库(https://andsky.com/tech/tutorials/ubuntu-and-debian-package-management-essentials# debian-package-management-tools-overview)来安装Grafana。

虽然Grafana在Ubuntu 18.04的官方包库中可用(LINK0),但Grafana的版本可能不是最新的,所以使用Grafana的官方库。

下载 Grafana GPG 密钥wget,然后 输出管道apt-key. 这将添加密钥到您的 APT 安装的可信密钥列表,这将允许您下载和验证 GPG 签名的 Grafana 包。

1wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

在此命令中,q选项关闭了wget的状态更新消息,而O输出你下载到终端的文件,这两个选项确保只有下载的文件的内容被导向到apt-key

接下来,将 Grafana 存储库添加到您的 APT 源:

1sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

更新 APT 缓存以更新您的包列表:

1sudo apt update

接下来,请确保 Grafana 将从 Grafana 存储库中安装:

1apt-cache policy grafana

之前的命令的输出告诉你你要安装的Grafana版本,以及你将从哪里下载该包。 请确保列表顶部的安装候选人来自官方Grafana存储库在https://packages.grafana.com/oss/deb`。

1[secondary_label Output of apt-cache policy grafana]
2grafana:
3  Installed: (none)
4  Candidate: 9.1.3
5  Version table:
6     9.1.3 500
7        500 https://packages.grafana.com/oss/deb stable/main amd64 Packages
8...

您现在可以开始安装:

1sudo apt install grafana

一旦安装了Grafana,请使用systemctl启动Grafana服务器:

1sudo systemctl start grafana-server

接下来,通过检查服务的状态来验证 Grafana 是否正在运行:

1sudo systemctl status grafana-server

您将收到类似于此的输出:

1[secondary_label Output of grafana-server status]
2 grafana-server.service - Grafana instance
3   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
4   Active: active (running) since Tue 2022-09-06 09:35:00 UTC; 5s ago
5     Docs: http://docs.grafana.org
6 Main PID: 22886 (grafana-server)
7    Tasks: 5 (limit: 546)
8...

此输出包含有关 Grafana 进程的信息,包括其状态、主要进程标识符(PID)等。

最后,允许服务在启动时自动启动Grafana:

1sudo systemctl enable grafana-server

您将获得以下输出:

1[secondary_label Output of systemctl enable grafana-server]
2Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
3Executing: /lib/systemd/systemd-sysv-install enable grafana-server
4Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

这证实了systemd已经创建了Autostart Grafana所需的符号链接。

Grafana 现在已安装并准备使用,接下来,您将使用反向代理和 SSL 证书来保护您的 Grafana 连接。

第2步:设置反向代理

使用 SSL 证书将通过加密与 Grafana 的连接来确保您的数据安全,但要使用此连接,您首先需要将 Nginx 重新配置为 Grafana 的反向代理。

打开您在设置 Nginx 服务器块时创建的 Nginx 配置文件,在 [Prerequisites](# prerequisites)中使用 Let's Encrypt。

1sudo nano /etc/nginx/sites-available/your_domain

点击下面的区块:

1[label /etc/nginx/sites-available/your_domain]
2...
3    location / {
4    	try_files $uri $uri/ =404;
5    }
6...

由于您已经配置了 Nginx 以通过 SSL 进行通信,并且所有到您的服务器的网络流量都已经通过 Nginx,所以您只需要告诉 Nginx 将所有请求转发到 Grafana,该端口默认情况下是 3000。

在这个位置块中删除现有的try_files行,并用以下选项取代它:

1[label /etc/nginx/sites-available/your_domain]
2...
3    location / {
4    	proxy_set_header Host $http_host;
5    	proxy_pass http://localhost:3000;
6    }
7...

这将将代理商地图到相应的端口,并将服务器名称传递到头部。

此外,为了使 Grafana Live WebSocket 连接正常工作,请在服务器部分之外添加以下部分:

1[label /etc/nginx/sites-available/your_domain]
2map $http_upgrade $connection_upgrade {
3    default upgrade;
4    '' close;
5}
6
7server {
8    ...

然后添加以下位置部分:

 1[label /etc/nginx/sites-available/your_domain]
 2...
 3    location /api/live {
 4    	proxy_http_version 1.1;
 5    	proxy_set_header Upgrade $http_upgrade;
 6    	proxy_set_header Connection $connection_upgrade;
 7    	proxy_set_header Host $http_host;
 8    	proxy_pass http://localhost:3000;
 9    }
10...

升级连接标题不会从客户端发送到代理服务器,因此,为了让代理服务器知道客户端要更改协议到WebSocket,这些标题应该被明确传递。

最终的配置应该是这样的:

 1[label /etc/nginx/sites-available/your_domain]
 2map $http_upgrade $connection_upgrade {
 3    default upgrade;
 4    '' close;
 5}
 6
 7server {
 8    ...
 9
10    root /var/www/your_domain/html;
11    index index.html index.htm index.nginx-debian.html;
12
13    server_name your_domain www.your_domain;
14
15    location / {
16    	proxy_set_header Host $http_host;
17    	proxy_pass http://localhost:3000;
18    }
19
20    location /api/live {
21    	proxy_http_version 1.1;
22    	proxy_set_header Upgrade $http_upgrade;
23    	proxy_set_header Connection $connection_upgrade;
24    	proxy_set_header Host $http_host;
25    	proxy_pass http://localhost:3000;
26    }
27}
28...

<$>[注] 注: 如果您使用了certbot工具来设置 Let's Encrypt SSL 证书,则您的配置文件可能包含由 Certbot 添加的额外的行和服务器块。

一旦完成,保存并关闭文件,按CTRL+X,然后按Y,然后按ENTER,如果你使用nano

现在,测试新的设置,以确保一切都配置正确:

1sudo nginx -t

您将获得以下输出:

1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,通过重新加载 Nginx 来激活这些更改:

1sudo systemctl reload nginx

您现在可以访问默认的Grafana登录屏幕,将您的网页浏览器指向https://your_domain. 如果您无法访问Grafana,请检查您的防火墙是否设置为允许在端口 443`上的流量,然后重新跟踪之前的指示。

通过加密与 Grafana 的连接,您现在可以实施额外的安全措施,从更改 Grafana 的默认管理凭据开始。

步骤 3 – 更新凭证

由于每个 Grafana 安装都默认使用相同的管理凭据,因此最好尽快更改登录信息。

从您的 Web 浏览器开始导航到 https://your_domain. 这将带来默认登录屏幕,在那里您将看到 Grafana 标志,一个表单要求您输入一个 电子邮件或用户名 和 ** 密码** ,一个 ** 登录** 按钮和一个 ** 忘记您的密码?** 链接。

Grafana login page showing prompts for email or username as well as password

输入admin到两个域 电子邮件或用户名 和 ** 密码** ,然后点击登录按钮。

在下一个屏幕上,您将被要求通过更改默认密码来使您的帐户更安全:

Change password prompt from Grafana

输入您想要开始使用的密码到 新密码 和 ** 确认新密码** 字段。

从这里,您可以点击 ** Submit** 来保存新信息或按 ** Skip** 跳过此步骤. 如果您跳过,您将被要求下次登录更改密码。

为了增加您的 Grafana 设置的安全性,点击 ** 保存** . 您将返回到 ** 欢迎来到 Grafana** 页面:

Grafan's home dashboard

您现在通过更改默认身份验证来保护您的帐户,接下来,您将对您的 Grafana 配置进行更改,以便没有人能够在没有您的许可的情况下创建新的 Grafana 帐户。

步骤 4 – 禁用 Grafana 注册和匿名访问

Grafana 提供了允许访问者自己创建用户帐户和预览仪表板的选项,而无需注册。当 Grafana 无法通过互联网访问或使用公共数据(如服务状态)时,您可能希望允许这些功能。

首先,打开 Grafana 的主要配置文件进行编辑:

1sudo nano /etc/grafana/grafana.ini

[用户]标题下找到下面的allow_sign_up指令:

1[label /etc/grafana/grafana.ini]
2...
3[users]
4# disable user signup / registration
5;allow_sign_up = true
6...

启用此指令以真实添加一个 ** 登录** 按钮到登录屏幕上,允许用户注册自己并访问Grafana。

禁用此指令将删除登录按钮,并加强Grafana的安全性和隐私。

通过在行开始时删除;,然后将选项设置为:

1[label /etc/grafana/grafana.ini]
2...
3[users]
4# disable user signup / registration
5allow_sign_up = false
6...

接下来,在[auth.anonymous]标题下找到下面的启用指令:

1[label /etc/grafana/grafana.ini]
2...
3[auth.anonymous]
4# enable anonymous access
5;enabled = false
6...

启用设置为真实允许未注册用户访问您的仪表板;将此选项设置为仅限制注册用户访问仪表板。

通过在行开始时删除;,然后将选项设置为

1[label /etc/grafana/grafana.ini]
2...
3[auth.anonymous]
4# enable anonymous access
5enabled = false
6...

保存文件并退出文本编辑器。

要激活这些更改,请重新启动 Grafana:

1sudo systemctl restart grafana-server

通过检查Grafana的服务状态来验证一切是否正常工作:

1sudo systemctl status grafana-server

与之前一样,输出将报告Grafana是活跃(运行)

现在,点击您的网页浏览器到 https://your_domain. 要返回 登录 屏幕,将你的方针带到屏幕的左下方,然后单击出现的 ** 退出** 选项。

一旦您退出,请验证没有登录按钮,并且您无法在没有输入登录凭证的情况下登录。

此时,Grafana已完全配置并准备使用,接下来,您可以通过GitHub进行身份验证来简化您的组织的登录过程。

(可选)步骤 5 — 设置一个 GitHub OAuth 应用程序

对于登录的替代方法,您可以将Grafana配置为通过GitHub进行身份验证,这为所有授权的GitHub组织的成员提供了登录访问权限。

首先,登录与您的组织相关的 GitHub 帐户,然后导航到您的 GitHub 个人资料页面

在屏幕左侧的导航菜单中,点击组织的名称 组织设置

GitHub organization settings

在下一个屏幕上,你会看到你的 组织配置文件 ,在那里你可以更改设置,如你的 ** 组织显示名称** ,组织 ** 电子邮件** 和组织 ** URL** 。

由于Grafana使用了 OAuth —一个开放的标准,允许远程第三方访问本地资源 —通过GitHub验证用户,您需要创建一个新的 OAuth应用程序在GitHub

在屏幕左下方的开发者设置中点击OAuth Apps链接。

如果您在 GitHub 上没有与您的组织相关的任何 OAuth 应用程序,您将被告知有 ** 没有组织所有应用程序** .否则,您将看到已连接到您的帐户的 OAuth 应用程序列表。

点击注册应用程序按钮继续。

在下一个屏幕上,填写有关您的Grafana安装的以下细节:

  • 应用程序名称 :这有助于你区分你的不同OAuth应用程序彼此。
  • 主页URL :这告诉GitHub在哪里找到Grafana。输入这个字段中的https://your_domain,用你的域代替your_domain`。
  • 应用描述 :这提供了你的OAuth应用程序的目的的描述。
  • 应用程序回调URL :这是用户成功验证后将发送的地址。对于Grafana,这个字段必须设置为https://your_domain/login/gubith.

请记住,通过GitHub登录的Grafana用户会看到您在前三个字段中输入的值,所以请确保输入有意义和适当的东西。

完成后,表格将看起来像:

GitHub form for registering an OAuth Application

点击注册按钮。

您现在将被重定向到包含与您的新的 OAuth 应用程序相关联的 客户 ID 和 ** 客户秘密** 的页面. 请注意这两个值,因为您需要将它们添加到 Grafana 的主要配置文件以完成设置。

<$>[警告] ** 警告:** 请确保将您的 ** 客户 ID** 和 ** 客户秘密** 保存在安全且非公开的位置,因为它们可能会作为攻击的基础。

通过创建您的 GitHub OAuth 应用程序,您现在已经准备好重新配置 Grafana 以使用 GitHub 进行身份验证。

(可选) 第 6 步 — 将 Grafana 配置为 GitHub OAuth 应用

为了为您的 Grafana 设置完成 GitHub 身份验证,您现在将对您的 Grafana 配置文件进行一些更改。

首先,打开主要的 Grafana 配置文件。

1sudo nano /etc/grafana/grafana.ini

查找[auth.github]标题,并通过删除每个行开始的;;;allowed_domains;team_ids=除外,删除此部分的评论。

接下来,将 Grafana 配置为使用 GitHub 与 OAuth 应用程序的client_idclient_secret值。

  • 允许允许_签名设置为真实。这将允许GitHub身份验证,并允许允许允许的组织成员自己创建帐户。 请注意,此设置不同于在用户下所更改的允许_签名属性(步骤 4)(# step-4-%E2%80%94-disabling-grafana-registrations-and-anonymous-access)。
  • client_idclient_secret设置为您在创建GitHub OAuth应用程序时获得的值。
  • 允许_组织设置为您的组织名称,以确保只有组织成员可以登录并登录Graf.

完整的配置将看起来像:

 1[label /etc/grafana/grafana.ini]
 2...
 3[auth.github]
 4enabled = true
 5allow_sign_up = true
 6client_id = your_client_id_from_github
 7client_secret = your_client_secret_from_github
 8scopes = user:email,read:org
 9auth_url = https://github.com/login/oauth/authorize
10token_url = https://github.com/login/oauth/access_token
11api_url = https://api.github.com/user
12;allowed_domains =
13;team_ids =
14allowed_organizations = your_organization_name
15...

现在你已经告诉了Grafana关于GitHub所需的一切。为了完成设置,你需要在反向代理程序背后启用重定向。

1[label /etc/grafana/grafana.ini]
2...
3[server]
4root_url = https://your_domain
5...

保存您的配置并关闭文件。

然后,重新启动 Grafana 以激活这些更改:

1sudo systemctl restart grafana-server

最后,检查服务是否已启动和运行。

1sudo systemctl status grafana-server

输出将表示服务是活跃(运行)

现在,通过导航到https://your_domain来测试你的新身份验证系统. 如果你已经登录了Grafana,那么在屏幕的左下角移动你的鼠标,然后点击你的名字旁边的辅助菜单中的退出

在登录页面上,你会看到一个新的部分,在原来的 ** 登录 ** 按钮下,其中包括一个 ** 登录与 GitHub ** 按钮与 GitHub 标志。

Grafana login page, now showing option to sign in with GitHub

点击在 GitHub 中登录按钮将被重定向到 GitHub,在那里您将登录您的 GitHub 帐户并确认您的意图。

点击绿色, ** 允许 your_github_organization** 按钮。

<$>[注] 注: 请确保您的 GitHub 帐户是您批准的组织的成员,您的 Grafana 电子邮件地址与您的 GitHub 电子邮件地址匹配。

如果您已登录的用户的 Grafana 帐户已经不存在,Grafana 将创建具有 Viewer 权限的新用户帐户,以确保新用户只能使用现有仪表板。

若要更改新用户的默认权限,请打开主要的 Grafana 配置文件以进行编辑。

1sudo nano /etc/grafana/grafana.ini

[用户]标题下找到auto_assign_org_role指令,并通过在行开始时删除;删除该设置。

将指令设置为下列值之一:

  • Viewer:只能使用现有仪表板。
  • Editor:可以更改使用、修改和添加仪表板。
  • Admin:可以做任何事情。

本教程将自动分配设置为Viewer:

1[label /etc/grafana/grafana.ini]
2...
3[users]
4...
5auto_assign_org_role = Viewer
6...

保存更改后,关闭文件并重新启动 Grafana:

1sudo systemctl restart grafana-server

查看服务的状态:

1sudo systemctl status grafana-server

与之前一样,状态将读取活跃(运行)

此时,您已经完全配置了 Grafana,以允许 GitHub 组织的成员注册并使用您的 Grafana 安装。

结论

在本教程中,您安装、配置和保护了Grafana,您还允许组织成员通过GitHub进行身份验证。

要扩展当前的 Grafana 安装,请参阅 官方和社区构建仪表板列表。 有关一般使用 Grafana 的更多信息,请参阅 官方 Grafana 文档,或参阅我们的 其他监控教程

Published At
Categories with 技术
comments powered by Disqus