如何在Ubuntu16.04上使用Netdata设置实时性能监控
介绍
Netdata 通过可扩展的 Web 仪表板提供准确的性能监控,这些仪表板可视化 Linux 系统上的进程和服务。 它监控有关 CPU、内存、磁盘、网络、进程等的指标。
Netdata 安装后不需要额外的配置,但提供了重要的定制。 该应用程序的效率和速度旨在与 vmstat
、iostat
和 htop
等原生控制台管理工具相媲美。
本教程中的步骤涵盖了使用其内置 Web 服务器或可选地使用 Nginx 成功设置运行 Netdata 的 Ubuntu 16.04 服务器所需的一切。
先决条件
要遵循本教程,您将需要:
- 按照 Ubuntu 16.04 的 初始服务器设置设置一台 Ubuntu 16.04 服务器,包括 sudo 非 root 用户和防火墙。
- 您的服务器上安装了 Git,您可以按照 如何在 Ubuntu 16.04 上安装 Git 进行设置。
- 可选地,在您的服务器上安装 Nginx,您可以按照 如何在 Ubuntu 16.04 上安装 Nginx 进行设置。 这不是强制性的,但允许比 Netdata 的内置 Web 服务器更多的功能和安全性。
第 1 步 — 安装 Netdata
在我们安装任何东西之前,请确保系统包索引是最新的。
sudo apt-get update
接下来,安装 Netdata 的依赖项,其中包括 gcc
(C 编译器)、GNU Autoconf 工具、GUID 管理和用于 Netdata 内部 Web 服务器的压缩库。
sudo apt-get install zlib1g-dev uuid-dev libmnl-dev gcc make autoconf autoconf-archive autogen automake pkg-config curl
下一组包是可选的,但由 Netdata 推荐,包括 Python、一些 Python 包和 Node.JS。 与系统包管理器捆绑的 Node.js 的稳定版本非常适合 Netdata 的要求。 接下来安装这些。
sudo apt-get install python python-yaml python-mysqldb python-psycopg2 nodejs lm-sensors netcat
要安装 Netdata 本身,我们必须使用项目的 GitHub 存储库。 将 Netdata 存储库克隆到您的主目录中。
git clone https://github.com/firehol/netdata.git --depth=1 ~/netdata
移动到新克隆的目录。
cd ~/netdata
现在使用此目录中的 netdata-installer.sh
shell 脚本构建并安装应用程序。 确保在此处附加 sudo
,否则 Netdata 收集系统数据的方式(通过数据收集器)将无法正常工作。
sudo ./netdata-installer.sh
您将首先看到的输出包含有关 Netdata 将其所有组件存储在何处的信息。 您可以通读这些内容,以便更熟悉程序在安装后如何在文件系统中分布。
Installer Output. . . It will be installed at these locations: - the daemon at /usr/sbin/netdata - config files at /etc/netdata - web files at /usr/share/netdata - plugins at /usr/libexec/netdata - cache files at /var/cache/netdata - db files at /var/lib/netdata - log files at /var/log/netdata - pid file at /var/run . . .
按 ENTER
继续安装。 片刻之后,在输出链的末尾,您将看到以下消息:
. . . [secondary_label Installer Output] ^ |.-. .-. .-. .-. .-. . netdata .-. .- | '-' '-' '-' '-' '-' is installed and running now! -' '-' +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+---> enjoy real-time performance and health monitoring...
Netdata 现在已成功安装并运行,并且在重新启动服务器时也会自动运行。
如果您启用了 UFW,详见 Initial Server Setup for Ubuntu 16.04 教程,您需要为 Netdata 的内部 Web 服务器打开端口 19999
。
sudo ufw allow 19999/tcp
此时,您可以通过在您喜欢的浏览器中访问 http://your_server_ip:19999/
来查看默认仪表板。 您将看到系统实时指标的概览。 这是一个很好的检查,到目前为止一切正常,但在我们探索 GUI 之前,让我们稍微自定义一下 Netdata。
第 2 步 — 配置 Netdata 的内存使用情况
您可以通过访问http://your_server_ip:19999/netdata.conf
在浏览器中查看Netdata的当前配置。
您将在这里看到所有(或大部分)可配置选项都被注释掉了(即 以 #
开头)。 这是因为 Netdata 的配置通过使用一组假定的默认值来工作。 任何禁用的设置都使用 Netdata 的默认值; 如果未注释设置,则指定的值将覆盖默认值。 这使配置文件仅包含您已修改的内容。
回到您的服务器上,配置文件本身是 /etc/netdata/netdata.conf
。 我们将在本教程中自定义的选项是 history
参数。 这控制了 Netdata 使用的内存数据库的最大大小。
在这里,您必须决定要为 Netdata 分配多少 RAM,或者要在丢失之前保留记录的图表数据多长时间:
- 3600 秒(图表数据保留 1 小时)使用 15 MB RAM
- 7200 秒(图表数据保留 2 小时)使用 30 MB RAM
- 14400 秒(图表数据保留 4 小时)使用 60 MB RAM
- 28800 秒(图表数据保留 8 小时)使用 120 MB RAM
- 43200 秒(图表数据保留 12 小时)使用 180 MB RAM
- 86400 秒(图表数据保留 24 小时)使用 360 MB RAM
请记住,上述估计是基于股票仪表板使用的图表数量。 将来删除或添加自定义图表将影响这些估计。
使用 nano
或您喜欢的文本编辑器打开 Netdata 的主配置文件。
sudo nano /etc/netdata/netdata.conf
在 [global]
部分中找到 history
选项。
/etc/netdata/netdata.conf
. . . [global] # glibc malloc arena max for plugins = 1 . . . # hostname = test-netdata # history = 3600 # update every = 1 . . .
将 3600
值替换为您之前决定的值。 在这里,我们使用 14400
,它可以为我们提供 4 小时的数据保留时间。 确保还通过删除 #
符号取消注释该行,以便 Netdata 不再忽略此选项。
/etc/netdata/netdata.conf
. . . [global] # glibc malloc arena max for plugins = 1 . . . # hostname = test-netdata history = 14400 # update every = 1 . . .
进行此更改后保存并关闭文件。
虽然此修改可能会增加 Netdata 将使用的 RAM 量,但我们将在下一步中实施的下一个修改应该会显着减少它。
第 3 步 — 启用内核同页合并
尽管 Netdata 直接开箱即可运行和工作,但我们可以对 Netdata 使用系统资源的方式进行更多修改,以加快和优化其性能。 我们将从启用 内核同页合并 或简称 KSM 开始。 Netdata 开发人员估计这会将 Netdata 的内存使用量减少 40-60%。
一旦启用,KSM 守护程序会定期扫描内存,寻找可以被单个写保护页面替换的内容相同的页面。 在这种情况下,它允许在系统上运行的不同进程或程序之间共享相同的内存页面。 这减少了不必要的重复内存内容的创建。
要永久启用 Linux 系统内核的这一方面,请使用文本编辑器打开 /etc/rc.local
文件。
sudo nano /etc/rc.local
这个/etc/rc.local
文件或运行控制文件在所有其他正常Linux系统服务和进程启动后执行。 它对于指定自定义服务很有用——或者,在我们的例子中,对于在服务器运行时启用 KSM。
将下面突出显示的两个命令添加到文件末尾的最后 exit 0
行之前,如下所示:
/etc/rc.local
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. echo 1 > /sys/kernel/mm/ksm/run echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs exit 0
第一个命令将 1 添加到 run
KSM 内核文件中,从而启用该功能。 第二个命令告诉 KSM 守护程序每秒运行一次并评估 100 个页面以进行重复数据删除。
保存并关闭文件后,KSM 现在将在下次服务器重新启动时启用,并在以后的重新启动中持续存在。 要在该服务器当前正常运行时间的其余部分启用它,您需要在命令行上手动运行添加到 rc.local
的两个命令。
首先,使用带有 sudo
的 -s
标志以服务器的 root 用户身份启动并进入一个新的 shell 会话。 这是必要的,因为前面的两个命令使用输出重定向(通过 >
运算符)并且需要由 root shell 执行才能成功。
sudo -s
现在输入之前的两个命令:
echo 1 > /sys/kernel/mm/ksm/run echo 1000 > /sys/kernel/mm/ksm/sleep_millisecs
然后,离开根 shell 并返回正常的 shell 会话。
exit
最后,要应用我们在此步骤和之前的步骤中所做的所有更改,我们必须重新启动 Netdata。
sudo systemctl restart netdata
您可以通过在 Netdata 仪表板中查找新添加的活动 KSM 图表来验证 KSM 现在是否已启用。 这可以在右侧的菜单树中找到,在 Memory > Memory Deduper 下。
现在我们知道仪表板和 KSM 正在工作,值得通过像 Nginx 这样的 Web 服务器而不是内置的 Web 服务器来授予对仪表板的访问权限。 这不是完全必要的,但建议这样做,因此请按照下一步进行设置。
第 4 步 — 通过 Nginx 托管仪表板(可选)
通过 Nginx 托管 Netdata 可以更轻松地保护对仪表板的访问,并且还允许您在将来需要时指向其他服务器的 Netdata 仪表板。 如果您还没有,您可以按照 Nginx 的 先决条件教程立即安装它。
您还需要安装 apache2-utils
软件包。 这个包包含 htpasswd
程序,我们稍后将需要它来保护对仪表板页面的访问。
sudo apt-get install apache2-utils
接下来,创建一个新的 Nginx 主机配置文件。 请注意,这里我们使用的是 /conf.d
目录中的文件,但如果您将 Nginx 用于 Netdata 以外的其他内容,则可以使用 /sites-available
和 /sites-enabled
。 您可以在 安装教程 中阅读更多关于 Nginx 文件和目录的信息。
sudo nano /etc/nginx/conf.d/default.conf
此配置文件将告诉 Nginx 代理仪表板页面的传入请求。 我们还将添加一个简单的身份验证提示,以便只有具有正确用户名和密码的人才能访问它。
以下是供您复制和粘贴的整个配置文件。 将上面 listen
和 server_name
指令的两个红色突出显示的项目分别更改为您的服务器的 IP 地址和分配的域名。 注意在每个末尾包含终止的 ;
。 如果您没有域名,则可以将 server_name
指令保留为 example.com
。
/etc/nginx/conf.d/default.conf
upstream netdata-backend { server 127.0.0.1:19999; keepalive 64; } server { listen your_server_ip:80; server_name example.com; auth_basic "Authentication Required"; auth_basic_user_file netdata-access; location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://netdata-backend; proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Connection "keep-alive"; proxy_store off; } }
一旦您确定您自己的文件与此代码块匹配,您可以保存并退出以返回到命令提示符。
让我们解释一下这个文件,以便您了解它在做什么。 这是第一部分:
/etc/nginx/conf.d/default.conf
upstream netdata-backend { server 127.0.0.1:19999; keepalive 64; }
这个名为 netdata-backend
的 upstream
模块通过使用服务器的环回地址 127.0.0.1
和 Netdata 的端口 19999
以内置 Netdata Web 服务器为目标。 keepalive
指令设置在任何给定时间(对于每个 Nginx 工作进程)可以保持打开的上游空闲连接的最大数量。 稍后 proxy_pass
指令需要此 upstream
模块定义。
紧随其后的是主 server
块。
/etc/nginx/conf.d/default.conf
server { listen your_server_ip:80; server_name example.com; auth_basic "Authentication Required"; auth_basic_user_file netdata-access;
块中的前两行定义了当客户端尝试连接时 Nginx 应该 listen
的外部 IP 地址。 server_name
指令告诉 Nginx 在客户端使用指定域名时运行此服务器块。
此代码段中的最后两行设置了简单的 HTTP 用户名和密码身份验证。 它使用 auth_basic
模块来显示用户名和密码提示。 您可以自定义提示的消息; 在这里,它设置为 Authentication Required。 auth_basic_user_file
指定文件名和位置来存储身份验证提示的登录凭据,稍后在此步骤中创建。
最后一个 location
块,嵌套在 server
块中,处理传入请求到 Nginx 的代理和传递。
/etc/nginx/conf.d/default.conf
location / { proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://netdata-backend; proxy_http_version 1.1; proxy_pass_request_headers on; proxy_set_header Connection "keep-alive"; proxy_store off; } }
总而言之,这段代码将客户端请求传递给 Netdata Web 服务器,进而传递给仪表板。 proxy_pass
指令行引用文件开头的 upstream
模块,必须按名称指向它,netdata-backend
。
如果您还没有,您可以保存并关闭此配置文件。 这是 apache2-utils
包中的 htpasswd
程序帮助我们为仪表板登录提示创建用户登录凭据的地方。
首先,我们将创建一个用户名和密码。 运行以下命令,将 sammy 替换为您想在 Netdata 中使用的任何用户名。 出现提示时,输入您要使用的密码。
sudo htpasswd -c /etc/nginx/netdata-access sammy
这会在 /etc/nginx/netdata-access
处创建一个文件,其中包含您提供的用户名和密码。 生成的密码在文件中加密,因此不能被视为纯文本。
重启 Nginx 以激活我们添加的新配置。
sudo systemctl restart nginx
首次测试 Nginx 配置,请在您喜欢的 Web 浏览器中访问 http://your_server_ip
。 您将看到身份验证提示。 输入您之前在此步骤中提供的用户名和密码以访问仪表板,我们将在第 5 步中进行探讨。
第 5 步 — 探索仪表板
如果您没有遵循可选的第 4 步,请立即在您喜欢的浏览器中访问 http://your_server_ip:19999/
以访问仪表板。
您将看到仪表板和系统实时指标的概览。 当您将鼠标悬停在后续图表中的每个时间段上时,页面顶部的 HUD 样式指示器会发生变化。
本概述部分中的各个图形和图表详细说明了每个系统方面,从 CPU 到内存再到网络流量等等。
图表是交互式的,可以使用鼠标按钮向左或向右拖动,以在不同的时间间隔内来回平移。
按住 SHIFT
并在图表上使用鼠标滚轮滚动或滚动将缩小或扩大时间标记。 双击图表将其重置为默认外观和视图。
浏览仪表板的最快方法是使用页面右侧的菜单树。 这会根据您当前查看的页面部分更改焦点和颜色。
向下滚动页面或使用菜单树可以访问更深入的图表。 这些非常详细,并且以与初始概述部分中的图表相同的方式进行控制。
Netdata 提供了许多这些额外的特定于统计数据的图表。
GUI 的一个重要部分是更新页面。 Netdata 会定期接收更新,并且很容易让您的安装保持最新状态。 仪表板顶部包含一个 Update 按钮,可让您检查是否有新版本可供下载。
单击此按钮将打开一个包含更多详细信息的新菜单,以及一个 Check Now 按钮以手动检查更新。
如果有可用更新,您只需从 Netdata Git 存储库运行提供的更新脚本,我们在步骤 1 中将其克隆到 Linux 用户的主目录。 也就是说,当更新可用时,只需从命令行运行 sudo ~/netdata/netdata-updater.sh
。
结论
要了解有关 Netdata 项目的更多信息以及如何进一步扩展此处设置的内容,请访问 Netdata GitHub 项目 。 Netdata wiki 中介绍了有关 Netdata 注册表、设置警报和安装自定义图表/模块的信息,其中还讨论了生成 HTML 标记或处理 Netdata 的日志文件等主题。