Ubuntu 22.04安装与安全配置Grafana完整教程

简介

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

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

先决条件

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

  • 一台按照《Ubuntu 22.04 初始服务器设置指南》设置的 Ubuntu 22.04 服务器,包括一个具有 sudo 权限的非 root 用户和一个使用 ufw 配置的防火墙。
  • 一个完全注册的域名。本教程通篇使用 your_domain 作为示例。您可以在 Namecheap 上购买域名,在 Freenom 上免费获取一个,或使用您选择的域名注册商。
  • 为您的服务器设置以下 DNS 记录。如果您使用的是 Silicon Cloud,可以按照《如何添加域名》文章了解如何添加它们的详细信息。
    • 一条将 your_domain 指向您服务器公网 IP 地址的 A 记录。
    • 一条将 www.your_domain 指向您服务器公网 IP 地址的 A 记录。
  • 按照《如何在 Ubuntu 22.04 上安装 Nginx》教程设置的 Nginx,包括为您域名的服务器块。
  • 一个配置了 Let’s Encrypt 的 Nginx 服务器块,您可以按照《如何在 Ubuntu 22.04 上使用 Let’s Encrypt 保护 Nginx》进行设置。
  • 可选,要设置 GitHub 身份验证,您需要一个与组织关联的 GitHub 账户。

步骤 1 — 安装 Grafana

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

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

$ 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 源中。

$ 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 缓存更新软件包列表:

$ sudo apt update

你现在可以开始安装了。

$ sudo apt install grafana

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

$ sudo systemctl start grafana-server

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

$ sudo systemctl status grafana-server

您将收到类似于下面的输出:

输出

如何在Ubuntu 22.04上安装和保护Grafana – 第2部分(共6部分)

● grafana-server.service – Grafana实例
已加载:已加载(/lib/systemd/system/grafana-server.service; 已禁用; 厂商预设:已启用)
活动:活动(运行中) 自 2022年9月27日 星期二 14:42:15 UTC; 6秒前
文档:http://docs.grafana.org
主PID:4132 (grafana-server)
任务:7(限制:515)

这个输出包含有关Grafana进程的信息,包括其状态、主进程标识符(PID)等等。”活动(运行中)”显示该进程正在正常运行。

最后,将服务设置为在启动时自动启动Grafana。

  1. sudo systemctl enable grafana-server

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

输出

正在将grafana-server.service的状态与SysV服务脚本同步,使用/lib/systemd/systemd-sysv-install。
执行:/lib/systemd/systemd-sysv-install enable grafana-server
已创建符号链接 /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。

这是文章《如何在Ubuntu 22.04上安装和保护Grafana》的第3部分(共6部分)。

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

   ...
}

注意:

如果您使用certbot工具设置了Let’s Encrypt SSL证书,那么您的配置文件可能包含certbot添加的额外行和服务器块。完成后,如果您使用nano编辑器,可以按CTRL+X,然后按Y,最后按ENTER来保存并关闭文件。

现在,测试新的设置以确保所有配置正确:

  1. sudo nginx -t

 

您将会收到以下输出结果。

输出

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主配置文件进行编辑。

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

 

在[users]部分下找到auto_assign_org_role指令,并通过删除行首的”;”来取消注释(启用该配置)。

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

  • Viewer(查看者):只能查看和使用现有的仪表盘。
  • Editor(编辑者):可以使用、修改和添加仪表盘。
  • Admin(管理员):拥有执行所有操作的权限。

本教程将把自动分配角色设置为”Viewer”(查看者)。

在grafana.ini文件中,配置应如下所示:

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

保存更改并关闭文件后,请重新启动Grafana服务。

  1. sudo systemctl restart grafana-server

 

检查Grafana服务的状态。

  1. sudo systemctl status grafana-server

 

与之前一样,状态应显示为”active (running)”(活动/运行中)。

至此,您已完全配置好Grafana,允许GitHub组织成员注册并使用您的Grafana实例。

结论

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

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

bannerAds