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

引言

Grafana 是一个开源的数据可视化和监控工具,可以与 Prometheus、InfluxDB、Graphite 和 ElasticSearch 等复杂数据源集成。通过内置的共享功能,Grafana 允许你创建警报、通知和即席过滤器,同时更加便于与团队成员合作。

在这个教程中,您将安装Grafana并使用SSL证书和Nginx反向代理确保其安全。一旦设置好Grafana,您将可以通过GitHub配置用户认证,从而更好地组织您的团队权限。

先决条件

要跟随这个教程,你需要:

  • One Ubuntu 20.04 server set up by following the Initial Server Setup Guide for Ubuntu 20.04, including a non-root user with sudo privileges and a firewall configured with ufw.
  • A fully registered domain name. This tutorial uses your_domain throughout. You can purchase a domain name on Namecheap, get one for free on Freenom, or use the domain registrar of your choice.
  • The following DNS records set up for your server. You can follow the How To Add Domains article for details on how to add them if you are using Silicon Cloud.

    An A record with your_domain pointing to your server’s public IP address.
    An A record with www.your_domain pointing to your server’s public IP address.

  • Nginx set up by following the How To Install Nginx on Ubuntu 20.04 tutorial, including a server block for your domain.
  • An Nginx server block with Let’s Encrypt configured, which you can set up by following How To Secure Nginx with Let’s Encrypt on Ubuntu 20.04.
  • Optionally, to set up GitHub authentication, you’ll need a GitHub account associated with an organization.

第一步—安装Grafana

在这第一步中,你将在你的Ubuntu 20.04服务器上安装Grafana。你可以通过直接从官方网站下载或通过APT存储库安装Grafana。由于APT存储库使得安装和管理Grafana的更新更加容易,所以在本教程中你将使用该方法安装。

使用wget命令下载Grafana的GPG密钥,然后将输出导入apt-key。这将将该密钥添加到您的APT安装的可信密钥列表中,从而允许您下载和验证经GPG签名的Grafana软件包。

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

在此命令中,选项 -q 关闭 wget 的状态更新信息,而 -O 将下载的文件输出到终端。这两个选项确保只有下载文件的内容被管道传输到 apt-key。

接下来,在您的APT源中添加Grafana存储库。

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

刷新你的APT缓存以更新软件包列表。

  1. sudo apt update

你现在可以开始安装了。

  1. sudo apt install grafana

一旦安装了Grafana,使用systemctl来启动Grafana服务器。

  1. sudo systemctl start grafana-server

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

  1. 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。

  1. sudo systemctl enable grafana-server

你将会收到以下的输出结果:

Output
Synchronizing 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 的连接安全。

第二步 – 设置反向代理

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

在先决条件中使用Let’s Encrypt设置Nginx服务器块时创建的Nginx配置文件。您可以使用任何文本编辑器,但在本教程中,我们将使用nano来打开它。

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

找到以下的区块。

您的域名的配置文件位于/etc/nginx/sites-available。
...
	location / {
        try_files $uri $uri/ =404;
	}
...

因为您已经配置了Nginx以通过SSL进行通信,并且所有的网页流量已经经过了Nginx,所以您只需要告诉Nginx将所有请求转发到Grafana,默认情况下Grafana运行在3000端口上。

在此位置块中删除现有的 try_files 行,并将其替换为以下选项:

您的域名可在/etc/nginx/sites-available/中找到。
...
	location / {
	   proxy_set_header Host $http_host;
	   proxy_pass http://localhost:3000;
	}
...

这将把代理映射到适当的端口,并将服务器名称传递到头部。

此外,为了使Grafana实时WebSocket连接正常工作,请在服务器节外添加以下部分。

您的域名的流程配置文件位于/etc/nginx/sites-available/your_domain。
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
    ...

然后在服务器块中添加以下位置部分。

您的域名的配置文件位于 /etc/nginx/sites-available/your_domain。
server {
...
        location /api/live {
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
           proxy_set_header Host $http_host;
           proxy_pass http://localhost:3000;
	 }
...

客户端不会向被代理的服务器发送Upgrade和Connection标头。因此,为了让被代理的服务器知道客户端打算将协议更改为WebSocket,这些标头必须明确传递。

最终的配置会看起来像这样:

你的域名的/etc/nginx/sites-available/配置文件
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
        listen 80;
        listen [::]:80;

        root /var/www/your_domain/html;
        index index.html index.htm index.nginx-debian.html;

        server_name your_domain www.your_domain;

	location / {
	   proxy_set_header Host $http_host;
	  	proxy_pass http://localhost:3000;
	}

	location /api/live {
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection $connection_upgrade;
           proxy_set_header Host $http_host;
           proxy_pass http://localhost:3000;
	}
}

一旦完成,使用nano的话,按下CTRL+X、Y,然后按ENTER来保存并关闭文件。

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

  1. sudo nginx -t

