使用 Netdata 监控 Linux 服务器性能

Netdata 是一个开源的实时 Linux 服务器性能监控工具,具有漂亮的 Web 前端。 它允许您监控 CPU、RAM 使用情况、磁盘 I/O、网络流量、Postfix 等。 netdata 是用 C 编程语言编写的,速度超快且资源高效。

网络数据特点:

  • 它通过数以千计的指标、交互式可视化和富有洞察力的健康警报帮助您即时诊断基础设施中的减速和异常情况。
  • 1s粒度 – Netdata 每秒更新系统统计信息。
  • 通过 eBPF 洞察 Linux 内核
  • 解析 Apache 和 Nginx Web 服务器日志以显示请求处理时间、上游响应时间和许多其他性能统计信息。
  • 收集数据库运行状况和性能指标(MySQL/MariaDB、PostgreSQL、MongoDB 等),包括 Galera Cluster。
  • 快速且轻量级 – 默认情况下,它仅使用单核的 1% 的 CPU。
  • 和更多。

在本教程中,我们将了解如何在 Debian/Ubuntu 和 Redhat/CentOS/Fedora 服务器上安装 netdata。 我们还将讨论如何在 netdata Web 界面上启用密码验证,以便只有授权用户才能访问它。

笔记:如果您使用 iRedMail 运行邮件服务器,那么您不必遵循本教程,因为 iRedMail 会自动为您安装它。 您可以通过以下网址访问 Netdata Web 界面 https://mail.example.com/netdata/. 您将需要输入您的邮局管理员帐户和密码。

第 1 步:在 Linux 服务器上安装 netdata

Netdata 包含在许多 Linux 发行版的存储库中。 但是,它可能不是最新版本。 要获取最新版本,您可以使用官方的netdata 脚本安装软件。 只需在您的 Linux 系统上运行以下命令。

