Ubuntu 18.04下Grafana安装与安全加固:完整指南
引言
Grafana是一个开源的数据可视化和监控工具,它能够整合来自Prometheus、InfluxDB、Graphite和ElasticSearch等多种复杂数据源。Grafana允许您为数据创建警报、通知和临时筛选器,并通过内置的分享功能方便地与团队协作。
在本教程中,您将学习如何在Ubuntu 18.04服务器上安装Grafana,并使用SSL证书和Nginx反向代理来保护它。一旦Grafana设置完成,您还可以选择配置GitHub用户身份验证,以便更好地管理团队权限。
先决条件
要按照本教程进行操作,您需要准备以下材料:
- 一台已按照Ubuntu 18.04初始服务器设置指南配置好的Ubuntu 18.04服务器,包括一个具有sudo权限的非root用户和已配置ufw防火墙。
- 一个完全注册的域名。本教程中将全程使用
your_domain
作为示例。您可以在Namecheap购买域名,在Freenom免费获取,或使用您选择的任何域名注册商。 - 为您的服务器设置以下DNS记录。您可以参考如何使用DigitalOcean设置主机名了解详细信息:
- 一个将
your_domain
指向您服务器公共IP地址的A记录。 - 一个将
www.your_domain
指向您服务器公共IP地址的A记录。
- 一个将
- 已按照如何在Ubuntu 18.04上安装Nginx教程设置好的Nginx,包括为您域名配置的服务器块。
- 一个已配置Let’s Encrypt的Nginx服务器块,您可以按照如何在Ubuntu 18.04上使用Let’s Encrypt保护Nginx教程进行设置。
- (可选)要设置GitHub身份验证,您需要一个与组织关联的GitHub账户。
第一步 – 安装Grafana
在第一步中,您将在Ubuntu 18.04服务器上安装Grafana。您可以通过从其官方网站直接下载或通过APT仓库进行安装。由于APT仓库使得安装和管理Grafana的更新更加容易,所以在本教程中将使用该方法。
虽然Grafana在官方的Ubuntu 18.04软件包存储库中可用,但那里的Grafana版本可能不是最新的,因此请使用Grafana的官方存储库。
使用 wget
命令下载Grafana的GPG密钥,然后将输出重定向到 apt-key
。这将把密钥添加到您的APT安装的受信任密钥列表中,从而允许您下载和验证使用GPG签名的Grafana软件包。
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
在这个命令中,选项 -q
关闭 wget
的状态更新信息,-O
将下载的文件输出到终端。这两个选项确保只有下载文件的内容被管道传送到 apt-key
。
接下来,将Grafana仓库添加到你的APT源中。
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
刷新APT缓存以更新软件包列表。
sudo apt update
接下来,请确保从Grafana仓库安装Grafana。
apt-cache policy grafana
前一个命令的输出会告诉你即将安装的Grafana版本以及从哪里获取软件包。请确认列表顶部的安装候选项来自官方Grafana仓库,地址为 https://packages.grafana.com/oss/deb
。
grafana:
Installed: (none)
Candidate: 9.1.3
Version table:
9.1.3 500
500 https://packages.grafana.com/oss/deb stable/main amd64 Packages
...
你现在可以开始安装了。
sudo apt install grafana
一旦完成Grafana的安装,使用 systemctl
命令启动Grafana服务器。
sudo systemctl start grafana-server
接下来,通过检查服务的状态来验证Grafana是否正在运行。
sudo systemctl status grafana-server
你将会得到类似这样的输出。
● grafana-server.service – Grafana 实例
Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2022-09-06 09:35:00 UTC; 5s ago
Docs: http://docs.grafana.org
Main PID: 22886 (grafana-server)
Tasks: 5 (limit: 546)
…
这个输出包含了关于 Grafana 进程的信息,包括其状态、主进程标识符(PID)等。`active (running)` 表示进程正常运行。
最后,启用服务以在系统启动时自动启动 Grafana。
- sudo systemctl enable grafana-server
您将收到以下输出:
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 的反向代理。
打开您在先决条件中创建的 Nginx 配置文件,这是在设置带有 Let’s Encrypt 的 Nginx 服务器块时创建的。您可以使用任何文本编辑器,但在本教程中我们将使用 nano。
- sudo nano /etc/nginx/sites-available/您的域名
找到以下区块:
...
location / {
try_files $uri $uri/ =404;
}
...
因为您已经配置了 Nginx 以通过 SSL 通信,并且所有的网页流量已经通过 Nginx 传输到您的服务器上,所以您只需要告诉 Nginx 将所有的请求转发到默认运行在 3000 端口上的 Grafana 即可。
删除此位置块中现有的 `try_files` 行,并用以下选项替换:
...
location / {
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000;
}
...
这将把代理映射到相应的端口,并在请求头中传递服务器名称。
为了确保 Grafana Live WebSocket 连接正常运行,请在服务器部分之外添加以下部分:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
...
接下来添加以下位置部分:
这是文章《在Ubuntu 18.04上安装和保护Grafana的方法》的第3部分(共6部分)。
...
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/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添加的额外行和服务器区块。
完成后,按下 CTRL+X
,然后按 Y
,最后按 ENTER
保存并关闭文件(如果使用nano)。
现在,测试新的设置以确保所有配置都正确:
- sudo nginx -t
你将收到以下的输出结果。
输出
这是文章《在Ubuntu 18.04上安装和保护Grafana的方法》的第4部分(共6部分)。
最后,通过重新加载Nginx来激活更改。
sudo systemctl reload nginx
您现在可以通过将网页浏览器指向https://your_domain
来访问默认的Grafana登录界面。如果无法访问Grafana,请确认您的防火墙已设置允许在443端口上进行通信,然后重新按照之前的指示操作。
通过对Grafana的连接进行加密,您现在可以实施额外的安全措施,首先是更改Grafana的默认管理凭据。
第三步 – 更新凭证
由于每个Grafana安装默认都使用相同的管理员凭据,最佳实践是尽快更改您的登录信息。在此步骤中,您将更新凭据以提高安全性。
请从您的网页浏览器中输入https://your_domain
导航至开始。这将呈现默认登录界面,在那里您将看到Grafana标志、一个要求输入电子邮件或用户名和密码的表单、一个登录按钮以及一个忘记密码链接。

