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

介绍

在本教程中,您将安装Grafana并使用SSL证书Nginx反向代理保护它,然后您将修改Grafana的默认设置以获得更高的安全性。

准备

要学习本教程,您需要:

  • 一个Ubuntu 16.04服务器,包括sudo权限的非root用户和防火墙。
  • 完全注册的域名,没有域名可以在腾讯云注册。为您的服务器设置以下DNS记录
-   指向服务器的公共IP地址包含`example.com`的**A**记录。
-   指向服务器的公共IP地址包含`www.example.com`的**A**记录。

第1步 - 安装Grafana

您可以直接从官方网站下载或通过APT存储库安装Grafana。由于APT存储库可以更轻松地安装和管理Grafana的更新,因此我们将使用该方法。

虽然Grafana可以在官方的Ubuntu 16.04软件包存储库中找到,但Grafana的版本可能不是最新的,所以我们将在packagecloud上使用Grafana的官方存储库。

curl下载packagecloudGPG密钥,然后用通道将其输出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包。请务必使用stretch存储库获取最新版本的Grafana。

刷新APT缓存以更新包列表。

$ sudo apt-get update

从packagecloud存储库安装Grafana。

$ apt-cache policy grafana

输出告诉您将安装的Grafana版本以及将检索的包的位置。验证安装是否来自官方Grafana存储库https://packagecloud.io/grafana/stable/debian

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

开始使用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

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进行通信,并且因为 您的服务器的所有Web流量已经通过Nginx,您只需要告诉Nginx将所有请求转发给Grafana,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

您现在可以通过https://example.com访问Grafana登录界面。如果您无法访问Grafana,请确认您的防火墙已设置为允许端口443上的流量。

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

第3步 - 更新凭证

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

打开<https://example.com>,您将看到Grafana登录界面。

Grafana登录界面

在“ 用户”和“ 密码”字段中输入admin,然后单击“ 登录”按钮。

在下一个屏幕上,您将看到Home Dashboard。您可以在此处添加数据源以及创建,预览和修改仪表板。

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

主菜单界面

您现在位于用户个人资料页面,您可以在其中更改与您的帐户关联的姓名电子邮件用户名。您还可以更新“首选项”以获取UI主题等设置,并且可以更改密码。

个人资料页面

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

您还可以更改UI主题时区,然后按“ 首选项”区域中的“更新”按钮以保存更改。Grafana提供DarkLight UI主题,以及默认主题。

最后,通过单击页面底部的“更改密码”按钮更改与您的帐户关联的密码。在旧密码字段中输入您当前的密码admin,然后在New PasswordConfirm Password字段中输入您的新密码

单击“ 更改密码”以保存新信息,或按“ 取消”以放弃更改。

您现在已经通过更改默认凭据来保护您的帐户,因此我们还要确保没有您的许可,任何人都无法创建新的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
...

用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)。如果不是的话,请查看终端消息上显示的消息以获取其他帮助。

现在,登录https://example.com验证一下“ 注册”按钮是否存在,现在您必须输入用户名和密码才能登录。

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

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

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

对于另一种登录方法,您可以将Grafana配置为通过GitHub进行身份验证,GitHub为授权组织的所有成员提供登录访问权限。当您希望允许多个开发人员协作和访问时,这可能特别有用。

首先登录与您的组织关联的GitHub帐户,然后导航到您的GitHub个人资料页面https://github.com/settings/profile

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

组织设置

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

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

单击屏幕左下方的开发人员设置下的OAuth应用程序链接。

开发人员设置

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

单击“ 注册应用程序”按钮继续。

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

  • 应用程序名称 - 这有助于您区分不同的OAuth应用程序。
  • 主页URL - 告诉GitHub在哪里可以找到Grafana。
  • 应用程序说明 - 这提供给OAuth应用程序用途的说明。
  • 应用程序回调URL - 这是成功通过身份验证后将发送用户的地址。对于Grafana,此字段必须设置为https://example.com/login/github

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

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