你将会收到如下的输出结果。

Output
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

最后,通过重新加载Nginx来激活更改。

  1. sudo systemctl reload nginx

您可以通过将您的网络浏览器指向https://your_domain来访问默认的Grafana登录界面。如果无法访问Grafana,请确保防火墙已设置为允许443端口的流量通过,然后重新按照之前的指示操作。

通过对Grafana的连接进行加密,您现在可以实施额外的安全措施,首先是更改Grafana的默认管理员凭据。

第三步 – 更新凭证

由于每个Grafana安装默认使用相同的管理凭据,所以最佳做法是尽快更改您的登录信息。在这一步中,您将更新凭据以提高安全性。

从您的网页浏览器中导航到https://your_domain,这将显示默认的登录界面,您会看到Grafana的标志,一个要求您输入电子邮件或用户名和密码的表单,一个登录按钮,以及一个“忘记密码?”链接。

Grafana Login

在邮件或用户名和密码字段中输入”admin”,然后点击登录按钮。

在接下来的屏幕上,您将被要求通过更改默认密码来增加账户的安全性。

Change Password

请在“新密码”和“确认新密码”栏中输入您想要使用的密码。

从这里,你可以点击提交按钮保存新的信息,或者点击跳过按钮跳过这一步骤。如果你选择跳过,下次登录时会提示你更改密码。

为了增加您的Grafana设置的安全性,请点击提交。您将进入欢迎来到Grafana仪表盘:

Home Dashboard

你已经通过更改默认凭据来确保你的账户的安全。接下来,你将修改你的Grafana配置,以便任何人在没有你的许可下无法创建新的Grafana账户。

第四步——禁用Grafana的注册和匿名访问

Grafana提供选项,允许访客自行创建用户账户并预览仪表盘,无需注册。当Grafana无法通过互联网访问或者与公开可用的数据(如服务状态)进行交互时,可能希望开启这些功能。然而,在在线使用Grafana处理敏感数据时,匿名访问可能成为安全问题。为了解决这个问题,您需要对Grafana的配置进行一些更改。

开始打开Grafana的主配置文件进行编辑:

  1. sudo nano /etc/grafana/grafana.ini

请在[users]标题下找到以下allow_sign_up指令。

/etc/grafana/grafana.ini 可以用以下方式进行中文表达:格拉法纳配置文件路径为 /etc/grafana/grafana.ini。
...
[users]
# disable user signup / registration
;allow_sign_up = true
...

启用此指令后,将在登录界面上添加一个“注册”按钮,允许用户自行注册并访问Grafana。

通过将此指令设置为false可以禁用“注册”按钮,加强Grafana的安全和隐私保护。

通过删除行首的分号,并将选项设置为false来取消对该指令的注释。

/etc/grafana/grafana.ini:请将以下内容用中文进行本地化处理,只需要提供一种选项。
...
[users]
# disable user signup / registration
allow_sign_up = false
...

接下来,在 [auth.anonymous] 部分找到以下启用指令。

以下是/etc/grafana/grafana.ini的同义句:
1. /etc/grafana/grafana.ini的配置文件
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

将设置项设置为true可以让未注册用户访问你的仪表盘;将该选项设置为false则仅限已注册用户访问仪表盘。

通过移除行首的分号,并将选项设为false来取消对本指令的注释。

/etc/grafana/grafana.ini的中文释义是:格拉法纳的配置文件grafana.ini。
...
[auth.anonymous]
# enable anonymous access
enabled = false
...

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

为了激活更改,请重新启动Grafana:

  1. sudo systemctl restart grafana-server

通过检查Grafana的服务状态,验证一切是否正常运作。

  1. sudo systemctl status grafana-server

就像之前一样,输出将报告Grafana是活动的(正在运行)。

现在,请把你的网络浏览器指向https://你的域名。要返回到注册页面,请将光标移动到屏幕下方左边的头像上,然后点击出现的“退出”选项。

一旦您退出登录,请验证是否没有“注册”按钮,并且在未输入登录凭据的情况下无法登录。

目前,Grafana已经完全配置完成并准备好使用了。接下来,您可以通过GitHub进行身份认证来简化组织的登录流程。

(可选)第5步 – 设置GitHub OAuth应用程序

对于登录的另一种方法,您可以配置Grafana通过GitHub进行身份验证,该方法提供给所有授权的GitHub组织的成员登录访问权限。当您希望允许多个开发人员协作并访问指标,而无需创建特定于Grafana的凭据时,这可能非常有用。

首先,使用与您的组织关联的GitHub账户登录,然后导航到您的GitHub个人资料页面。

通过点击屏幕左侧的您的姓名,然后在下拉菜单中选择您的组织,可以切换设置上下文。这将从个人设置切换到组织设置。

在下一个屏幕上,您将看到您的组织概况,您可以在其中更改诸如组织显示名称、组织电子邮件和组织网址等设置。

