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

在本教程中,您将安装Grafana并使用SSL证书和Nginx反向代理对其进行保护,然后您将修改Grafana的默认设置以实现更严格的安全性。

介绍

Grafana是一个开源的数据可视化和监控工具,它集成了来自PrometheusInfluxDBGraphiteElasticSearch等来源的复杂数据。 Grafana允许您为数据创建警报,通知和临时过滤器,同时还可以通过内置的共享功能更轻松地与您的队友进行协作。

在本教程中,您将安装Grafana并使用SSL证书Nginx反向代理对其进行保护 ,然后您将修改Grafana的默认设置以实现更严格的安全性。

先决条件

要学习本教程,您将需要:

第1步 - 安装Grafana

您可以通过直接从官方网站下载 Grafana或通过APT存储库安装Grafana。 由于APT存储库使安装和管理Grafana的更新变得更加容易,我们将使用该方法。

尽管Grafana在官方的Ubuntu 16.04软件包仓库中可用,但Grafana的版本可能并不是最新版本,所以我们将使用Grafana的官方仓库packagecloud

使用curl下载packagecloud GPG密钥 ,然后将输出传输到apt-key 这会将密钥添加到APT安装的受信任密钥列表中,这将允许您下载并验证GPG签名的Grafana软件包。

curl https://packagecloud.io/gpg.key | sudo apt-key add -

接下来,将packagecloud存储库添加到您的APT源。

sudo add-apt-repository "deb https://packagecloud.io/grafana/stable/debian/ stretch main"

注意:尽管本教程是为Ubuntu 16.04编写的,但packagecloud只提供Debian,Python,RPM和RubyGem包。 不过,您可以在前一个命令中使用基于Debian的存储库,因为它包含的Grafana软件包与Ubuntu相同。 只要确保使用stretch库来获取最新版本的Grafana。

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

sudo apt-get update

并确保Grafana将从packagecloud存储库安装。

apt-cache policy grafana

输出会告诉你将要安装的Grafana的版本以及将从哪里获取包。 确认安装候选人将来自https://packagecloud.io/grafana/stable/debian官方Grafana存储库。

grafana:
  Installed: (none)
  Candidate: 4.6.2
  Version table:
     4.6.2 500
        500 https://packagecloud.io/grafana/stable/debian stretch/main amd64 Packages
...

您现在可以继续安装。

sudo apt-get install grafana

一旦Grafana的安装,你已经准备好开始。

sudo systemctl start grafana-server

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

sudo systemctl status grafana-server

输出包含关于Grafana进程的信息,包括其状态,主进程标识符(PID),内存使用等等。

如果服务状态未active (running) ,请检查输出并重新执行上述步骤以解决问题。

● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-12-07 12:10:33 UTC; 19s ago
     Docs: http://docs.grafana.org
 Main PID: 14796 (grafana-server)
    Tasks: 6
   Memory: 32.0M
      CPU: 472ms
   CGroup: /system.slice/grafana-server.service
           └─14796 /usr/sbin/grafana-server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid cfg:default.paths.logs=/var/log/grafana cfg:default.paths.data=/var/lib/grafana cfg:default.paths.plugins=/var/lib/grafana/plugins
...

最后,启用服务在启动时自动启动Grafana。

sudo systemctl enable grafana-server

输出证实systemd创建了自动启动Grafana的必要符号链接。 如果您收到错误消息,请在继续之前按照终端中的说明修复问题。

Synchronizing state of grafana-server.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.

Grafana现已安装并准备使用。 接下来,使用反向代理和SSL证书保护您与Grafana的连接。

第2步 - 设置反向代理

使用SSL证书将确保您的数据通过加密来自Grafana的连接进行加密。 但是,要利用这个连接,你首先需要重新配置Nginx。

打开您在使用先决条件中的让我们加密设置Nginx服务器块时创建的Nginx配置文件。

sudo nano /etc/nginx/sites-available/example.com

找到以下块:

/etc/nginx/sites-available/example.com
...
    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
    }
...

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

删除此位置块中现有的try_files行,并将其替换为以下所有以proxy_开始的内容。

/etc/nginx/sites-available/example.com
...
    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
...

完成后,保存文件并关闭文本编辑器。

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