在邮箱或用户名和密码字段中输入“admin”,然后点击登录按钮。
在下一个屏幕上,您将被要求通过更改默认密码来提高您的账户安全性。

在“新密码”和“确认新密码”的栏位中输入您想要开始使用的密码。
从这里开始,您可以点击“提交”来保存新信息,或者点击“跳过”来跳过这一步骤。如果您选择跳过,下次登录时将提示您更改密码。
为了增加Grafana设置的安全性,请点击“保存”。您将返回到Grafana欢迎页面。

现在通过更改默认凭据,您已经确保了您的账户的安全。接下来,您将对Grafana配置进行更改,以确保没有人能够在未经您许可的情况下创建新的Grafana账户。
第四步 – 禁用 Grafana 注册和匿名访问
Grafana提供了选项,让访问者可以自行创建用户账户并预览仪表盘,无需注册。当Grafana无法通过互联网访问或者与公开可用的数据(如服务状态)一起使用时,您可能希望允许这些功能。然而,当在线使用Grafana处理敏感数据时,匿名访问可能会带来安全问题。为了解决这个问题,需要对Grafana的配置进行一些更改。
从打开Grafana的主配置文件开始进行编辑。
sudo nano /etc/grafana/grafana.ini
请在 [users]
的标题下找到以下 allow_sign_up
指令。
Grafana配置文件位于 /etc/grafana/grafana.ini
。
...
[users]
# disable user signup / registration
;allow_sign_up = true
...
在登录界面上启用这个选项会添加一个“注册”按钮,允许用户自行注册并访问Grafana。
禁用此指令可以移除“注册”按钮,并增强Grafana的安全性和隐私。
取消对此指令的注释,删除行首的“;”,并将选项设置为false
。
/etc/grafana/grafana.ini
的内容应修改如下:
...
[users]
# disable user signup / registration
allow_sign_up = false
...
接下来,在[auth.anonymous]
标题下找到以下启用命令:
/etc/grafana/grafana.ini
可以在Grafana的配置文件目录里找到。
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...
将设置enabled
为true
允许未注册用户访问您的仪表盘;将此选项设置为false
则仅限已注册用户访问仪表盘。
通过删除行首的分号并将选项设置为false
,取消此指令的注释。
/etc/grafana/grafana.ini
的中文表达:
Grafana的配置文件位于 /etc/grafana/grafana.ini
。
...
[auth.anonymous]
# enable anonymous access
enabled = false
...
保存文件并退出文本编辑器。
为了激活这些更改,请重新启动 Grafana。
sudo systemctl restart grafana-server
通过检查Grafana的服务状态来验证一切是否正常。
sudo systemctl status grafana-server
就像以前一样,输出将报告Grafana处于活动状态(运行中)。
现在,将您的网页浏览器指向https://your_domain
。要返回到注册屏幕,请将光标移到屏幕左下角的个人头像上,并点击出现的“登出”选项。
一旦您登出后,请确认没有“注册”按钮,并且没有输入登录凭据无法登录。
在此时,Grafana已经完全配置好并可供使用。接下来,您可以通过GitHub进行身份验证,简化组织的登录流程。
(可选)第五步 – 设置GitHub OAuth应用程序
作为登录的替代方式,您可以配置 Grafana 通过 GitHub 进行认证,从而为所有授权的 GitHub 组织成员提供登录访问权限。当您希望允许多个开发者协作并访问度量数据,而无需创建特定于 Grafana 的凭据时,这一点尤其有用。
首先登录与您所在组织相关的GitHub账户,然后导航到您的GitHub个人资料页面。
在屏幕左侧的导航菜单中,在“组织设置”下,点击您组织的名称。