由于Grafana使用OAuth(一种用于授权远程第三方访问本地资源的开放标准)通过GitHub对用户进行身份认证,所以您需要在GitHub上创建一个新的OAuth应用程序。

点击屏幕左下角的开发者设置下的OAuth应用链接。

如果您在GitHub上尚未与组织关联任何OAuth应用程序,系统将显示”没有组织所有的应用程序”的提示信息。否则,您将看到已与您的账号连接的OAuth应用程序列表。

点击“注册新应用”按钮继续。

在下一个屏幕上,填写关于您的Grafana安装的以下详细信息:

  • Application name: This helps you distinguish your different OAuth applications from one another.
  • Homepage URL: This tells GitHub where to find Grafana. Type https://your_domain into this field, replacing your_domain with your domain.
  • Application Description: This provides a description of your OAuth application’s purpose.
  • Application callback URL: This is the address where users will be sent once successfully authenticated. For Grafana, this field must be set to https://your_domain/login/github.

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

当完成时,表格的样子会像这样:

GitHub Register OAuth Application

点击注册应用按钮。

您将会被重定向到一个包含与您的新的OAuth应用程序相关的客户端ID和客户端密钥的页面。请记下这两个值,因为您需要将它们添加到Grafana的主配置文件中以完成设置。

Warning

警告:请确保将您的客户端ID和客户端秘钥妥善保存在安全且非公开的地方,因为它们可能被用作攻击的基础。

在创建了 GitHub OAuth 应用程序后,您现在可以重新配置 Grafana,以使用 GitHub 进行身份验证。

(可选)第六步 – 配置 Grafana 作为 GitHub OAuth 应用程序

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

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

  1. sudo nano /etc/grafana/grafana.ini

请找到 [auth.github] 标题,并取消注释此部分,方法是删除每行开头的;,除了;allowed_domains =和;team_ids =以外的行。在本教程中,这两行不会被更改。

接下来,进行以下更改:

  • Set enabled and allow_sign_up to true. This will enable GitHub Authentication and permit members of the allowed organization to create accounts themselves. Note that this setting is different from the allow_sign_up property under [users] that you changed in Step 4.
  • Set client_id and client_secret to the values you got while creating your GitHub OAuth application.
  • Set allowed_organizations to the name of your organization to ensure that only members of your organization can sign up and log in to Grafana.

完整的配置将如下所示:

/etc/grafana/grafana.ini可以被重述为: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 的汉语原生释义如下:grafana.ini 文件位于 /etc/grafana/ 目录中。
...
[server]
root_url = https://your_domain
...

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

然后,重新启动Grafana以激活更改。

  1. sudo systemctl restart grafana-server

最后,验证服务是否处于运行状态。

  1. sudo systemctl status grafana-server

输出将表明服务处于活动状态(正在运行)。

现在,通过访问https://your_domain来测试您的新认证系统。如果您已经登录Grafana,请将鼠标悬停在屏幕左下角的头像登录上,并点击出现在您的名字旁边的辅助菜单中的“注销”。

在登录页面上,您会看到在原来的登录按钮下面有一个新的部分,其中包含一个带有GitHub徽标的GitHub登录按钮。

Grafana Login page with GitHub

点击“使用GitHub登录”按钮,将被重定向到GitHub,在那里您将登录您的GitHub账号并确认您的意图以授权Grafana。

点击绿色的授权你的_github_organization按钮。

Note

注意:确保您的 GitHub 帐户属于您所批准的组织,并且您的 Grafana 电子邮件地址与 GitHub 电子邮件地址相匹配。如果您尝试使用未属于您所批准的组织的 GitHub 帐户进行身份验证,将收到一个“登录失败”消息,告知您用户不是所需组织的成员之一。

您将使用现有的 Grafana 帐户登录。如果登录用户尚未拥有Grafana帐户,Grafana 将创建一个具有查看者权限的新用户帐户,以确保新用户仅能使用现有的仪表板。

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

  1. sudo nano /etc/grafana/grafana.ini

在[user]的标题下,找到auto_assign_org_role指令,并通过删除行首的;来取消注释设置。

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

  • Viewer: can only use existing dashboards.
  • Editor: can use, modify, and add dashboards.
  • Admin: has permission to do everything.

本教程将自动分配设置为“查看者”。

/grafana/grafana.ini 位于/etc目录中。
...
[users]
...
auto_assign_org_role = Viewer
...

保存修改后,关闭文件并重新启动Grafana。

  1. sudo systemctl restart grafana-server

检查服务的状态。

  1. sudo systemctl status grafana-server

就像以前一样,状态将会显示为活动(运行中)。

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

结论

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

要扩展您当前的Grafana安装,请查看官方和社区构建的仪表板和插件列表。要了解关于如何使用Grafana的更多信息,请参阅官方Grafana文档,或查看我们的其他监控教程。

发表回复 0

Your email address will not be published. Required fields are marked *