sudo nginx -t

输出应该告诉你, syntax is oktest is successful 如果您收到错误信息,请按照屏幕上的说明进行操作。

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

sudo systemctl reload nginx

您现在可以通过将Web浏览器指向https:// example.com来访问默认的Grafana登录屏幕。 如果您无法访问Grafana,请确认您的防火墙设置为允许端口443上的流量,然后重新跟踪先前的说明。

通过与Grafana的加密连接,您现在可以实施其他安全措施,从更改Grafana的默认管理凭证开始。

第3步 - 更新证书

由于每个Grafana安装都默认使用相同的管理登录凭据,因此在此步骤中,您将更新凭据以提高安全性。

从浏览器导航到https:// example.com开始。 这将弹出默认的登录屏幕,您将在其中看到Grafana徽标,表单要求您输入用户名密码登录按钮和忘记密码? 链接。

Grafana登录

输入管理员进入用户密码字段,然后点击登录按钮。

在下一个屏幕上,欢迎您到家庭仪表板 您可以在此添加数据源并创建,预览和修改仪表板。

点击屏幕左上角的Grafana徽标,打开应用程序的主菜单。 然后,将鼠标悬停在管理按钮上,打开第二组菜单选项。 最后,点击配置文件按钮。

格拉法纳菜单

您现在位于“ 用户资料”页面上,您可以在其中更改与您的帐户关联的姓名电子邮件用户名 您也可以更新您的首选设置,如UI主题 ,您可以更改密码。

Grafana配置文件首选项

在“ 姓名” ,“ 电子邮件 ”和“ 用户名”字段中输入您的姓名,电子邮件地址和要使用的用户名,然后单击“ 信息”部分中的“ 更新”按钮保存设置。

如果您愿意,还可以更改UI主题时区以适应您的需求,然后按“ 首选项”区域中的更新按钮保存更改。 Grafana提供了黑暗浅色的用户界面主题,以及一个默认的主题, 默认设置为黑暗

最后,通过点击页面底部的更改密码按钮来更改与您的帐户相关联的密码。 这将带你到更改密码屏幕。

旧密码字段中输入您当前的密码admin ,然后在“ 新密码”和“ 确认密码”字段中输入要开始使用的密码

点击更改密码保存新信息或按取消放弃您的更改。

从那里,您将返回到用户配置文件页面,您将在屏幕的右上角看到一个绿色框,告诉您用户密码已更改

Grafana更改密码成功

您现在已通过更改默认凭据来保护您的帐户,因此我们还要确保没有您的许可,任何人都无法创建新的Grafana帐户。

第4步 - 禁用Grafana注册和匿名访问

Grafana提供的选项允许访问者为自己创建用户帐户并预览仪表板而无需注册。 当你在互联网上暴露Grafana,这可能是一个安全问题。 但是,当Grafana无法通过互联网访问或者使用公开可用的数据(如服务状态)时,您可能需要允许这些功能。 所以,知道如何配置Grafana来满足您的需求是非常重要的。

首先打开Grafana的主要配置文件进行编辑。

sudo nano /etc/grafana/grafana.ini

[users]标题下找到以下allow_sign_up指令:

/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]标题下找到以下enabled指令。

/etc/grafana/grafana.ini
...
[auth.anonymous]
# enable anonymous access
;enabled = false
...

enabled设置为true让非注册用户访问您的仪表板; 将此选项设置为false只会将注册用户的仪表板访问权限限制在注册用

除非您需要允许匿名访问您的仪表板,否则请取消注释此指令; 在行的开头,然后将该选项设置为false

/etc/grafana/grafana.ini
...
[auth.anonymous]
enabled = false
...

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

要激活更改,请重新启动Grafana。

sudo systemctl restart grafana-server

通过检查Grafana的服务状态来确认一切正常。

sudo systemctl status grafana-server

和以前一样,输出结果应该会显示Grafana正在active (running) 如果不是,请查看任何终端消息以获取更多帮助。

现在,将您的Web浏览器指向https:// example.com以验证没有注册按钮,并且无需输入登录凭证即可登录。

如果您看到“ 注册”按钮或者您可以匿名登录,请在继续教程之前重新检查上述步骤以解决问题。

