本教程适用于以下操作系统版本
- Debian 12(Bookworm)
- Debian 11(Bullseye)
- Debian 10(Buster)
- Debian 9(Stretch)
本页内容
- 前提条件
- 步骤 1 - 配置防火墙
- 步骤 2 - 安装 NetData
- 步骤 3 - 安装 Nginx
- 步骤 4 - 安装 SSL
- 步骤 5 - 配置 Nginx
- 步骤 6 - 访问并使用 Netdata 仪表盘
- 步骤 7 - 配置 NetData(配置 NetData 内存使用量 / 关闭遥测 / 长期存储 / 降低采集频率)
- 步骤 8 - 配置 Slack 通知
- 步骤 9 - 配置邮件通知
- 步骤 10 - 测试通知渠道
- 步骤 11 - 配置系统监控
- 步骤 12 - 配置 Nginx 监控(监控 Nginx 日志)
- 步骤 13 - 配置 MySQL/MariaDB 监控
- 步骤 14 - 配置 PHP-FPM 监控(配置 PHP / 将 PHP 设置添加到 Nginx)
- 步骤 15 - 配置 Docker 引擎与容器监控
- 小结
- 配置 NetData 内存使用量
- 关闭遥测
- 长期存储
- 降低采集频率
- 监控 Nginx 日志
- 配置 PHP
- 将 PHP 设置添加到 Nginx
Netdata 是一款面向 Linux 操作系统的开源监控系统。它通过精美且详细的仪表盘提供实时的性能监控。它提供数百种工具来监控服务器、CPU、内存使用率、系统进程、磁盘使用率、IPv4 和 IPv6 网络、系统防火墙,以及 Nginx、MySQL、MongoDB、Redis、ElasticSearch、PostgreSQL、PHP-FPM 等应用程序。它还可以与其他监控工具集成,例如 Prometheus、Graphite、Kafka、Grafana 等。
本教程将介绍如何在 Debian 12 服务器上使用 Netdata 安装并监控各项服务。你还将使用它来跟踪 LEMP 技术栈和 Docker 引擎的各项指标。
前提条件
- 一台运行 Debian 12 的服务器。
- 一个具有 sudo 权限的非 root 用户。
- 一个指向你服务器的完全限定域名(FQDN),例如 netdata.example.com。
- 一个电子邮件服务商(如 Amazon SES 或 Mailgun)的 SMTP 账户。
- 确保所有软件包都是最新的。 $ sudo apt update $ sudo apt upgrade
- 系统所需的部分软件包。$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y 其中部分软件包可能已在你的系统上安装。
一台运行 Debian 12 的服务器。
一个具有 sudo 权限的非 root 用户。
一个指向你服务器的完全限定域名(FQDN),例如 netdata.example.com。
一个电子邮件服务商(如 Amazon SES 或 Mailgun)的 SMTP 账户。
确保所有软件包都是最新的。
$ sudo apt update
$ sudo apt upgrade
系统所需的部分软件包。
$ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release debian-archive-keyring unzip -y
其中部分软件包可能已在你的系统上安装。
步骤 1 - 配置防火墙
第一步是配置防火墙。Debian 默认自带 ufw(Uncomplicated Firewall,简易防火墙)。
检查防火墙是否正在运行。
$ sudo ufw status
你将看到如下输出。
Status: inactive
放行 SSH 端口,以免启用防火墙时中断当前连接。
$ sudo ufw allow OpenSSH
同时放行 HTTP 和 HTTPS 端口。
$ sudo ufw allow http
$ sudo ufw allow https
启用防火墙
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
再次检查防火墙的状态。
$ sudo ufw status
你应该会看到类似的输出。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
步骤 2 - 安装 NetData
Netdata 自带一个可在任意 Linux 发行版上运行的安装脚本。运行以下命令下载安装脚本。
$ wget -O /tmp/netdata-kickstart.sh https://my-netdata.io/kickstart.sh
使用以下命令运行安装脚本。
$ sudo sh /tmp/netdata-kickstart.sh --stable-channel --disable-telemetry
--stable-channel 标志用于安装 Netdata 的稳定版本。--disable-telemetry 标志可阻止 Netdata 向他们的服务器提交匿名统计数据。你还可以使用其他标志来自定义安装程序。
输入 Y 以确认添加 Netdata 仓库并将其安装到你的服务器上。安装成功后,你应该会看到如下输出。
Successfully installed the Netdata Agent.
Official documentation can be found online at https://learn.netdata.cloud/docs/.
Looking to monitor all of your infrastructure with Netdata? Check out Netdata Cloud at https://app.netdata.cloud.
Join our community and connect with us on:
- GitHub: https://github.com/netdata/netdata/discussions
- Discord: https://discord.gg/5ygS846fR6
- Our community forums: https://community.netdata.cloud/
[/root]# rm -rf /tmp/netdata-kickstart-wH4pebXveT
OK
Netdata 安装程序会自动启用并启动该服务。检查服务的状态。
$ sudo systemctl status netdata
? netdata.service - Real time performance monitoring
Loaded: loaded (/lib/systemd/system/netdata.service; enabled; preset: enabled)
Active: active (running) since Thu 2023-08-24 10:26:56 UTC; 42s ago
Main PID: 2811 (netdata)
Tasks: 82 (limit: 1107)
Memory: 108.2M
CPU: 4.271s
CGroup: /system.slice/netdata.service
??2811 /usr/sbin/netdata -D -P /var/run/netdata/netdata.pid
??2822 /usr/sbin/netdata --special-spawn-server
??3127 bash /usr/libexec/netdata/plugins.d/tc-qos-helper.sh 1
??3137 /usr/libexec/netdata/plugins.d/go.d.plugin 1
??3142 /usr/libexec/netdata/plugins.d/ebpf.plugin 1
??3145 /usr/libexec/netdata/plugins.d/nfacct.plugin 1
??3149 /usr/libexec/netdata/plugins.d/systemd-journal.plugin 1
??3155 /usr/libexec/netdata/plugins.d/debugfs.plugin 1
??3159 /usr/libexec/netdata/plugins.d/apps.plugin 1
Aug 24 10:26:58 netdata ebpf.plugin[3142]: set name of thread 3188 to EBPF SOFTIRQ
.......
如果你的服务未启动或未启用,可以使用以下命令完成。
$ sudo systemctl enable netdata --now
运行以下命令检查已开放的端口以及使用这些端口的进程。
$ sudo ss -plnt | grep netdata
你应该会看到类似的输出。如以下输出所示,Netdata 使用端口 19999 提供仪表盘。Netdata 使用端口 8125 接收来自其他应用程序的统计数据。
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:19999 0.0.0.0:* users:(("netdata",pid=2811,fd=8))
LISTEN 0 4096 127.0.0.1:8125 0.0.0.0:* users:(("netdata",pid=2811,fd=47))
LISTEN 0 4096 [::1]:8125 [::]:* users:(("netdata",pid=2811,fd=46))
LISTEN 0 4096 [::]:19999 [::]:* users:(("netdata",pid=2811,fd=9))
步骤 3 - 安装 Nginx
Debian 12 自带的 Nginx 版本较旧。要安装最新版本,你需要下载 Nginx 官方仓库。
导入 Nginx 的签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版的仓库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/debian `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
更新系统软件源。
$ sudo apt update
安装 Nginx 和 Apache 工具包。htpasswd 工具需要 Apache 工具包。
$ sudo apt install nginx apache2-utils
验证安装。在 Debian 系统上,以下命令需要配合 sudo 才能运行。
$ sudo nginx -v
nginx version: nginx/1.24.0
启动 Nginx 服务器。
$ sudo systemctl start nginx
检查服务状态。
$ sudo systemctl status nginx
? nginx.service - nginx - high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2023-08-24 11:36:34 UTC; 4s ago
Docs: https://nginx.org/en/docs/
Process: 3657 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 3658 (nginx)
Tasks: 2 (limit: 1107)
Memory: 1.8M
CPU: 12ms
CGroup: /system.slice/nginx.service
??3658 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
??3659 "nginx: worker process"
步骤 4 - 安装 SSL
我们需要安装 Certbot 来生成 SSL 证书。你可以使用 Debian 的仓库安装 Certbot,也可以通过 Snapd 工具获取最新版本。本教程将使用 Snapd 版本。
Debian 12 默认未安装 Snapd。安装 Snapd 软件包。
$ sudo apt install snapd
运行以下命令,确保你的 Snapd 版本是最新的。
$ sudo snap install core && sudo snap refresh core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令创建指向 /usr/bin 目录的符号链接,确保 Certbot 命令可以运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
验证 Certbot 是否正常工作。
$ certbot --version
certbot 2.6.0
生成 SSL 证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m
[email protected]
-d netdata.example.com
上述命令会将证书下载到你服务器上的 /etc/letsencrypt/live/netdata.example.com 目录。
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查 Certbot 续期调度服务。
$ sudo systemctl list-timers
你会发现 snap.certbot.renew.service 是被安排运行的服务之一。
NEXT LEFT LAST PASSED UNIT ACTIVATES
.....
Thu 2023-08-24 13:40:00 UTC 1h 59min left - - snap.certbot.renew.timer snap.certbot.renew.service
Thu 2023-08-24 18:47:23 UTC 7h left Thu 2023-08-24 09:30:41 UTC 2h 9min ago apt-daily.timer apt-daily.service
Fri 2023-08-25 00:00:00 UTC 12h left - - dpkg-db-backup.timer dpkg-db-backup.service
对该流程进行一次空运行(dry run),检查 SSL 续期是否正常工作。
$ sudo certbot renew --dry-run
如果未出现错误,说明配置完成。你的证书将自动续期。
步骤 5 - 配置 Nginx
创建并打开文件 /etc/nginx/conf.d/netdata.conf 进行编辑。
$ sudo nano /etc/nginx/conf.d/netdata.conf
在其中粘贴以下代码。
# Define netdata upstream
upstream netdata {
server 127.0.0.1:19999;
keepalive 64;
}
# Redirect all non-encrypted to encrypted
server {
listen 80;
listen [::]:80;
server_name netdata.example.com;
return 301 https://netdata.example.com$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name netdata.example.com;
ssl_certificate /etc/letsencrypt/live/netdata.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/netdata.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/netdata.example.com/chain.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_prefer_server_ciphers off;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
resolver_timeout 2s;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
access_log /var/log/nginx/netdata.example.com.access.log main;
error_log /var/log/nginx/netdata.example.com.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_pass http://netdata;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
auth_basic "NetData Private Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
完成后,按 Ctrl + X,并在提示时输入 Y 保存文件。
打开文件 /etc/nginx/nginx.conf 进行编辑。
$ sudo nano /etc/nginx/nginx.conf
在 include /etc/nginx/conf.d/*.conf; 这一行之前添加以下行。
server_names_hash_bucket_size 64;
按 Ctrl + X,并在提示时输入 Y 保存文件。
运行以下命令生成密码文件,以启用 HTTP 认证。
$ sudo htpasswd -c /etc/nginx/.htpasswd netadmin
New password:
Re-type new password:
Adding password for user netadmin
验证 Nginx 配置文件语法。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务以使新配置生效。
$ sudo systemctl restart nginx
步骤 6 - 访问并使用 Netdata 仪表盘
你应该可以通过 URL https://netdata.example.com 访问 Netdata。首次访问时,系统会提示你输入 HTTP 认证信息。

你将看到如下仪表盘。

你可以随时使用仪表盘上的播放按钮暂停、停止和启动监控。

你可以点击右侧边栏中的选项来访问各种仪表盘。
默认情况下,Netdata 可以正确跟踪你的时区。如果不正确,请点击计时器,并在弹出的窗口中选择正确的时区进行更改。

步骤 7 - 配置 NetData
Netdata 将其主配置存储在 /etc/netdata/netdata.conf 文件中。你可以在浏览器中访问 URL https://netdata.example.com/netdata.conf 来查看这些设置。

该文件分为多个部分,例如 [global]、[db]、[web]、[registry] 等。默认配置已足以让我们开始使用。Netdata 使用两类插件来收集数据:
- internal 插件使用 C 语言编写,并作为线程在 netdata 守护进程内部运行。
- external 插件使用多种语言编写,包括 Python、Go 等,并由 netdata 守护进程作为长时间运行的独立进程启动。它们通过管道(pipes)与 Netdata 守护进程通信。
配置 NetData 内存使用量
NetData 的 RAM 使用量取决于你希望将记录的图表数据保留多久才丢失。
- 保留 3600 秒(即 1 小时)的图表数据会使用 15 MB 的 RAM。
- 保留 7200 秒(即 2 小时)的图表数据会使用 30 MB 的 RAM。
- 保留 14400 秒(即 4 小时)的图表数据会使用 60 MB 的 RAM。
每当你将图表数据保留时间加倍,RAM 需求也会加倍。这些 RAM 需求基于默认仪表盘所使用的图表数量。添加更多图表和应用程序会改变这些估算值。
打开 Netdata 配置文件。
$ sudo nano /etc/netdata/netdata.conf
在 [global] 部分下添加一行 history = 14400。
[global]
run as user = netdata
# default storage size - increase for longer data retention
page cache size = 32
dbengine multihost disk space = 256
history = 14400
按 Ctrl + X,并在提示时输入 Y 保存文件。
关闭遥测
默认情况下,Netdata 会使用产品分析平台 Posthog 收集匿名使用信息。每次启动或停止 Netdata 守护进程时,Netdata 都会使用匿名统计脚本收集以下系统信息并发送给自身。
- Netdata 版本
- 操作系统名称、版本、id、id_like
- 内核名称、版本、架构
- 虚拟化技术
- 容器化技术
- 关于 Netdata 客户端故障的附加信息。
我们在安装过程中已关闭遥测,但如果你没有关闭,现在可以操作。在 Netdata 目录中创建一个名为 .opt-out-from-anonymous-statistics 的空文件。
$ sudo touch /etc/netdata/.opt-out-from-anonymous-statistics
重启 Netdata 以使更改生效。
$ sudo systemctl restart netdata
长期存储
默认情况下,Netdata 使用系统的 RAM 和磁盘来存储历史数据。默认的 Netdata 进程每秒收集约 2000 个指标,这意味着默认配置会在 RAM 和磁盘上存储约两天量的指标。
要存储更多指标,你有以下两个选择:
- 配置 Netdata 使用更多 RAM 和磁盘空间
- 将指标归档到外部数据库
本教程只讨论第一种方案。关于第二种方案,你应该参考 Netdata 的官方文档。
配置 Netdata 使用更多 RAM 和磁盘空间
打开文件 /etc/netdata/netdata.conf 进行编辑。
$ sudo nano /etc/netdata/netdata.conf
在 [global] 部分下配置以下行。
[global]
...
page cache size = 32
dbengine multihost disk space = 256
按 Ctrl + X,并在提示时输入 Y 保存文件。
page cache size 决定所使用的 RAM 大小,dbengine multihost disk space 变量决定磁盘使用量。默认情况下,Netdata 使用 32 MB 的 RAM 和 256 MB 的磁盘空间。你可以根据需要修改这两个值中的任意一个。
你可以使用 Netdata 的存储指标计算器来决定需要多少 RAM 和磁盘空间。
降低采集频率
你可以通过增大指标采集间隔来优化 Netdata 的性能。默认情况下,Netdata 每秒采集一次指标。
要更改这一设置,打开 Netdata 配置文件进行编辑。
$ sudo nano /etc/netdata/netdata.conf
在 [global] 部分下添加以下行。这会将采集频率提高到 5 秒。
[global]
...
update every = 5
按 Ctrl + X,并在提示时输入 Y 保存文件。
步骤 8 - 配置 Slack 通知
第一步是创建一个 Slack 应用,并将其连接到工作区中的特定频道,以配置 Slack 通知。
访问 Slack API 页面,点击 Create App(创建应用)按钮开始创建应用。

点击 From Scratch(从零开始)链接创建应用。

为你的应用选择一个名称,并选择希望应用出现的工作区。如果你不想将应用关联到现有工作区,可以另外创建一个,然后回到此步骤。

从左侧边栏的 Features 菜单中选择对应选项,打开 Incoming Webhook(入站 Webhook)页面,然后激活该 webhook。

点击页面底部的 Add New Webhook to Workspace(为工作区添加新 Webhook)按钮,选择你的工作区和接收通知的目标频道。

点击 Allow(允许)按钮继续。返回 Incoming Webhooks 页面,复制 Webhook URL。

返回终端,切换到 /etc/netdata 目录。
$ cd /etc/netdata
Netdata 提供了 edit-config 脚本用于编辑和创建 Netdata 配置文件。运行以下文件,使用系统默认编辑器创建并打开 health_alarm_notify.conf 文件。
$ sudo ./edit-config health_alarm_notify.conf
向下滚动到以下部分。
# Enable slack notification
SEND_SLACK="YES"
# Select the slack webhook
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx/xxxxxx/xxxxxxxxxxxxx"
# Default channel for notification
DEFAULT_RECIPIENT_SLACK="notifications"
确保变量 SEND_SLACK 设置为 yes。将复制的 webhook URL 粘贴到 SLACK_WEBHOOK_URL 变量。为 DEFAULT_RECIPIENT_SLACK 变量输入你的频道名称。
如果你使用的是 Vim 编辑器,按 Escape 键退出编辑,输入 :x 并按 Enter 键保存文件并退出编辑器。
如果你使用的是 Nano 编辑器,按 Ctrl + X 并在提示时输入 Y 保存文件。
重启 Netdata 以使更改生效。
$ sudo systemctl restart netdata
步骤 9 - 配置邮件通知
Netdata 默认使用 sendmail 发送邮件通知,但管理邮件服务器并非易事。Netdata 不支持 SMTP,但你可以安装一个名为 msmtp 的软件包,它允许你向 SMTP 服务器发送邮件。
安装 msmtp。
$ sudo apt install msmtp
创建并打开 msmtp 的配置文件。
$ sudo nano /etc/msmtprc
在其中粘贴以下代码。
# Set default values for all following accounts.
defaults
# Use the mail submission port 587 instead of the SMTP port 25.
port 587
# Always use TLS.
tls on
# The SMTP server of your ISP
account ses
host email-smtp.<location>.amazonaws.com
from
[email protected]
auth on
user <yoursesusername>
password <yoursespassword>
# Set default account to isp
account default: ses
按 Ctrl + X,并在提示时输入 Y 保存文件。
Netdata 提供了 edit-config 脚本用于编辑和创建 Netdata 配置文件。运行以下文件,使用系统默认编辑器创建并打开 health_alarm_notify.conf 文件。
$ sudo /etc/netdata/edit-config health_alarm_notify.conf
向下滚动到以下部分,并输入 msmtp 的路径。
# external commands
# The full path to the sendmail command.
# If empty, the system $PATH will be searched for it.
# If not found, email notifications will be disabled (silently).
sendmail="/usr/bin/msmtp"
找到以下部分,输入发送方和接收方的详细信息,并确保已启用邮件发送。
# email global notification options
# multiple recipients can be given like this:
# "
[email protected]
[email protected]
..."
# the email address sending email notifications
# the default is the system user netdata runs as (usually: netdata)
# The following formats are supported:
# EMAIL_SENDER="user@domain"
# EMAIL_SENDER="User Name <user@domain>"
# EMAIL_SENDER="'User Name' <user@domain>"
# EMAIL_SENDER="\"User Name\" <user@domain>"
EMAIL_SENDER="Server Admin <
[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]
"
# to receive only critical alarms, set it to "root|critical"
按 Ctrl + X,并在提示时输入 Y 保存文件。
重启 Netdata 以使更改生效。
$ sudo systemctl restart netdata
步骤 10 - 测试通知渠道
我们来测试邮件通知是否生效。以安装过程中创建的 netdata 系统用户身份登录。
$ sudo su -s /bin/bash netdata
运行 Alarm 通知脚本发送一条测试通知。
$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test
你将收到如下输出。
# SENDING TEST WARNING ALARM TO ROLE: sysadmin
2023-08-24 12:56:00: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is WARNING to '
[email protected]
'
# OK
# SENDING TEST CRITICAL ALARM TO ROLE: sysadmin
2023-08-24 12:56:03: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is CRITICAL to '
[email protected]
'
# OK
# SENDING TEST CLEAR ALARM TO ROLE: sysadmin
2023-08-24 12:56:06: alarm-notify.sh: INFO: sent email notification for: netdata test.chart.test_alarm is CLEAR to '
[email protected]
'
# OK
退出该用户。
$ exit.
打开你的 Slack 应用,你应该已经收到了如下提醒。

你还应该收到三封关于测试警告的邮件。

步骤 11 - 配置系统监控
既然我们已经配置并测试了通知,接下来为系统(例如 CPU 使用率)配置并测试通知。
运行以下命令创建并打开 CPU 配置文件。
$ sudo /etc/netdata/edit-config health.d/cpu.conf
如下图所示,修改 10min_cpu_usage 下的 warn 和 crit 选项的值。
warn: $this > (($status >= $WARNING) ? (60) : (70))
crit: $this > (($status == $CRITICAL) ? (75) : (85))
将行中的 to:silent 改为 to:sysadmin,如下图所示。
template: 10min_cpu_usage
on: system.cpu
class: Utilization
type: System
component: CPU
os: linux
hosts: *
lookup: average -10m unaligned of user,system,softirq,irq,guest
units: %
every: 1m
warn: $this > (($status >= $WARNING) ? (60) : (70))
crit: $this > (($status == $CRITICAL) ? (75) : (85))
delay: down 15m multiplier 1.5 max 1h
info: average CPU utilization over the last 10 minutes (excluding iowait, nice and steal)
to: sysadmin
保存文件并退出编辑器。
to:silent 设置会使通知静音,因此要接收通知,你需要将这些监控项的 monitor 值改为 to:sysadmin。
上述设置将在 CPU 使用率处于 60% 到 70% 之间时发送警告,在 CPU 使用率处于 75% 到 85% 之间时发送严重警告。
重启 Netdata 服务。
$ sudo systemctl restart netdata
我们通过安装 Stress 应用来测试该设置。
$ sudo apt install stress
运行以下命令使服务器的 CPU 使用率飙升。
$ stress --cpu 2
让该命令运行 5-10 分钟,你将收到 CPU 使用率过高的消息。收到这些消息后,返回终端并按 Ctrl + Z 退出该命令。
停止服务后,你会在 Slack 上收到一条 CPU 恢复通知。

你还会收到如下的相同邮件消息。

步骤 12 - 配置 Nginx 监控
使用 Netdata 监控的最常见应用之一是服务器和 SQL 软件包。我们使用 Netdata 来监控 Nginx 服务器。
要启用对 Nginx 服务器的监控,我们需要使用 ngx_http_stub_status_module 模块。它通常随 Nginx 预装。你可以检查该模块是否存在。在 Debian 系统上,该命令需要 sudo。
$ sudo nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module
如果没有任何输出,说明你的 Nginx 安装不支持该功能。这种情况下你需要重新编译 Nginx。
打开 Nginx 的默认配置文件 /etc/nginx/conf.d/default.conf 进行编辑。由于我们是从 Nginx 官方仓库安装的,文件位置有所不同。如果你是从操作系统仓库安装的 Nginx,则该文件的位置为 /etc/nginx/nginx.conf。
$ sudo nano /etc/nginx/conf.d/default.conf
在 server 块中最后一个右花括号之前插入以下代码。
# Enable module stub_status
location /stub_status {
stub_status;
allow 127.0.0.1; #only allow requests from localhost
deny all; #deny all other hosts
}
按 Ctrl + X,并在提示时输入 Y 保存文件。
验证 Nginx 配置。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务器。
$ sudo systemctl restart nginx
重启 Netdata 服务。
$ sudo systemctl restart netdata
你应该会在 Netdata 仪表盘中看到 Nginx 连接详情。

监控 Nginx 日志
Netdata 还可以监控 Nginx 访问日志。为此,请切换到 Netdata 目录。
$ cd /etc/netdata
运行以下命令生成用于监控访问日志的配置文件。
$ sudo ./edit-config go.d/web_log.conf
滚动到文件底部,找到以下部分。
# -------------------------------------------
# nginx log on various distros
# debian, arch
nginx_log:
name: 'nginx'
path: '/var/log/nginx/access.log'
# gentoo
nginx_log2:
name: 'nginx_site'
path: '/var/log/nginx/localhost.access_log'
修改路径以监控相应的日志文件。你可以添加任意多个部分来监控多个主机及其访问日志文件。我们的配置文件如下所示。
# -------------------------------------------
# nginx log on various distros
# debian, arch
nginx_log:
name: 'nginx'
path: '/var/log/nginx/access.log'
nginx_log2:
name: 'nginx_site1'
path: '/var/log/nginx/site1.access_log'
nginx_log3:
name: 'nginx_site2'
path: '/var/log/nginx/site2.access_log'
nginx_log4:
name: 'nginx_site3'
path: '/var/log/nginx/site3.access_log'
保存并退出编辑器。
要访问日志文件,Netdata 需要访问该目录的权限。默认情况下,adm 系统组有权访问日志文件。要让 Netdata 获得访问权限,我们需要将 netdata 用户添加到 adm 组。
$ sudo usermod -aG adm netdata
重启 Nginx 和 Netdata 服务。
$ sudo systemctl restart nginx netdata
重新加载 Netdata 仪表盘以查看你的日志文件数据。

步骤 13 - 配置 MySQL/MariaDB 监控
本教程将安装 MariaDB。我们将为此使用 MariaDB 仓库。
导入 MariaDB GPG 密钥。
$ sudo curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'
创建并打开 MariaDB 仓库文件。
$ sudo nano /etc/apt/sources.list.d/mariadb.sources
在其中粘贴以下代码。
# MariaDB 10.11 repository list - created 2023-09-05 11:18 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/10.11/debian
URIs: https://mirrors.aliyun.com/mariadb/repo/10.11/debian
Suites: bookworm
Components: main
Signed-By: /usr/share/keyrings/mariadb-keyring.pgp
按 Ctrl + X,并在提示时输入 Y 保存文件。
更新系统软件源列表。
$ sudo apt update
安装 MariaDB 服务器。
$ sudo apt install mariadb-server
MariaDB 已启用并正在运行。检查服务状态。
$ sudo systemctl status mariadb
? mariadb.service - MariaDB 10.11.5 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
??migrated-from-my.cnf-settings.conf
Active: active (running) since Tue 2023-09-05 11:44:17 UTC; 20s ago
Docs: man:mariadbd(8)
https://mariadb.com/kb/en/library/systemd/
Process: 9396 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Process: 9397 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 9399 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ] && systemctl set-environment _WSREP_START_POSITION=$VAR >
Process: 9440 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
Process: 9442 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
Main PID: 9428 (mariadbd)
Status: "Taking your SQL requests now..."
Tasks: 13 (limit: 1107)
Memory: 111.8M
CPU: 663ms
CGroup: /system.slice/mariadb.service
??9428 /usr/sbin/mariadbd
启动 MySQL 安全安装脚本。在 MariaDB 中,文件名有所不同。
$ sudo mariadb-secure-installation
....
Enter current password for root (enter for none): (Press Enter)
....
Switch to unix_socket authentication [Y/n] Y (Type Y and Press Enter)
....
Change the root password? [Y/n] Y (Type Y and Press Enter)
New password:
Re-enter new password:
Password updated successfully!
....
Remove anonymous users? [Y/n] Y (Type Y and Press Enter)
....
Disallow root login remotely? [Y/n] Y (Type Y and Press Enter)
....
Remove test database and access to it? [Y/n] Y (Type Y and Press Enter)
....
Reload privilege tables now? [Y/n] Y (Type Y and Press Enter)
....
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
打开 /etc/mysql/mariadb.conf.d/50-server.cnf 文件进行编辑。
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
在文件中找到 [mariadb] 部分,并按如下所示粘贴以下行以启用 Userstats 插件。该设置仅在 MariaDB 上有效,在 MySQL 服务器上无效。
[mariadb]
userstat = 1
登录到 MySQL shell。
$ sudo mysql
运行以下命令创建一个 Netdata SQL 用户,并授予其跟踪 MySQL 统计信息的权限。
MariaDB> create user 'netdata'@'localhost';
MariaDB> GRANT USAGE, REPLICATION CLIENT, PROCESS ON *.* TO 'netdata'@'localhost';
MariaDB> FLUSH PRIVILEGES;
MariaDB> exit
为 Netdata 创建 MySQL 配置文件。
$ sudo /etc/netdata/edit-config go.d/mysql.conf
将打开一个文件,显示所有可能的选项。如果确认无误,按 Ctrl + X 并在提示时输入 Y 保存并关闭文件。
重启 MariaDB 服务器。
$ sudo systemctl restart mariadb
重启 Netdata 服务。
$ sudo systemctl restart netdata
MariaDB/MySQL 仪表盘应该会开始出现在 Netdata 仪表盘中。

步骤 14 - 配置 PHP-FPM 监控
你可以使用 Netdata 监控一个或多个 PHP-FPM 实例。本教程将安装 PHP 8.2,然后启用其监控。
Debian 12 默认自带 PHP 8.2。但为了始终使用最新版本的 PHP,我们将使用 Ondrej 的 PHP 仓库。
首先,导入 Sury 仓库的 PHP GPG 密钥。
$ sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg
添加 Ondrej Sury 的 PHP 仓库。
$ sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
更新系统软件源列表。
$ sudo apt update
现在,你可以安装任意版本的 PHP。
$ sudo apt install php8.2-fpm php8.2-cli php8.2-mbstring
验证安装。
$ php --version
PHP 8.2.10 (cli) (built: Sep 4 2023 08:12:29) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies
配置 PHP
打开文件 /etc/php/8.2/fpm/pool.d/www.conf。
$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf
我们需要将 PHP 进程的 Unix 用户/组设置为 nginx。在文件中找到 user=www-data 和 group=www-data 行,并将其改为 nginx。
....
; Unix user/group of the child processes. This can be used only if the master
; process running user is root. It is set after the child process is created.
; The user and group can be specified either by their name or by their numeric
; IDs.
; Note: If the user is root, the executable needs to be started with
; --allow-to-run-as-root option to work.
; Default Values: The user is set to master process running user by default.
; If the group is not set, the user's group is used.
user = nginx
group = nginx
....
此外,在文件中找到 listen.owner=www-data 和 listen.group=www-data 行,并将其改为 nginx。
listen.owner = nginx
listen.group = nginx
向下滚动文件,找到 ;pm.status_path = /status 选项。如下所示,删除其前面的分号来取消注释该行。
....
; Note: There is a real-time FPM status monitoring sample web page available
; It's available in: /usr/share/php/8.2/fpm/status.html
;
; Note: The value must start with a leading slash (/). The value can be
; anything, but it may not be a good idea to use the .php extension or it
; may conflict with a real PHP file.
; Default Value: not set
pm.status_path = /status
....
按 Ctrl + X,并在提示时输入 Y 保存文件。
重启 PHP-fpm 进程。
$ sudo systemctl restart php8.2-fpm
将 PHP 设置添加到 Nginx
打开 Nginx 的默认配置文件 /etc/nginx/conf.d/default.conf 进行编辑。
$ sudo nano /etc/nginx/conf.d/default.conf
在 server 块中最后一个右花括号之前插入以下代码。
# define PHP-FPM monitoring
location ~ ^/(status|ping)$ {
allow 127.0.0.1;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; # Depends on the PHP Version and OS Distro
}
按 Ctrl + X,并在提示时输入 Y 保存文件。
验证 Nginx 配置。
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
重启 Nginx 服务器。
$ sudo systemctl restart nginx
重启 Netdata 服务。
$ sudo systemctl restart netdata
重新加载 Netdata 仪表盘,你应该能看到 PHP-FPM 的统计信息。

步骤 15 - 配置 Docker 引擎与容器监控
Netdata 可以同时监控 Docker 引擎和 Docker 容器。它还能监控这些容器内运行的应用,但本教程不会涉及这部分内容。
我们先安装 Docker。
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
$ echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io
$ sudo usermod -aG docker ${USER}
$ su - ${USER}
Docker 服务已启用并启动。你可以检查服务的状态。
$ sudo systemctl status docker
要监控 Docker 引擎,你需要启用 Docker 的 metrics 功能。
创建并打开文件 /etc/docker/daemon.json 进行编辑。
$ sudo nano /etc/docker/daemon.json
在其中粘贴以下代码。
{
"metrics-addr" : "127.0.0.1:9323",
"experimental" : true
}
按 Ctrl + X,并在提示时输入 Y 保存文件。该 URL 供 Prometheus 用于跟踪 Docker 引擎的统计信息。
为 Docker 收集器创建一个配置文件。
$ sudo /etc/netdata/edit-config go.d/docker.conf
为 Prometheus 的 Docker 引擎再创建一个配置文件。
$ sudo /etc/netdata/edit-config go.d/docker_engine.conf
重启 Netdata 和 Docker 服务。
$ sudo systemctl restart docker netdata
再次加载 Netdata 仪表盘,你就可以看到 Docker 的统计信息。

你会在仪表盘上看到另一个名为 Prometheus Metrics 的条目,因为 metrics 选项是为 Prometheus 仪表盘设计的。

下一步是监控 Docker 容器。Netdata 使用称为 cgroups(控制组)的控制组来监控 Docker 容器。控制组是 Linux 的一项功能,用于限制和跟踪一组进程(此处为容器)的资源使用情况。如果在安装 Netdata 时已有 Docker 容器在运行,它们会被自动跟踪。但是,如果你在安装 Netdata 之后运行容器,则需要重启容器。
运行一个测试容器。
$ docker container run -d nginx
检查容器的状态。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9d6cde479224 nginx "/docker-entrypoint.…" 7 seconds ago Up 5 seconds 80/tcp zealous_knuth
如图所示,容器名称为 zealous_knuth。由于该容器是在安装 Netdata 之后启动的,请重启服务。
$ sudo systemctl restart netdata
加载仪表盘,你应该能看到容器统计信息。你可以在统计信息中看到容器 ID。

小结
至此,本教程关于在 Debian 12 服务器上安装并使用 Netdata 监控系统,来监控 Nginx、MySQL、PHP-FPM 和 Docker 等各类应用的内容就全部结束了。如果你有任何疑问,请在下方评论区留言。