bash <(curl -Ss https://my-netdata.io/kickstart.sh)

如果您不是 root,它可能会要求您输入密码。

在linux服务器上安装netdata

然后它将尝试安装依赖项,如果它们尚未安装在您的系统上。 接下来,它为您提供了有关文件将安装到系统的位置的很好的摘要。 按 Enter 开始构建和安装。

网络数据 ubuntu

安装后,它应该会自动启动并在系统启动时启用自动启动。 正如您在 systemctl status 中看到的那样。

systemctl status netdata

示例输出:

* netdata.service - Real time performance monitoring
     Loaded: loaded (/lib/systemd/system/netdata.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2021-07-10 16:44:51 SAST; 18s ago
    Process: 1059965 ExecStartPre=/bin/mkdir -p /var/cache/netdata (code=exited, status=0/SUCCESS)
    Process: 1059977 ExecStartPre=/bin/chown -R netdata:netdata /var/cache/netdata (code=exited, status=0/SUCCESS)
    Process: 1059978 ExecStartPre=/bin/mkdir -p /var/run/netdata (code=exited, status=0/SUCCESS)
    Process: 1059979 ExecStartPre=/bin/chown -R netdata:netdata /var/run/netdata (code=exited, status=0/SUCCESS)
   Main PID: 1059980 (netdata)
      Tasks: 49 (limit: 38335)

如果您可以在输出中看到以下几行,请不要惊慌。 你的安装没问题。

ebpf.plugin[1060201]: PROCFILE: Cannot open file '/etc/netdata/apps_groups.conf'
ebpf.plugin[1060201]: Cannot read process groups configuration file '/etc/netdata/apps_groups.conf'. Will try '/usr/lib/netdata/conf.d/apps_groups.conf'

默认情况下,Netdata 侦听端口 19999。现在输入 server-ip:19999 在浏览器地址栏中访问 netdata Web 界面。 它没有身份验证机制。 任何知道您 IP 地址的人都可以访问。

Linux-服务器-性能-监控-netdata-dashboard-overview

如果您的服务器启用了防火墙,则需要打开 TCP 端口 19999。例如,如果您在 Debian/Ubuntu 上使用 UFW 防火墙,则运行以下命令。

sudo ufw allow 19999/tcp

如果您在 RHEL/CentOS/Alma Linux/Rocky Linux 上使用 Firewalld,请运行以下命令。

sudo firewall-cmd --permanent --add-port=19999/tcp

sudo systemctl reload firewalld

故障排除

如果 Netdata 无法在您的系统上安装,并且您会看到以下错误消息。

Makefile:3001: recipe for target 'all' failed
make: *** [all] Error 2
 FAILED   

 FAILED  

 ABORTED  netdata-installer.sh exited with error 

然后您可以尝试使用 deb 或 RPM 包安装 Netdata。

Debian/Ubuntu

RHEL/CentOS/Alma Linux/Rocky Linux/Fedora

curl -s https://packagecloud.io/install/repositories/netdata/netdata/script.rpm.sh | sudo bash

sudo dnf install netdata

OpenSUSE

curl -s https://packagecloud.io/install/repositories/netdata/netdata/script.rpm.sh | sudo bash

sudo dnf install netdata

第 2 步:设置反向代理

要通过域名而不是IP地址和端口号访问Web界面,我们可以使用Nginx或Apache为netdata设置反向代理。 这也允许我们稍后启用 HTTPS。

nginx

在 Linux 服务器上安装 Nginx。

Debian/Ubuntu

sudo apt install nginx

红帽/CentOS/Fedora

sudo dnf install nginx

OpenSUSE

sudo zypper install nginx

Arch Linux/Manjaro

sudo pacman -S nginx

安装Nginx后,在netdata下创建一个虚拟主机配置文件 /etc/nginx/conf.d/ 目录。

sudo nano /etc/nginx/conf.d/netdata.conf

将以下文本放入文件中。 将红色文本替换为您的实际域名,并且不要忘记为此子域设置 DNS A 记录。

upstream backend {
   server 127.0.0.1:19999;
   keepalive 64;
}

server {
   listen 80;
   server_name netdata.example.com;

   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://backend;
     proxy_http_version 1.1;
     proxy_pass_request_headers on;
     proxy_set_header Connection "keep-alive";
     proxy_store off;
   }
}

保存并关闭此文件。 然后测试 Nginx 配置。

sudo nginx -t

如果配置测试成功,请重新加载 Nginx。

sudo systemctl reload nginx

现在 netdata Web 界面可在 http://netdata.example.com.

阿帕奇

在 Linux 服务器上安装 Apache。

Debian/Ubuntu

sudo apt install apache2

红帽/CentOS/Fedora

sudo dnf install httpd

OpenSUSE

sudo zypper install apache2

Arch Linux/Manjaro

sudo pacman -S apache

安装 Apache 后,为 netdata 创建一个虚拟主机配置文件。

sudo nano /etc/apache2/sites-available/netdata.conf

或者

sudo nano /etc/httpd/conf.d/netdata.conf

将以下文本放入文件中。 将红色文本替换为您的实际域名,并且不要忘记为此子域设置 DNS A 记录。

<VirtualHost *:80>
    ProxyRequests Off
    ProxyPreserveHost On
    
    ServerName netdata.example.com

    <Proxy *>
        Require all granted
    </Proxy>

    ProxyPass "/" "http://localhost:19999/" connectiontimeout=5 timeout=30 keepalive=on
    ProxyPassReverse "/" "http://localhost:19999/"

    ErrorLog ${APACHE_LOG_DIR}/netdata-error.log
    CustomLog ${APACHE_LOG_DIR}/netdata-access.log combined
</VirtualHost>

保存并关闭文件。 要使用 Apache 作为反向代理,我们需要启用 proxy 模块和头模块。

sudo a2enmod proxy proxy_http rewrite headers proxy_wstunnel

然后启用这个虚拟主机。

sudo a2ensite netdata.conf

重启阿帕奇

sudo systemctl restart apache2

现在您可以使用域名访问 Netdata Web 界面 netdata.example.com.

第 3 步:仅收听本地主机

默认情况下,netdata 侦听公共 IP 地址。 既然可以通过 Nginx 反向代理访问 netdata,那么让 netdata 只侦听是一个很好的安全措施 127.0.0.1 . 打开网络数据配置文件。

sudo nano /etc/netdata/netdata.conf

前往 [web] 部分并找到以下行(第 67 行)。

# bind to = *

去除那个 # 签名并将其值设置为 127.0.0.1.

bind to = 127.0.0.1

保存并关闭文件。 然后重新启动 netdata 以使更改生效。

sudo systemctl restart netdata

请注意,如果您设置 bind to IPv6 地址的值 ::1. 然后在 Nginx 虚拟主机配置文件中,您还应该在上游部分指定一个 IPv6 地址,如下所示。

upstream backend {
   server [::1]:19999;
   keepalive 64;
}

第 4 步:启用 HTTPS

强烈建议您使用 TLS 来加密 HTTP 流量。 我们可以通过安装 Let’s Encrypt 颁发的免费 TLS 证书来启用 HTTPS。 运行以下命令安装 Let’s Encrypt 客户端(certbot)

Debian/Ubuntu

sudo apt install certbot

RHEL/CentOS/Alma Linux/Rocky Linux

sudo dnf install certbot

OpenSUSE

sudo zypper install certbot

拱形Linux

sudo pacman -S certbot

如果你使用 nginx,那么你还需要安装Certbot Nginx插件。

sudo apt install python3-certbot-nginx

接下来,运行以下命令获取并安装 TLS 证书。

sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d netdata.example.com

如果你使用 阿帕奇,那么您需要安装 Certbot Apache 插件。

sudo apt install python3-certbot-apache

接下来,运行以下命令获取并安装 TLS 证书。

sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d netdata.example.com

在哪里

  • --nginx: 使用nginx插件。
  • --apache:使用Apache插件
  • --agree-tos: 同意服务条款。
  • --redirect: 通过 301 重定向强制 HTTPS。
  • --hsts:将 Strict-Transport-Security 标头添加到每个 HTTP 响应。 强制浏览器始终对域使用 TLS。 防御 SSL/TLS 剥离。
  • --staple-ocsp:启用 OCSP 装订。 有效的 OCSP 响应被装订到服务器在 TLS 期间提供的证书。

现在应该获得并自动安装证书。

步骤 5:启用密码验证

如果您在生产 Linux 服务器上安装了 netdata,那么启用访问控制非常重要,这样只有授权用户才能看到您的系统上正在运行哪些应用程序。

nginx

使用以下命令生成密码文件。 将红色文本替换为您首选的用户名和密码。 密码将在 /etc/nginx/password.

printf "yourusername:$(openssl passwd -crypt 'yourpassword')" | sudo tee -a /etc/nginx/passwords

如果您看到以下警告消息,请不要惊慌。 你的密码没问题。

Warning: truncating password to 8 characters

然后编辑 netdata 的 Nginx 虚拟主机配置文件。

sudo nano /etc/nginx/conf.d/netdata.conf

在 server 部分添加 auth 指令。 auth_basic 启用基本密码验证。 auth_basic_user_file 指令指定密码文件。

server {
.....

auth_basic "Protected";
auth_basic_user_file /etc/nginx/passwords;

....

保存并关闭文件。 然后重新加载 Nginx。

sudo systemctl reload nginx

现在您的浏览器会要求您输入用户名和密码。

阿帕奇

使用以下命令生成密码文件。 将红色文本替换为您首选的用户名和密码。 密码将在 /etc/apache2/password.

printf "yourusername:$(openssl passwd -crypt 'yourpassword')" | sudo tee -a /etc/apache2/passwords

如果您看到以下警告消息,请不要惊慌。 你的密码没问题。

Warning: truncating password to 8 characters

然后编辑 netdata 的 Apache 虚拟主机配置文件。

sudo nano /etc/apache2/sites-enabled/netdata-le-ssl.conf

改变 <Proxy *>...</Proxy> 以下部分。

    <Proxy *>
        AllowOverride None
        AuthType Basic
        AuthName "Protected site"
        AuthUserFile /etc/apache2/passwords
        Require valid-user
    </Proxy>

保存并关闭文件。 然后重新启动Apache。

sudo systemctl restart apache2

现在您的浏览器会要求您输入用户名和密码。

Netdata Linux 服务器性能监控截图之旅

CPU使用率

netdata 监控 CPU 使用率

内存使用

Linux 服务器性能监控 RAM 使用情况

磁盘输入/输出

Linux服务器性能监控磁盘io

网络流量

Linux 服务器性能监控网络流量

内存去重

如果您的系统上可以使用内核内存去重(称为内核同页合并,或 KSM),您可以启用它以节省 40-60% 的网络数据内存。 要启用 KSM,请以 root 身份运行以下命令(sudo 不会工作)。

echo 1 >/sys/kernel/mm/ksm/run

echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs

如何启用电子邮件警报

使用以下命令编辑健康警报通知配置文件。

sudo /etc/netdata/edit-config health_alarm_notify.conf

找到以下行。

DEFAULT_RECIPIENT_EMAIL="root"

默认情况下,电子邮件警报发送到本地主机上的 root 用户。 将其更改为您的电子邮件地址。

DEFAULT_RECIPIENT_EMAIL="[email protected]"

保存并关闭文件。 然后重新启动Netdata。

sudo systemctl restart netdata

如果您使用 iRedMail,则电子邮件警报将被禁用,您将在此文件中看到以下行。

SEND_EMAIL="NO"

将其更改为

EMAIL_SENDER="[email protected]"

# enable/disable sending emails
SEND_EMAIL="YES"

# if a role recipient is not configured, an email will be send to:
DEFAULT_RECIPIENT_EMAIL="[email protected]"

保存并关闭文件。 然后重新启动Netdata。

sudo systemctl restart netdata

您应该安装 Postfix 来发送电子邮件警报。

Debian/Ubuntu

sudo apt install postfix

RHEL/CentOS/Alma Linux/Rocky Linux

sudo dnf install postfix

OpenSUSE

sudo zypper install postfix

如何卸载 Netdata

卸载脚本位于 /usr/libexec/netdata/netdata-uninstaller.sh.

如何更新网络数据

更新脚本可在 /usr/libexec/netdata/netdata-updater.sh. 因此,当新版本出现时,请运行以下命令。

sudo /usr/libexec/netdata/netdata-updater.sh

幸运的是,您不需要手动执行此操作。 一个定时任务 (/etc/cron.daily/netdata-updater) 由 Netdata 添加以每天自动更新软件。

如何监控 Nginx Web 服务器性能

为了收集 Nginx 性能指标,您需要配置 Nginx stub_status。

sudo nano /etc/nginx/conf.d/stub_status.conf

将以下文件添加到此文件中。

server {
     listen 127.0.0.1:80;
     server_name 127.0.0.1;
     location /nginx_status {
        stub_status on;
	allow 127.0.0.1;
	deny all;
     }
}

保存并关闭文件。然后重新加载 Nginx 以使更改生效。

sudo systemctl reload nginx

现在您可以在 Netdata 中看到 Nginx 指标,可通过 web log nginx 右侧边栏的菜单。

netdata 网络日志 nginx

Netdata 可以从 Nginx 日志文件中收集信息。 但是,默认的日志格式为我们提供了有限的信息。 如果你真的关心应用程序的性能,你应该创建一个自定义的日志格式来显示请求时间、上游响应时间、缓存命中等。

打开 nginx.conf 文件。

sudo nano /etc/nginx/nginx.conf

http {...} 上下文,高于 include 指令。 在这里,我们正在创建一个名为的自定义 Nginx 日志格式 netdata 其中包括有关 request_time 和 upstream_response_time 的信息,以毫秒为单位测量。

log_format netdata '$remote_addr - $remote_user [$time_local] '
              '"$request" $status $body_bytes_sent '
              '$request_length $request_time $upstream_response_time '
              '"$http_referer" "$http_user_agent"';

保存并关闭文件。 然后打开你的 Nginx 虚拟主机配置文件。 例如,

sudo nano /etc/nginx/conf.d/linuxbabe.com.conf

您的 Nginx 虚拟主机配置文件可能位于 /etc/nginx/sites-enabled/ 目录。 我喜欢用 /etc/nginx/conf.d/ 目录。

在里面 server {...} 上下文,添加以下两行以启用访问日志和错误日志。 访问日志正在使用 netdata 格式和错误日志使用 warn 日志级别。

access_log /var/log/nginx/linuxbabe.com.access.log netdata;
error_log /var/log/nginx/linuxbabe.com.error.log warn;

保存并关闭文件。 然后重新加载 Nginx 以使更改生效。

sudo systemctl reload nginx

接下来,编辑网络数据 web_log.conf 文件。

sudo /etc/netdata/edit-config python.d/web_log.conf

向下滚动到 Nginx 日志部分。 添加以下几行。

yourdomain.com:
  name: 'yourdomain'
  path: '/var/log/nginx/yourdomain.com.access.log'

netdata 监控单个虚拟主机

保存并关闭文件。 然后授予读取权限 netdata 用户。

sudo setfacl -R -m u:netdata:rx /var/log/nginx/

重启网数据

sudo systemctl restart netdata

如何监控 Apache 性能

首先,运行以下命令来创建 Netdata apache.conf 文件。 您不必编辑此文件中的任何内容。 只需按下 Ctrl+X 退出。

sudo /etc/netdata/edit-config python.d/apache.conf

接下来,编辑主要的 Apache 配置文件。

sudo nano /etc/apache2/apache2.conf

找出 LogFormat 部分并添加两种新的日志格式。

LogFormat "%h %l %u %t "%r" %>s %O %I %D "%{Referer}i" "%{User-Agent}i"" vhost_netdata
LogFormat "%h %l %u %t "%r" %>s %O %I %D "%{Referer}i" "%{User-Agent}i"" netdata

保存并关闭文件。 然后编辑您的 Apache 虚拟主机文件并使用以下 CustomLog 设置。

CustomLog "/var/log/apache2/yourdomain.com.access.log" netdata

保存并关闭文件。 接下来,编辑网络数据 web_log.conf 文件。

sudo /etc/netdata/edit-config python.d/web_log.conf

向下滚动到 Apache 日志部分。 添加以下几行。

yourdomain:
   name: 'yourdomain'
   path: '/var/log/apache2/yourdomain.com.access.log'

保存并关闭文件。 授予读取权限 netdata 用户。

sudo setfacl -R -m u:netdata:rx /var/log/apache2/

然后重新启动 Apache 和 Netdata。

sudo systemctl restart apache2 netdata

如果 Netdata 未显示 Apache 虚拟主机的性能指标,请检查 web_log.conf 文件有拼写错误或语法错误。

安装 Apache JMeter

Apache JMeter 是一个开源负载测试工具,可用于 Linux、macOS 和 Windows。 您可以使用它来测试您的网站在各种负载情况下的性能。 Apache JMeter 是 100% 纯 Java 应用程序,因此我们需要安装 Java 运行时才能使用它。

sudo apt install default-jre-headless

然后运行以下命令安装 Apache JMeter。

sudo apt-get install jmeter

接下来,您可以从应用程序菜单启动它。

apache jmeter 负载测试

Apache JMeter 也可以在命令行模式下运行。 有关如何使用它,请查看手册页。

man jmeter

包起来

希望你喜欢这个 Linux 服务器性能监控工具。 欢迎提出意见、问题或建议。 与往常一样,如果您觉得这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧🙂