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

简介

Grafana 是一款开源的数据可视化和监控工具,与 Prometheus、InfluxDB、Graphite 和 ElasticSearch 等复杂数据源整合在一起。Grafana 让您能够为数据创建警报、通知和临时筛选,并通过内置的共享功能,更轻松地与团队合作。

在本教程中,您将安装Grafana并使用SSL证书和Nginx反向代理来保护它。一旦您设置了Grafana,您将有选择通过GitHub配置用户身份验证,从而更好地组织团队权限。

先决条件

要按照这个教程操作,你需要准备:

  • One Ubuntu 22.04 server set up by following the Initial Server Setup Guide for Ubuntu 22.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 22.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 22.04.
  • Optionally, to set up GitHub authentication, you’ll need a GitHub account associated with an organization.

步骤1 — 安装Grafana

在这个第一步中,您将在您的Ubuntu 22.04服务器上安装Grafana。您可以通过从其官方网站直接下载或通过APT存储库进行安装。由于APT存储库使安装和管理Grafana的更新更加简便,因此在本教程中您将使用这种方法。

使用wget命令下载Grafana GPG秘钥,并将输出重定向到gpg命令。这将把GPG秘钥从base64格式转换为二进制格式。然后将输出重定向到tee命令,将秘钥存储到/usr/share/keyrings/grafana.gpg文件中。

  1. wget -q -O – https://packages.grafana.com/gpg.key | gpg –dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null

 

在这个命令中,选项-q关闭了wget的状态更新消息,而-O将下载的文件输出到终端。这两个选项确保只有下载文件的内容被输入流传输。为了安全起见,”> /dev/null”选项会隐藏终端的输出。

接下来,将Grafana仓库添加到你的APT源中。

  1. echo “deb [signed-by=/usr/share/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main” | sudo tee -a /etc/apt/sources.list.d/grafana.list

 

刷新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 Tue 2022-09-27 14:42:15 UTC; 6s ago Docs: http://docs.grafana.org Main PID: 4132 (grafana-server) Tasks: 7 (limit: 515) …

这个输出包含有关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

 

找到以下区块:

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

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

在这个位置块中删除现有的try_files行,并用以下选项替换它。

您的域名的nginx配置文件位于/etc/nginx/sites-available/your_domain。
...
	location / {
	   proxy_set_header Host $http_host;
	   proxy_pass http://localhost:3000;
	}
...

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

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

您的域名的Nginx配置文件位于/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,这些头部信息必须明确传递。

最终的设置将会是这样的:

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

server {
	...

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

   ...
}

Note

注意:如果您使用certbot工具设置了Let’s Encrypt SSL证书,那么您的配置文件可能包含certbot添加的额外行和服务器块。

完成後,如果您使用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

 

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

/etc/grafana/grafana.ini 可以用中文表述为:格拉法纳配置文件的路径是 /etc/grafana/grafana.ini。
...
[users]
# disable user signup / registration
;allow_sign_up = true
...

通过将该指令设置为“true”,可以在登录界面上添加一个“注册”按钮,使用户可以注册并访问Grafana。

通过将此指令设置为假,禁用该指令将移除“注册”按钮,并增强Grafana的安全性和隐私保护。

通过删除行开头的;并将选项设置为false,取消对此指令的注释。

/etc/grafana/grafana.ini 可以改写成以下中文句子:

grafana配置文件路径为 /etc/grafana/grafana.ini。

...
[users]
# disable user signup / registration
allow_sign_up = false
...

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

以下是/etc/grafana/grafana.ini的本地化中文翻译:
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

将设置选项设置为true可让未注册用户访问您的仪表盘;将此选项设置为false将仅限于已注册用户访问仪表盘。

将此指令取消注释,方法是删除行首的分号,并将选项设置为false。

以下是 /etc/grafana/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进行身份验证,简化组织的登录流程。

(可选)第五步 — 设置一个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进行身份验证。

第6步 — 将Grafana配置为GitHub OAuth应用程序。

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

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

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

 

找到[auth.github]标题,并通过删除每行开头的;来取消注释此部分,除了以下不会在本教程中更改的内容。

  • ;allowed_domains =
  • ;team_ids =
  • ;role_attribute_path =
  • ;role_attribute_strict = false
  • ;allow_assign_grafana_admin = false

接下来,进行以下更改:

  • 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.ini)位于 /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
;role_attribute_path =
;role_attribute_strict = false
;allow_assign_grafana_admin = false
...

你已经告诉Grafana关于GitHub的一切。要完成设置,您需要在反向代理中启用重定向。这可以通过在[server]部分下设置root_url值来实现。

以下是一个选项的中文释义:/etc/grafana/grafana.ini
...
[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,在那里您将登录并确认您授权Grafana的意图。

点击绿色的授权你的 GitHub 组织按钮。

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

...
[users]
...
auto_assign_org_role = Viewer
...

一旦您保存了更改,请关闭文件并重新启动Grafana。

  1. sudo systemctl restart grafana-server

 

检查服务的状态。

  1. sudo systemctl status grafana-server

 

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

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

結論 (jié

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

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

发表回复 0

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