在GitHub上创建OAuth应用程序
在下一个屏幕上,您将看到您的组织资料,您可以在这里更改设置,如组织显示名称、组织电子邮件和组织URL。
由于Grafana使用OAuth进行用户认证(OAuth是一种用于授权远程第三方访问本地资源的开放标准),因此您需要在GitHub上创建一个新的OAuth应用程序。
点击屏幕左下角的“开发者设置”下的“OAuth应用”链接。
如果您在GitHub上的组织中还没有任何与OAuth应用程序相关联的应用程序,系统将显示“无组织拥有的应用程序”。否则,您将看到已连接到您账户的OAuth应用程序的列表。
点击“注册应用”按钮以继续。
在下一个屏幕上,填写关于您的Grafana安装的以下详细信息:
- 应用程序名称(Application name):这有助于您区分不同的OAuth应用程序。
- 主页URL(Homepage URL):这告诉GitHub在哪里找到Grafana。请在此字段中输入
https://your_domain
,并将your_domain
替换为您的实际域名。 - 应用程序描述(Application Description):这提供了您的OAuth应用程序用途的描述。
- 应用程序回调URL(Application callback URL):这是用户成功认证后将被发送到的地址。对于Grafana,此字段必须设置为
https://your_domain/login/github
。
请记住,通过GitHub登录Grafana的用户将在前三个字段中看到您输入的值,因此请确保输入一些有意义且合适的内容。
当完成时,表格会看起来像这样:

