Project Icon

agent

简化NGINX实例管理与监控

NGINX Agent作为NGINX实例的配套工具,支持远程配置管理、性能指标收集和事件通知。它通过gRPC和REST接口与Linux工具协同工作,适用于各种Linux发行版和部署环境。NGINX Agent具备日志轮转功能,支持Docker镜像构建,为管理大规模NGINX部署提供了灵活高效的解决方案。

GitHub go.mod Go 版本 GitHub 发布版本 GitHub 许可证 欢迎贡献 Slack

NGINX Agent 横幅

NGINX Agent 是 NGINX 开源版或 NGINX Plus 实例的配套守护程序。它可以实现:

  • 远程管理 NGINX 配置
  • 收集和报告实时 NGINX 性能和操作系统指标
  • NGINX 事件通知

Grafana 仪表板显示 NGINX Agent 报告的指标 Grafana 仪表板显示 NGINX Agent 报告的指标

目录

工作原理

NGINX Agent 作为一个伴随进程运行在运行 NGINX 的系统上。它为配置管理和从 NGINX 进程和操作系统收集指标提供 gRPC 和 REST 接口。NGINX Agent 使用常见的 Linux 工具实现远程与 NGINX 交互,并解锁构建复杂监控和控制系统的能力,可以管理大量 NGINX 实例。

NGINX Agent 工作原理

配置管理

NGINX Agent 提供 API 接口用于提交更新的配置文件。收到新文件后,它会检查 nginx -V 的输出以确定现有配置的位置。然后使用 nginx -t 验证新配置,在应用之前通过向 NGINX 主进程发送 HUP 信号。

收集指标

NGINX Agent 与 NGINX 进程信息交互并解析 NGINX 日志以计算和报告指标。与 NGINX Plus 交互时,NGINX Agent 从 NGINX Plus API 获取相关信息。报告的指标可以被 Prometheus 聚合并使用 Grafana 等工具可视化。

NGINX Agent 保持与 NGINX Plus API 的连接开放,并根据收集间隔进行查询。这个连接会在指标中报告,根据报告阶段的不同,该连接可能显示为空闲或活跃。

NGINX 开源版

当与 NGINX 开源版实例一起运行时,NGINX Agent 要求打开 NGINX 访问和错误日志,并包含所有默认变量。

NGINX Plus

为了使 NGINX Agent 能够与 NGINX Plus 实例正常工作,需要在该实例的 nginx.conf 中配置 API。详情请参阅实例指标概览。一旦 NGINX Plus 配置了 /api/ 端点,NGINX Agent 将在启动时自动使用它。

事件通知

NGINX Agent 允许 gRPC 连接的控制系统为特定事件注册监听器。当 NGINX Agent 发送相关系统信号时,控制机制会被调用。通知的来源可以是 NGINX 实例或 NGINX Agent 本身。以下是当前支持的事件列表:

事件描述
AGENT_START_MESSAGENGINX Agent 进程启动
AGENT_STOP_MESSAGENGINX Agent 进程停止
NGINX_FOUND_MESSAGE系统上检测到 NGINX 主进程
NGINX_STOP_MESSAGENGINX 主进程停止
NGINX_RELOAD_SUCCESS_MESSAGENGINX 主进程成功重新加载
NGINX_RELOAD_FAILED_MESSAGENGINX 主进程重新加载失败
NGINX_WORKER_START_MESSAGE新的 NGINX 工作进程启动
NGINX_WORKER_STOP_MESSAGENGINX 工作进程停止
CONFIG_APPLY_SUCCESS_MESSAGE成功应用新的 NGINX 配置
CONFIG_APPLY_FAILURE_MESSAGE应用新的 NGINX 配置失败
CONFIG_ROLLBACK_SUCCESS_MESSAGE成功回滚 NGINX 配置
CONFIG_ROLLBACK_FAILURE_MESSAGE回滚 NGINX 配置失败

安装

安装 NGINX

NGINX Agent 直接与安装在同一系统上的 NGINX 服务器进程交互。如果您还没有安装,请按照以下步骤安装 NGINX 开源版NGINX Plus。安装完成后,确保 NGINX 实例正在运行。

从软件包文件安装 NGINX Agent

要在您的系统上安装 NGINX Agent,请前往 Releases 下载最新的适用于您的操作系统发行版和 CPU 架构的软件包。

使用系统的包管理器安装软件包。以下是一些示例:

Debian、Ubuntu 和其他使用 dpkg 包管理器的发行版。

sudo dpkg -i nginx-agent-<agent-version>.deb

RHEL、CentOS RHEL、Amazon Linux、Oracle Linux 和其他使用 yum 包管理器的发行版

sudo yum localinstall nginx-agent-<agent-version>.rpm

RHEL 和其他使用 rpm 包管理器的发行版

