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。
- 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。
- 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来保存并关闭文件。
现在,测试新的设置以确保所有配置正确:
- 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来激活这些更改。
- sudo systemctl reload nginx
现在,您可以通过将您的网络浏览器指向https://your_domain来访问默认的Grafana登录界面。如果无法访问Grafana,请验证防火墙是否设置为允许443端口上的流量,然后重新跟踪以前的指示。
通过对Grafana进行加密连接,您现在可以实施额外的安全措施,首先是更改Grafana的默认管理凭据。
步骤三 — 更新资格证书因为每个Grafana安装默认使用相同的管理员凭据,所以最佳实践是尽快更改您的登录信息。在这个步骤中,您将更新凭证以提高安全性。
从你的网络浏览器中导航到https://your_domain,这将弹出默认的登录界面,您将看到Grafana的标志,一个要求输入电子邮件或用户名和密码的表单,一个登录按钮和一个忘记密码的链接。

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

从这里,您可以点击“提交”按钮保存新的信息,或者点击“跳过”以跳过这一步骤。如果您选择跳过,下次登录时将提示您修改密码。
为了增加您的Grafana设置的安全性,请点击提交。您将进入Grafana仪表板的欢迎界面。

第四步—禁用Grafana的注册和匿名访问Grafana提供了选项,让访问者可以自己创建用户账户并预览仪表盘而无需注册。当Grafana无法通过互联网访问或者在使用公开可用的数据(例如服务状态)时,您可能想要允许这些功能。但是,当在线使用Grafana处理敏感数据时,匿名访问可能会造成安全问题。为解决这个问题,您需要对Grafana的配置进行一些更改。
首先打开Grafana的主配置文件进行编辑。
- sudo nano /etc/grafana/grafana.ini
请在[user]标题下找到以下allow_sign_up指令。
...
[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]部分下找到以下启用的指令:
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...
将设置选项设置为true可让未注册用户访问您的仪表盘;将此选项设置为false将仅限于已注册用户访问仪表盘。
将此指令取消注释,方法是删除行首的分号,并将选项设置为false。
...
[auth.anonymous]
# enable anonymous access
enabled = false
...
保存文件并退出文本编辑器。
要激活更改,请重新启动Grafana。
- sudo systemctl restart grafana-server
通过检查Grafana的服务状态来确认一切运行正常。
- 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的用户将在前三个字段中看到您输入的值,因此一定要输入一些有意义且恰当的内容。
当完成时,表格将会看起来像这样。

您将被重定向到一个包含有关您的新OAuth应用程序的一般信息的页面,包括客户端ID。然后点击“生成新的客户端密钥”按钮来获取新的客户端密钥。请注意这两个值,因为您将需要将它们添加到Grafana的主配置文件中以完成设置。
Warning
第6步 — 将Grafana配置为GitHub OAuth应用程序。为了完成对您的Grafana设置的GitHub身份验证,您现在需要对Grafana配置文件进行一些更改。
首先,打开主要的Grafana配置文件。
- 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.
完整的配置将如下所示:
格拉法纳配置文件(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值来实现。
...
[server]
root_url = https://your_domain
...
保存您的配置并关闭文件。
然后,重新启动Grafana以激活更改。
- sudo systemctl restart grafana-server
最后,验证服务是否正常运行。
- sudo systemctl status grafana-server
输出将表明服务是活动的(正在运行)。
现在,通过访问https://your_domain 来测试你的新认证系统。如果你已经登录Grafana,请将鼠标悬停在屏幕左下角的头像登录上,然后点击出现在你的名字旁边的次级菜单中的”退出登录”。
在登录页面上,您将会看到一个新的部分,位于原有的登录按钮下方,包含一个带有GitHub标志的使用GitHub登录的按钮。

点击绿色的授权你的 GitHub 组织按钮。
Note
您将使用现有的Grafana账户登录。如果登录的用户尚未拥有Grafana账户,系统将会自动创建一个新用户账户,并默认授予查看者权限,确保新用户只能查看和使用现有的仪表盘。
若要更改新用户的默认权限,请打开Grafana主配置文件进行编辑。
- sudo nano /etc/grafana/grafana.ini
在[users]部分下找到auto_assign_org_role指令,并通过删除行首的”;”来取消注释(启用该配置)。
将该指令设置为以下值之一:
- Viewer(查看者):只能查看和使用现有的仪表盘。
- Editor(编辑者):可以使用、修改和添加仪表盘。
- Admin(管理员):拥有执行所有操作的权限。
本教程将把自动分配角色设置为”Viewer”(查看者)。
在grafana.ini文件中,配置应如下所示:
...
[users]
...
auto_assign_org_role = Viewer
...
保存更改并关闭文件后,请重新启动Grafana服务。
- sudo systemctl restart grafana-server
检查Grafana服务的状态。
- sudo systemctl status grafana-server
与之前一样,状态应显示为”active (running)”(活动/运行中)。
至此,您已完全配置好Grafana,允许GitHub组织成员注册并使用您的Grafana实例。
结论
在本教程中,您学习了如何安装、配置和保护Grafana,以及如何允许组织成员通过GitHub进行身份验证。
要扩展您当前的Grafana安装,建议查看官方和社区构建的仪表盘和插件列表。如需了解更多关于使用Grafana的信息,请参阅官方Grafana文档,或查看我们的其他监控教程。