点击“注册应用”按钮。
您将被重定向到一个页面,其中包含与您的新OAuth应用程序相关的客户端ID和客户端密钥。请记下这两个值,因为您需要将它们添加到Grafana的主配置文件中以完成设置。
警告:请确保将您的客户端ID和客户端密钥保存在安全且非公开的位置,因为它们有可能被用作攻击的基础。
现在您已经创建了GitHub OAuth应用程序,可以重新配置Grafana以使用GitHub进行验证。
(可选)第六步——将Grafana配置为GitHub OAuth应用程序
为了完成Grafana设置的GitHub身份验证,现在您需要对Grafana配置文件进行一些更改。
首先,打开主要的Grafana配置文件。
- sudo nano /etc/grafana/grafana.ini
找到 [auth.github]
标题,并取消注释此部分,方法是删除除了 ;allowed_domains
和 ;team_ids=
之外的每一行开头的分号 ;
。这些内容在本教程中不会被更改。
接下来,将Grafana配置为使用您的OAuth应用程序的 client_id
和 client_secret
值与GitHub进行连接。
- 将
enabled
和allow_sign_up
设置为true
。这将启用GitHub认证并允许被授权组织的成员自行创建账户。请注意,此设置与您在第四步中更改的[users]
下的allow_sign_up
属性不同。 - 将
client_id
和client_secret
设置为您在创建GitHub OAuth应用程序时获得的值。 - 将
allowed_organizations
设置为您的组织名称,以确保只有您组织的成员才能注册和登录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
...
[server]
root_url = https://your_domain
...
保存您的配置并关闭文件。
然后,重新启动Grafana以激活更改。
- sudo systemctl restart grafana-server
最后,确认服务是否运行正常。
- sudo systemctl status grafana-server
输出结果将显示服务处于活动状态(运行中)。
现在,请通过访问 https://your_domain
来测试您的新身份验证系统。如果您已经登录Grafana,请将鼠标悬停在屏幕左下角的头像上方,并点击出现在您的名字旁边的次级菜单上的“退出登录”。
在登录页面上,您会看到在原始“登录”按钮下面的一个新的部分,其中包括一个带有GitHub标志的“使用GitHub登录”按钮。

点击“使用GitHub登录”按钮,您将被重定向至GitHub,您需要登录您的GitHub账号并确认授权Grafana。
点击绿色按钮,授权您的GitHub组织。
注意:请确保您的GitHub账户是您所批准组织的成员,并且您的Grafana电子邮件地址与GitHub电子邮件地址匹配。如果您尝试使用未成为所批准组织成员的GitHub账户进行身份验证,您将收到“登录失败”消息,告知您用户不是所需组织的成员之一。
您现在将使用您现有的Grafana账户登录。如果当前登录用户尚未拥有Grafana账户,Grafana将自动创建一个具有“查看者”权限的新用户账户,确保新用户只能使用现有的仪表盘。
要更改新用户的默认权限,请打开主要的Grafana配置文件进行编辑:
sudo nano /etc/grafana/grafana.ini
在`[users]`标题下找到`auto_assign_org_role`指令,并通过删除行开头的`;`字符来取消该设置的注释。
将指令设置为以下数值之一:
- Viewer(查看者):只能使用现有仪表盘。
- Editor(编辑者):可以更改、修改和添加仪表盘。
- Admin(管理员):拥有所有操作权限。
本教程将自动分配角色设置为“查看者”。
`/etc/grafana/grafana.ini`
...
[users]
...
auto_assign_org_role = Viewer
...
一旦您保存了更改,关闭文件并重新启动Grafana服务:
sudo systemctl restart grafana-server
检查服务的状态:
sudo systemctl status grafana-server
和之前一样,状态将会显示为“活动”(运行中)。
至此,您已完全配置好Grafana,允许您的GitHub组织成员注册并使用您的Grafana安装。
结论
在本教程中,您安装、配置并保护了Grafana,并允许您组织中的成员通过GitHub进行身份验证。
要扩展您当前的Grafana安装,请查看官方和社区创建的仪表盘列表。要了解更多关于使用Grafana的一般信息,请查看官方Grafana文档或浏览我们的其他监控教程。