sudo rpm -i nginx-agent-<agent-version>.rpm

Alpine Linux

sudo apk add nginx-agent-<agent-version>.apk

FreeBSD

sudo pkg add nginx-agent-<agent-version>.pkg

启动和启用开机自启

要在使用 systemd 的系统上启动 NGINX Agent,运行以下命令:

sudo systemctl start nginx-agent

要启用 NGINX Agent 在开机时自动启动,运行以下命令:

sudo systemctl enable nginx-agent

在 Alpine Linux 上,使用以下命令启动代理:

sudo service nginx-agent start

要在 Alpine Linux 上启用代理在开机时自动启动,运行以下命令:

sudo rc-update add nginx-agent default

日志记录

NGINX Agent 使用格式化的日志文件来收集指标。扩展日志格式和实例数量也会增加 NGINX Agent 日志文件的大小。我们建议为 /var/log/nginx-agent 添加一个单独的分区。如果没有日志轮转或存储在单独的分区上,日志文件可能会占用所有可用磁盘空间,导致系统对某些服务无响应。

日志轮转

默认情况下,NGINX Agent 使用 logrotate 每天轮转日志,配置如下:

/var/log/nginx-agent/*.log
{
   # 每天轮转日志文件
   daily
   # 如果日志文件大小超过 5M,则进行轮转
   size 5M
   # 创建副本后截断原始日志文件
   copytruncate
   # 删除超过 10 天的轮转日志
   maxage 10
   # 日志文件轮转 10 次后被删除
   rotate 10
   # 压缩旧的日志文件
   compress
   # 如果日志文件丢失,将继续处理下一个文件,不发出错误消息
   missingok 
   # 如果日志为空,则不进行轮转
   notifempty
}

如果需要更改默认配置,可以在此处更新文件:/etc/logrotate.d/nginx-agent

有关 logrotate 配置的更多详细信息,请参阅 Logrotate 配置选项

构建 Docker 镜像

要构建包含最新 NGINX Agent、最新主线版本的 NGINX OSS 和最新 Alpine 的镜像,运行以下命令:

make official-oss-image

要构建包含最新 NGINX Agent、最新稳定版本的 NGINX OSS 和最新 Alpine 的镜像,运行以下命令:

make official-oss-stable-image

有关如何运行 NGINX Agent 容器以及如何构建使用 NGINX Plus 而不是 NGINX OSS 的镜像的更多信息,请参阅 Docker 镜像

NGINX Agent 入门

按照以下步骤配置和运行 NGINX Agent 以及一个模拟接口("控制平面"),NGINX Agent 将向其报告。

安装 NGINX

按照安装部分的步骤下载、安装和运行 NGINX。

克隆 NGINX Agent 仓库

使用您喜欢的方法,将 NGINX Agent 仓库克隆到您的开发目录中。如需额外帮助,请参阅 克隆 GitHub 仓库

安装 Go

NGINX Agent 和模拟控制平面是用 Go 编写的。需要 Go 1.22 或更高版本才能从源代码目录构建和运行任一应用程序。您可以从官方网站下载 Go

启动 gRPC 模拟控制平面

通过在 agent 源代码根目录运行以下命令来启动模拟控制平面:

go run sdk/examples/server.go

# 命令输出
INFO[0000] http listening at 54790 # 模拟控制平面端口
INFO[0000] gRPC listening at 54789 # NGINX Agent 将报告的 gRPC 控制平面端口

NGINX Agent 设置

如果 /etc/nginx-agent/ 目录不存在,请创建它,并从项目根目录将 nginx-agent.conf 文件复制到其中。

sudo mkdir /etc/nginx-agent
sudo cp <project_root_directory>/nginx-agent.conf /etc/nginx-agent/

/etc/nginx-agent/ 目录中创建 agent-dynamic.conf 文件,这是 NGINX Agent 运行所必需的。

sudo touch /var/lib/nginx-agent/agent-dynamic.conf

启用 gRPC 接口

将以下设置添加到 /etc/nginx-agent/nginx-agent.conf

server:
  host: 127.0.0.1 # 模拟控制平面主机
  grpcPort: 54789 # 模拟控制平面 gRPC 端口

# gRPC TLS 选项 - 不建议在生产环境中禁用 TLS
tls:
  enable: false
  skip_verify: true

有关更多信息,请参阅 Agent 协议定义和文档

启用 REST 接口

可以通过验证 /etc/nginx-agent/nginx-agent.conf 文件中是否存在以下行来公开 NGINX Agent REST 接口:

api:
  # 设置 API 地址以允许远程管理
  host: 127.0.0.1
  # 将此值设置为安全的端口号以防止信息泄露
  port: 8038
  
  # REST TLS 参数
  cert: "<TLS-CERTIFICATE>.crt"
  key: "<PRIVATE-KEY>.key"

模拟控制平面可以使用 gRPC 或 REST 协议与 NGINX Agent 通信。

启动 Swagger UI

Swagger UI 需要安装 goswagger。有关安装 goswagger 的其他帮助,请参阅 goswagger 安装说明

要启动 REST 接口的 Swagger UI,运行以下命令:

make launch-swagger-ui

打开 Web 浏览器,在 http://localhost:8082/docs 查看 Swagger UI。

扩展

扩展是一段代码,对 NGINX Agent 负责的主要功能不是至关重要的。这通常超出了管理 NGINX 配置和报告 NGINX 指标的范围。

要启用扩展,必须将其添加到 /etc/nginx-agent/nginx-agent.conf 中的扩展列表中。 以下是启用高级指标扩展的示例:

extensions:
  - advanced-metrics

启动 NGINX Agent

如果已经运行,重新启动 NGINX Agent 以应用新配置。或者,如果 NGINX Agent 未运行,您可以从源代码根目录运行它。

打开另一个终端窗口并启动 NGINX Agent。从 agent 源代码根目录发出以下命令。

sudo make run

# 命令输出片段
WARN[0000] Log level is info
INFO[0000] setting displayName to XXX
INFO[0000] NGINX Agent at with pid 12345, clientID=XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX name=XXX
INFO[0000] NginxBinary initializing
INFO[0000] Commander initializing
INFO[0000] Comms initializing
INFO[0000] OneTimeRegistration initializing
INFO[0000] Registering XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX
INFO[0000] Metrics initializing
INFO[0000] MetricsThrottle initializing
INFO[0000] DataPlaneStatus initializing
INFO[0000] MetricsThrottle waiting for report ready
INFO[0000] Metrics waiting for handshake to be completed
INFO[0000] ProcessWatcher initializing
INFO[0000] Extensions initializing
INFO[0000] FileWatcher initializing
INFO[0000] FileWatchThrottle initializing
INFO[0001] Events initializing
INFO[0001] OneTimeRegistration completed

打开 Web 浏览器,在 http://localhost:54790 查看模拟控制平面。Web 界面将显示以下链接:

  • registered - 显示数据平面的注册信息
  • nginxes - 列出数据平面上的 NGINX 实例
  • configs - 显示发送到管理平面的 NGINX 配置的 protobuf 负载
  • configs/chunked - 显示发送到管理平面的拆分负载
  • configs/raw - 显示实际配置,如同它存在于数据平面上
  • metrics - 显示发送到管理平面的指标缓冲区(类似于将在 REST API 中返回的内容)

有关更多 NGINX Agent 用例,请参考 https://github.com/nginx/agent/tree/main/sdk/examples

开发环境设置

选择操作系统

虽然大多数Linux或FreeBSD操作系统都可以用于为NGINX Agent项目做贡献,但以下步骤是为Ubuntu设计的。Ubuntu预装了构建和运行NGINX Agent所需的大多数库,是NGINX Agent开发的推荐平台。

安装NGINX

按照安装部分的步骤下载并安装NGINX。安装完成后,确保NGINX实例正在运行。

克隆NGINX Agent仓库

按照NGINX Agent入门部分的步骤克隆NGINX Agent仓库

安装先决条件包

根据操作系统发行版,可能需要安装以下包以构建NGINX Agent。

切换到NGINX Agent源目录:

cd <开发目录路径>/agent

安装Make:

sudo apt install make

NGINX Agent是用Go编写的。您可以下载Go并按照同一页面上的安装说明操作,或者运行:

sudo apt install golang-go

安装Protoc:

sudo apt install -y protobuf-compiler

安装NGINX Agent工具和依赖项:

在开始开发NGINX Agent之前,务必下载并安装NGINX Agent所需的必要工具和依赖项。您可以通过运行以下make命令来完成此操作:

make install-tools

从源代码构建NGINX Agent

运行以下命令来构建和运行NGINX Agent:

make build
sudo make run

NGINX Agent技术规格

支持的发行版

NGINX Agent可以在大多数环境中运行。有关支持的发行版列表,请参阅NGINX技术规格指南。

支持的部署环境

NGINX Agent可以部署在以下环境中:

  • 裸机
  • 容器
  • 公有云:AWS、Google Cloud Platform和Microsoft Azure
  • 虚拟机

支持的NGINX版本

NGINX Agent可与所有受支持的NGINX开源版本和NGINX Plus版本配合使用。

规模建议

NGINX Agent的最低系统规模建议:

CPU内存网络存储
1个CPU核心1 GB RAM1 GbE NIC20 GB

社区

贡献

通过贡献参与项目!请查看我们的贡献指南了解详情。

更新日志

查看我们的发布页面以跟踪更新。

许可证

Apache许可证,版本2.0

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号