此时,Grafana已完全配置并可供使用。 或者,您可以通过GitHub进行身份验证来简化组织的登录过程。

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

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

首先登录到与您的组织相关联的GitHub帐户,然后导航到您的GitHub配置文件页面https://github.com/settings/profile

点击屏幕左侧导航菜单中组织设置下的组织名称。

GitHub设置页面

在下一个屏幕上,您将看到您的组织配置文件 ,您可以在其中更改设置,例如组织显示名称 ,组织电子邮件 地址和组织URL

由于Grafana使用OAuth (一个开放的标准来授予远程第三方访问本地资源)通过GitHub对用户进行身份验证,因此您需要在GitHub中创建一个新的OAuth应用程序

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

GitHub组织设置

如果您还没有在GitHub上与您的组织相关联的OAuth应用程序,您会被告知没有组织拥有的应用程序 否则,您会看到已连接到您的帐户的OAuth应用程序列表。

点击注册应用程序按钮继续。

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

  • 应用程序名称 - 这有助于您区分不同的OAuth应用程序。
  • 主页URL - 这告诉GitHub在哪里可以找到Grafana。
  • 应用程序描述 - 这提供了您的OAuth应用程序的目的的描述。
  • 应用程序回调URL - 这是用户一旦通过身份验证就发送的地址。 对于Grafana,该字段必须设置为https:// example.com /login/github

请记住,通过GitHub登录的Grafana用户将看到前三个字段中输入的值,因此请务必输入一些有意义和适当的内容。

完成后,表单应该如下所示:

GitHub注册OAuth应用程序

点击绿色, 注册应用程序按钮。

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

GitHub应用程序详细信息

警告:请确保将您的客户端ID客户端密码保存在安全的非公开的位置,因为它们可以用作攻击的基础。

在创建GitHub OAuth应用程序后,您现在可以重新配置Grafana。

(可选)第6步 - 将Grafana配置为GitHub OAuth应用程序

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

sudo nano /etc/grafana/grafana.ini

找到[auth.github]标题,并取消注释此部分通过删除; 在每一行的开头,除了;team_ids= ,我们将不会在本教程中使用。

然后,将Grafana配置为使用GitHub和您的OAuth应用程序的client_idclient_secret值。

  • enabledallow_sign_up设置为true。 这将启用GitHub身份验证,并允许允许组织的成员自己创建帐户。 请注意,此设置与您在第4步中更改的[users]下的allow_sign_up属性不同。
  • client_idclient_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
;team_ids =
allowed_organizations = your_organization_name
...

您现在已经告诉了Grafana有关GitHub所需的一切,但要完成设置,您需要在反向代理之后启用重定向。 这是通过在[server]标题下设置一个root_url值来完成的。

/etc/grafana/grafana.ini
...
[server]
root_url = https://example.com
...

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

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

sudo systemctl restart grafana-server

最后,验证服务已启动并正在运行。

sudo systemctl status grafana-server

如果输出不表示服务active (running) ,请参阅屏幕上的消息以获取更多信息。

现在,通过导航到https:// example.com来测试您的新认证系统。 如果您已经登录到Grafana,请点击屏幕左上角的小Grafana徽标,将鼠标悬停在您的用户名上,然后单击显示在名称右侧的二级菜单中的退出

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

Grafana登录页面与GitHub

点击GitHub按钮重定向到GitHub,在那里你需要确认你的授权Grafana的意图。

点击绿色, 授权your_github_organization按钮。 在这个例子中,按钮读取, 授权SharkTheSammy

授权与GitHub

如果您尝试使用不是您核准组织成员的GitHub帐户进行身份验证,您将收到一条登录失败消息,告诉您, 用户不是所需组织之一的成员

如果GitHub帐户是您的认可组织的成员,并且您的Grafana电子邮件地址与您的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

和以前一样,状态应该是active (running) 如果没有,请查看输出以获取进一步说明。

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

结论

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

要将Grafana作为系统监视软件的一部分,请参阅如何在Ubuntu 16.04上安装Prometheus以及如何向Grafana添加Prometheus仪表板

要扩展您当前的Grafana安装,请参阅官方和社区构建的仪表板列表

而且,要了解有关使用Grafana的更多信息,请参阅官方的Grafana文档