如何在 Ubuntu 20.04 上安装和保护 Grafana

作者选择了 COVID-19 救援基金作为 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 20.04初始服务器设置指南设置的1个Ubuntu 20.04服务器,包括一个拥有 " sudo " 权限的非根基用户和一个配置有 " ufw " 的防火墙。
  • A全注册域名. 该教程全程使用"你的域". 您可以在 [Namecheap] (https://namecheap.com/) 上购买域名, 在 [Freenom] (http://www.freenom.com/en/index.html 上免费获取域名, 或者使用您选择的域名注册员.
  • 为您的服务器设置的以下 DNS 记录 。 您可以跟随[如何添加域 (https://www.digitalocean.com/docs/networking/dns/how-to/add-domains/) 文章详细了解如果您正在使用 DigitalOcean 如何添加域名.
  • 一个A 记录,其中您域名的域名指您服务器的公开IP地址.
    • 一个A 记录,其中www.your_domain指您服务器的公开IP地址.
  • Nginx 设置,其依据是[如何在Ubuntu 20.04上安装 Nginx (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-20-04) 辅导系统,包括为您的域名设置一个[服务器块 (https://andsky.com/tech/tutorials/how-to-install-nginx-on-ubuntu-20-04# step-5-%E2%80%93-setting-up-server-blocks-(recommended].
  • An Nginx 服务器块,其中包含让我们加密的配置,您可以跟随如何用Ubuntu 20.04进行加密设置。 *在可选的情况下,要设置GitHub认证,你需要一个GitHub账户与一个组织有关. (韩语)_

步骤 1 - 安装 Graphana

在这个第一步中,你将安装Grafana到你的Ubuntu 20.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 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

您现在可以开始安装:

1sudo apt install grafana

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

1sudo systemctl start grafana-server

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

1sudo systemctl status grafana-server

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

1[secondary_label Output]
2 grafana-server.service - Grafana instance
3     Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
4   Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago
5     Docs: http://docs.grafana.org
6 Main PID: 15982 (grafana-server)
7    Tasks: 7 (limit: 1137)
8...

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

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

1sudo systemctl enable grafana-server

您将获得以下输出:

1[secondary_label Output]
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]
 2server {
 3...
 4        location /api/live {
 5           proxy_http_version 1.1;
 6           proxy_set_header Upgrade $http_upgrade;
 7           proxy_set_header Connection $connection_upgrade;
 8           proxy_set_header Host $http_host;
 9           proxy_pass http://localhost:3000;
10     }
11...

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

最终的配置将是这样的:

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

一旦完成,保存并关闭文件,按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

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

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

Change Password

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

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

为了增加您的 Grafana 设置的安全性,点击 ** Submit** . 您将前往 ** Welcome to Grafana** 仪表板:

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 个人资料页面

切换设置的背景,点击屏幕的左侧你的名字,然后从下滑菜单中选择你的组织。

在下一个屏幕上,你会看到你的 组织配置文件 ,在那里你可以更改设置,如你的 ** 组织显示名称** ,组织 ** 电子邮件** 和组织 ** 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 Register 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 =除外,删除此部分的评论。

接下来,做以下变化:

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

完整的配置将是这样的:

 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 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