表单填写

单击注册应用程序按钮。

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

设置完成

警告:确保将您的客户端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值一起使用。

  • 设置enabled并将allow_sign_up设置为true。这将启用GitHub身份验证,并允许允许组织的成员自己创建帐户。请注意,此设置与您在步骤4中属性users不同。
  • 设置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
...

要完成设置,您需要在反向代理后面启用重定向。这可以通过root_url在server标题下设置一个值来完成。

/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按钮。

登陆界面

单击GitHub按钮,您需要确认您的授权

单击绿色的授权按钮。在此示例中,按钮显示授权SharkTheSammy

授权

如果您尝试使用不是已批准组织成员的GitHub帐户进行身份验证,您将收到一条登录失败消息显示用户不是其中一个必需组织的成员

如果GitHub帐户是您批准的组织的成员,并且您的Grafana电子邮件地址与您的GitHub电子邮件地址匹配,您将使用现有的Grafana帐户登录。

但是,如果您登录的用户尚不存在Grafana帐户,Grafana将创建具有Viewer权限的新用户帐户,确保新用户只能使用现有仪表板。

要更改新用户的默认权限,请打开主Grafana配置文件以进行编辑。

$ sudo nano /etc/grafana/grafana.ini

auto_assign_org_role在users标题下找到该指令,并通过删除该行的开头的;取消注释该设置。

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

  • 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的教程,例如:使用Grafana实现 Jmeter实时监控和Grafana+Prometheus系统监控之邮件报警功能等等。


参考文献:《How to Install and Secure Grafana on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏androidBlog

Git 命令行教程及实例教程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

1161
来自专栏草根专栏

Angular CLI 简介

如果您正在使用angular, 但是没有好好利用angular cli的话, 那么可以看看本文.

1.4K11
来自专栏生信宝典

Linux学习-文件操作

其它新建文件的方式 nano类似于Windows下记事本的功能,nano filename就可以新建一个文件,并在里面写内容;ctrl+x退出,根据提示按Y保存...

3127
来自专栏编码小白

ofbiz的ant命令创建模块

1.简介说明        一般我们在hot-deploy下部署应用是,可以通过ant的create-component这个命令来创建,这种方法的好处是自动创建...

2967
来自专栏北京马哥教育

243张图片为你解析Linux轻量级自动运维化工具Ansible

Ansible 是什么 ansible架构图 ansible特性 模块化:调用特定的模块,完成特定的任务; 基于Python语言研发,由Paramiko...

3806
来自专栏云计算教程系列

如何使用Nginx在Ubuntu 16.04上使用SSL保护Concourse CI

Concourse CI是一个现代且可扩展的持续集成系统,旨在通过可组合的声明性语法自动化测试管道。基于早期CI系统的成功,Concourse旨在简化管道管理并...

530
来自专栏magicsoar

版本控制-git的使用

大家好,我又回来了,上个礼拜因为熬夜看球感冒了,所以没有写新的文章出来。 这周给大家介绍下git的使用 我们为什么需要一个版本控制的软件呢? 我相信大家很多人在...

2388
来自专栏游戏杂谈

Node.js + Express 构建的订餐系统

Express的版本 – v3.3.3  (安装 $ npm install -g express)

1493
来自专栏我的博客

vsftp +mysql 配置详细过程

本文章由网友:苶然(QQ网名)供稿,在此特别感谢他 需要安装包 db4-* vsftpd- mysql-server mysql-devel pam...

3775
来自专栏屈政斌的专栏

【腾讯云的1001种玩法】centos 7 部署 dotnetcore + Angular2 实践

本文主要讲述了使用腾讯云主机,在centos 7 部署 dotnetcore + Angular2 的实践过程,该项目目前只是用于学习 dotnetcore ...

2.6K1

扫码关注云+社区

领取腾讯云代金券