Nginx Amplify 是一种免费、灵活且强大的方法,用于分析 Nginx 和 Nginx Plus Web 服务器的负载和性能。 它易于设置和使用。 Nginx Amplify 还带有 MySQL/MariaDB、PHP-FPM 插件,因此您可以监控完整的 LEMP 堆栈应用程序。 (LEMP 代表 Linux、Nginx、MySQL/MariaDB、PHP。)
Nginx Amplify 由 Nginx, Inc 开发,该公司是 Nginx Web 服务器背后的公司。 这是一个基于 SaaS 的解决方案。 您在服务器上安装 Nginx Amplify 代理,它将收集指标并将其发送到 SaaS 服务。 Nginx Amplify 代理是开源且轻量级的。 它收集了许多指标,包括:
- 系统指标(CPU、RAM 使用率、网络流量、磁盘使用率、磁盘 I/O、磁盘延迟等)
- Nginx 指标(连接、请求、HTTP 状态、响应时间、流量等)
- MySQL/MariaDB 指标(连接、选择查询、插入查询、更新查询、慢查询等)
- PHP-FPM 指标(连接、连接队列、慢速请求等)
Nginx Amplify 也可以
- 使用静态分析器帮助您改进 Nginx 配置。
- 提醒您异常行为
在 CentOS 8/RHEL8 Linux 服务器上安装 Nginx Amplify
Nginx Amplify 代理是开源的,您可以使用安装脚本在以下 Linux 发行版上安装 Nginx Amplify:
- Debian 9、Debian 10、
- Ubuntu 16.04、Ubuntu 18.04
- CentOS/RHEL 6、CentOS/RHEL 7、CentOS/RHEL 8
首先在 https://amplify.nginx.com 注册一个账号
确认你的邮件地址。 接下来,您需要在 Linux 服务器上安装 Nginx Amplify Agent。 SSH 到您的服务器并以 root 身份登录。 Nginx Amplify 网站非常好地提供了安装 Nginx Amplify 所需的命令,因此只需在您的服务器上复制并运行这些命令即可。
请注意,您需要以 root 身份运行这些命令。
Nginx Amplify 需要 Python2。 从默认的 CentOS 存储库安装它。
sudo dnf install python2
下载安装脚本。
然后运行安装脚本。 (每个 Amplify 帐户都有一个唯一的 API 密钥。)
安装后,代理将自动启动。 您可以通过以下方式检查其状态:
systemctl status amplify-agent
示例输出:
● amplify-agent.service - NGINX Amplify Agent Loaded: loaded (/usr/lib/systemd/system/amplify-agent.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2020-06-12 02:38:09 EDT; 2min 49s ago Docs: https://amplify.nginx.com/docs/ Process: 13768 ExecStart=/etc/init.d/amplify-agent start (code=exited, status=0/SUCCESS) Main PID: 13820 (amplify-agent) Tasks: 2 (limit: 5059) Memory: 48.0M CGroup: /system.slice/amplify-agent.service └─13820 amplify-agent
提示:如果上述命令没有立即退出,请按 Q 重新获得对终端的控制权。
要在启动时启用自动启动,请运行
sudo systemctl enable amplify-agent
在 Nginx 中配置 Stub_status
Amplify 代理可以开箱即用地收集系统指标。 为了收集 Nginx 指标,您需要配置 Nginx stub_status。 创建一个配置文件。
sudo nano /etc/nginx/conf.d/stub_status.conf
在 http {...}
语境。
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; } }
Save 和 close 文件。 然后重新加载 Nginx 以使更改生效。
sudo systemctl reload nginx
现在 Amplify 代理可以开始收集 Nginx 指标。
创建自定义 Nginx 日志格式
Nginx Amplify 代理还可以从 Nginx 日志文件中收集信息。 但是,默认的日志格式为我们提供了有限的信息。 如果你真的关心应用程序的性能,你应该创建一个自定义的日志格式来显示请求时间、上游响应时间、缓存命中等。
打开 nginx.conf
文件。
sudo nano /etc/nginx/nginx.conf
在 http {...}
上下文,高于 include
指令。 在这里,我们正在创建一个名为的自定义 Nginx 日志格式 apm
(应用程序性能监控),包括有关 request_time、upstream_response_time、upstream_connect_time 和 upstream_header_time 的信息。 所有这些都以秒为单位,以毫秒为单位进行测量。
log_format apm '"$time_local" client=$remote_addr ' 'method=$request_method request="$request" ' 'request_length=$request_length ' 'status=$status bytes_sent=$bytes_sent ' 'body_bytes_sent=$body_bytes_sent ' 'referer=$http_referer ' 'user_agent="$http_user_agent" ' 'upstream_addr=$upstream_addr ' 'upstream_status=$upstream_status ' 'request_time=$request_time ' 'upstream_cache_status="$upstream_cache_status" ' 'upstream_response_time=$upstream_response_time ' 'upstream_connect_time=$upstream_connect_time ' 'upstream_header_time=$upstream_header_time';
Save 和 close 文件。 然后打开你的 Nginx 虚拟主机配置文件。 例如,
sudo nano /etc/nginx/conf.d/linuxbabe.com.conf
在里面 server {...}
上下文,添加以下两行以启用访问日志和错误日志。 访问日志正在使用 apm
格式和错误日志使用 warn
日志级别。
access_log /var/log/nginx/linuxbabe.com.access.log apm; error_log /var/log/nginx/linuxbabe.com.error.log warn;
Save 和 close 文件。 然后重新加载 Nginx。
sudo systemctl reload nginx
现在我可以在 Amplify 图中看到上游响应时间和其他与性能相关的指标。 良好的上游响应时间低于 0.5 秒。 否则你的访问者会觉得你的网站很慢。 如果您可以调整您的服务器,使上游响应时间低于 0.2 秒,您的网站将会非常活泼。
如果 Amplify 代理未报告 Nginx 指标,请检查 Amplify 代理是否以与 Nginx 工作进程相同的用户身份运行。 您还可以查看 Amplify Agent 日志 (/var/log/amplify-agent/agent.log
)。
如何在 Nginx 访问日志中排除自己的 IP 地址
有时,您的活动可能会影响 Nginx 指标。 您可以在访问日志中排除您自己的 IP 地址以避免这种情况。 首先,添加以下几行 http
Nginx 配置文件的上下文。 将 12.34.56.78 替换为您自己的 IP 地址。 如果 HTTP 请求来自你自己的 IP 地址,Nginx 会设置 $log_ip
变量到 0
.
map $remote_addr $log_ip {
"12.34.56.78" 0;
default 1;
}
然后改变 access_log
指令如下。
access_log /var/log/nginx/linuxbabe.com.access.log apm if=$log_ip;
Save 和 close 文件。 然后文本 nginx 配置并重新加载。
sudo nginx -t sudo systemctl reload nginx
如何监控 MariaDB/MySQL 数据库服务器
首先,我们需要在 MariaDB/MySQL 中创建一个用户来收集指标。 登录到 MariaDB/MySQL 监视器。
mysql -u root -p
为 Amplify 代理创建一个新用户。 代替 your_password
使用您的首选密码。 (建议选择与 MariaDB/MySQL 根密码不同的密码。)
create user 'amplify-agent'@'localhost' identified by 'your_password';
Exit MariaDB/MySQL 服务器。
exit;
接下来,我们需要在 Amplify 配置文件中启用 Amplify MariaDB/MySQL 插件。
sudo nano /etc/amplify-agent/agent.conf
在里面 [extensions]
部分,您可以看到默认情况下禁用 mysql 插件。
[extensions] phpfpm = True mysql = False
改变 False
到 True
启用此插件。
[extensions] phpfpm = True mysql = True
然后在 [mysql]
部分,找到以下行。
unix_socket = /var/run/mysqld/mysqld.sock password = amplify-agent
CentOS 上的 MariaDB 包监听 /var/lib/mysql/mysql.sock
Unix 套接字,因此更改的值 unix_socket
到
unix_socket = /var/lib/mysql/mysql.sock
然后用你设置的密码替换默认密码 amplify-agent
用户。 Save 和 close 文件。 然后重新启动 Amplify 代理以使更改生效。
sudo systemctl restart amplify-agent
现在 Amplify 代理开始收集 MariaDB/MySQL 指标。 (您可能需要等待几分钟。)
如何启用 MariaDB 慢查询日志
慢查询日志可以显示哪些查询需要很长时间才能给出响应。 它是优化 MariaDB 性能的重要工具。 要启用 MariaDB 慢查询日志,请编辑服务器配置文件。
sudo nano /etc/my.cnf.d/mariadb-server.cnf
在 [mysqld]
部分。
slow_query_log = 1 slow_query_log_file = /var/log/mariadb/mariadb-slow.log long_query_time = 1 log_slow_rate_limit = 1000 log_slow_verbosity = query_plan log-queries-not-using-indexes
我设置了 long_query_time
到低数 1 秒。 您还可以指定较小的值,例如 0.5 秒。 Save 和 close 文件。 重新启动 MariaDB 以使更改生效。
sudo systemctl restart mariadb
现在 Nginx Amplify 可以在图表中显示慢查询。
如何监控 PHP-FPM
Amplify 代理 PHP-FPM 插件默认启用,但我们需要启用 PHP-FPM 状态才能收集指标。 编辑 PHP-FPM 池配置文件。
sudo nano /etc/php-fpm.d/www.conf
找到以下行并删除分号以启用 PHP-FPM 状态。
;pm.status_path = /status
默认情况下启用 PHP 慢日志,如以下行所示。
slowlog = /var/log/php-fpm/www-slow.log
然后找到以下行。
;request_slowlog_timeout = 0
删除分号并将超时秒数设置为 1s。
request_slowlog_timeout = 1s
Save 和 close 文件。 为 PHP-FPM 日志创建一个目录。
sudo mkdir -p /var/log/php-fpm/
重新启动 PHP-FPM 以使更改生效。
sudo systemctl restart php-fpm
现在 Amplify 代理开始收集 PHP-FPM 指标,包括慢速请求日志。
放大概览页面
在概览页面上,您可以查看系统的整体应用程序运行状况评分和 5 个关键指标。
- 请求总数
- HTTP 5xx 错误
- 请求时间(您需要创建如前所述的自定义日志格式以显示此指标。)
- Nginx 使用多少带宽
- CPU使用率
应用程序运行状况评分受 HTTP 5xx 错误数量的影响。 如果没有 HTTP 5xx 错误,则分数将为 100%。
图表
在 Graphs 页面中,您可以看到预定义的系统、Nginx、MariaDB/MySQL 和 PHP-FPM 指标。
Nginx 放大仪表板
Amplify 仪表板允许您创建自定义图形和图表并将它们分组在一页上。 例如,您可以在一个页面上组合所有与性能相关的图表,或者您可能希望显示特定 URL 的所有指标。
如果您已经配置了 Nginx FastCGI 缓存,您还可以在仪表板中为 Nginx 缓存命中率和缓存过期创建图表。
分析仪
分析器中有用的工具之一是静态分析。 Amplify 可以解析您的 Nginx 配置文件并提出性能、安全性和可靠性建议。 您可以使用它来识别错误并改进配置。
如您所见,我的 Nginx 服务器有 5 个警告,因此我单击“打开”链接以查看如何调整我的 Nginx 配置。
进行调整后,等待几分钟,警告就会消失。
警报
默认情况下,如果 Amplify 代理停止工作,则会向您的电子邮件地址发送警报。 在警报页面上,您可以为服务器设置各种警报。 例如,如果上游响应时间在过去 2 分钟内超过 1 秒,我可以告诉 Amplify 向我发送电子邮件。
如果您的服务器内存不足,那么它可能会终止 MySQL/MariaDB 进程。 您可以创建一个警报规则来监控 MySQL/MariaDB 的正常运行时间,如下所示。 如果过去 2 分钟的正常运行时间低于 120 秒,则发送电子邮件通知。
Amplify 代理停止工作
我经常发现 Amplify 代理因未知原因停止发送性能指标。 我创建了一个 Cron 作业来每天重新启动一次 Amplify-agent 来解决这个问题。
sudo crontab -e
在 crontab 文件中添加以下行。
@daily systemctl restart amplify-agent
Save 和 close 文件。
总结
我希望这篇文章能帮助您安装和使用 Nginx Amplify 来监控 CentOS 8/RHEL 8 上 Nginx 或 LEMP 堆栈应用程序的性能。一如既往,如果您觉得这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 保重?