Nezha v2.3.18 配置参数详解

哪吒监控 dashboard config.yaml 与 agent config.yml 逐字段详解,含环境变量覆盖、改值重启实测对比与告警规则参数说明

NezhaNezha2026/10/18

Nezha v2.3.18 配置参数详解

目标:逐字段讲清 dashboard config.yaml 与 agent config.yml 的参数含义与生效方式,字段说明基于 dashboard v2.3.18 实测配置文件与同版本源码结构定义核对,agent 部分为 v2.3.5 实测。所有"改值重启实测"均为真实执行结果,不是转抄文档。部署步骤见《Nezha 安装部署指南》。

一、配置文件清单与生效方式

Nezha 的配置分三处载体,改哪个、怎么生效是初学者最常踩的坑:

载体位置管什么生效方式
dashboard 主配置data/config.yaml站点、端口、密钥、模板、TSDB 等修改后重启 dashboard 服务
agent 主配置/opt/nezha/agent/config.yml接入地址、上报行为、功能开关修改后 systemctl restart nezha-agent
面板后台设置数据库(管理界面"设置"页)OAuth2、通知渠道、告警规则、自定义代码等保存即生效,不在 config.yaml 里

实测确认:全新启动的 dashboard 会把最小配置自动补全为完整配置(实测 1422 字节),未填写的密钥字段自动生成。

二、Dashboard config.yaml 字段详解

以下为 v2.3.18 实测文件全文(密钥字段已脱敏):

admin_template: admin-dist
agent_secret_key: <自动生成,此处省略>
avg_ping_count: 2
cover: 1
https: {}
ip_change_notification_group_id: 0
jwt_secret_key: <自动生成,此处省略>
jwt_secret_key_last_rotated_version: 2.3.18
jwt_timeout: 1
language: zh_CN
listen_port: 8008
location: Asia/Shanghai
memory: {}
site_name: Nezha Test Site
tsdb: {}
user_template: user-dist

逐字段说明(实测 + 源码核对):

2.1 站点基础项

字段默认值说明
site_name""站点名称,浏览器标题与面板左上角显示
languagezh_CN界面语言(zh_CN / en_US)
locationAsia/Shanghai时区,影响面板时间显示与周期流量统计边界
listen_port8008HTTP 面板与 agent gRPC 共用监听端口
listen_host未写入监听地址,默认 0.0.0.0;需要仅内网监听时可设为具体 IP

2.2 密钥与认证项

字段默认值说明
agent_secret_key自动生成agent 接入密钥,安装 agent 时通过 NZ_CLIENT_SECRET 传入
jwt_secret_key自动生成登录令牌签名密钥。实测启动日志提示:建议通过环境变量 NZ_JWTSECRETKEY 注入而非落盘
jwt_secret_key_last_rotated_version当前版本密钥轮换记录,用于升级时判断是否需要重新生成
jwt_timeout1登录令牌有效期(小时)
force_authfalse强制认证(开启后未登录无法访问任何页面)
allow_jwt_ip_changefalse登录后 IP 变化是否仍保持会话(默认踢下线)

2.3 Agent 接入项

字段默认值说明
tlsfalseagent 接入是否走 TLS(面板经 HTTPS 反代暴露时置 true,与 NZ_TLS 对应)
dashboard_host未写入agent 安装命令展示的接入域名
install_host""一键安装命令中展示的主机地址(仅展示用途)
agent_real_ip_header未写入反代场景下 agent 真实 IP 的请求头
web_real_ip_header未写入反代场景下浏览器真实 IP 的请求头

2.4 IP 变更提醒项

字段默认值说明
enable_ip_change_notificationfalse服务器 IP 变化时发送提醒
ip_change_notification_group_id0IP 变更提醒发往的通知组 ID
cover1提醒覆盖范围:0 提醒所有未被排除的服务器;1 仅提醒被包含的服务器
ignored_ip_notification未写入指定参与 IP 提醒筛选的服务器 IP 列表(逗号分隔)
enable_plain_ip_in_notificationfalse通知中 IP 是否不打码(默认脱敏显示)

2.5 外观与高级项

字段默认值说明
admin_template / user_templateadmin-dist / user-dist管理端/用户端前端模板目录
custom_code / custom_code_dashboard未写入注入自定义 HTML(统计脚本等),后者仅管理端
avg_ping_count2ping 延迟平均采样的合并粒度
debugfalse调试日志开关
dns_servers未写入自定义 DNS 解析服务器

2.6 https / tsdb / memory 三个子配置(实测均为空 {})

子配置字段说明
httpslisten_port / tls_cert_path / tls_key_path / insecure_tls面板直接挂证书开 HTTPS 时填写;一般建议交给反代
tsdbdata_path / retention_days / min_free_disk_space_gb / max_memory_mb 等内置时序库,存放历史指标。实测不配置时启动日志输出 TSDB is disabled (tsdb.data_path not configured),即默认不启用,无历史曲线
memorygo_mem_limit_mbdashboard 进程 Go 运行时内存上限,0 不限制

三、环境变量覆盖(NZ_ 前缀)

dashboard 读取配置时会先加载 NZ_ 前缀的环境变量,优先级高于 config.yaml(源码 koanf env provider,实测日志佐证):

NEZHA>> jwt_secret_key loaded from config.yaml; recommend injecting via env NZ_JWTSECRETKEY to keep it off disk

常用形式:NZ_LISTENPORT、NZ_SITENAME、NZ_JWTSECRETKEY、NZ_AGENTSECRETKEY。Docker 编排部署时用 environment: 段注入即可把敏感密钥移出配置文件。

四、Agent config.yml 字段详解

路径 /opt/nezha/agent/config.yml(安装脚本自动生成,见《Nezha 安装部署指南》§4.5 全文),关键字段:

字段默认值说明
server安装时传入dashboard 地址 IP或域名:端口
tlsfalse与 dashboard 侧 tls 对应,走 HTTPS 反代时改 true
client_secret安装时传入接入密钥,必须与 dashboard agent_secret_key 一致
uuid自动生成agent 身份标识;保持不变则重装/迁移后 dashboard 中仍是同一台机器
report_delay3指标上报间隔(秒)。调小更实时但增加开销,一般无需改动
ip_report_period1800IP 归属地信息刷新间隔(秒),默认 30 分钟
debugfalse调试日志开关(实测验证见下文)
disable_auto_updatefalse是否关闭自动更新。agent 默认会自检新版本并升级
disable_force_updatefalse是否拒绝 dashboard 下发的强制更新
disable_command_executefalse安全开关:关闭后 dashboard 侧无法在该机执行命令(Web 终端/计划任务/告警触发任务全部失效),暴露面大的机器建议开启
disable_natfalse是否禁用 NAT 端口穿透功能
disable_send_queryfalse是否禁用面板下发的网络测试查询
gpu / temperaturefalse是否采集 GPU / 温度信息
skip_connection_count / skip_procs_countfalse是否跳过连接数 / 进程数采集
insecure_tlsfalse跳过 TLS 证书校验(自签场景)
use_gitee_to_upgrade / use_atomgit_to_upgradefalse自动更新走 Gitee / AtomGit 镜像(GitHub 不畅的机器适用)
use_ipv6_country_codefalseIP 归属地判断使用 IPv6

五、改值重启实测对比

5.1 Dashboard listen_port:8008 → 8009

$ sed -i 's/^listen_port: 8008/listen_port: 8009/' data/config.yaml
$ docker compose restart dashboard
$ docker logs nezha-dashboard-compose | tail -3
NEZHA>> jwt_secret_key loaded from config.yaml; recommend injecting via env NZ_JWTSECRETKEY to keep it off disk
NEZHA>> TSDB is disabled (tsdb.data_path not configured)
Dashboard::START ON :8009          # ← 端口已生效(改前为 Listening for http on 0.0.0.0:8008)

$ curl -s -o /dev/null -w '%{http_code}' http://localhost:13930/   # 宿主映射仍指向 8008
000                                                                # ← 连接失败,面板已不在 8008

改回 8008 重启后恢复 200。结论:listen_port 即改即生效,但注意端口映射与防火墙需同步调整。

5.2 Dashboard site_name:空 → Nezha Compose Demo

修改保存重启后,通过管理 API 验证(实测输出):

$ curl -s http://localhost:13930/api/v1/setting -H "Authorization: Bearer $TOKEN"
{"success":true,"data":{"version":"2.3.18","site_name":"Nezha Compose Demo",...}}

5.3 Agent debug:false → true

$ sed -i 's/^debug: false/debug: true/' /opt/nezha/agent/config.yml
$ systemctl restart nezha-agent
$ journalctl -u nezha-agent --no-pager -n 5
... Started 哪吒监控 Agent.
... NEZHA@2026-10-18 04:17:52>> 检查更新: 2.3.5
... NEZHA@2026-10-18 04:17:52>> 更新失败: GET https://api.github.com/repos/nezhahq/agent/releases: 403 API rate limit exceeded ... [rate reset in 2m17s]
... NEZHA@2026-10-18 04:17:52>> Connection to 172.30.0.2:8008 established
... NEZHA@2026-10-18 04:17:52>> 正在更新本地缓存IP信息

结论: ① debug: true 后日志输出信息级明细(更新检查、连接建立、IP 缓存刷新);② 顺带实测确认 agent 自动更新机制会请求 api.github.com/repos/nezhahq/agent(agent 独立仓库发版),GitHub 接口限流时更新检查会失败但不影响上报。改回 false 重启后日志恢复安静。

六、告警规则与通知配置参数

这两类不在 config.yaml,通过面板后台或 REST API 维护(存数据库)。实测整理的字段如下。

6.1 告警规则(Alert Rule)

{
  "name": "CPU使用率超过50%",
  "rules":  [ {"type": "cpu", "duration": 3, "min": 0, "max": 50} ],
  "notification_group_id": 1,
  "fail_trigger_tasks":    [1],
  "recover_trigger_tasks": [],
  "enable": true,
  "trigger_mode": 0
}
字段说明
rules[]指标条件数组,多条之间为与关系(全部满足才算失败)
rules[].type指标类型,见下表
rules[].duration持续采样点数。dashboard 每 3 秒采样一次,duration: 3 ≈ 9 秒窗口内 70% 以上失败才判定
rules[].min / rules[].max阈值区间。实测判定方向:值 < min 或 值 > max 即为失败(越界告警,不是区间内告警)
trigger_mode0 持续触发(失败期间每个采样周期都执行任务);1 仅新故障触发一次
fail_trigger_tasks触发告警时在触发该告警的机器上执行的计划任务 ID 列表
recover_trigger_tasks恢复时执行的任务 ID 列表
notification_group_id通知组 ID
cover + ignore0 监控全部服务器(ignore 列出排除的);1 仅监控 ignore 列表中的服务器

rules[].type 实测可用枚举(v2.3.18 源码核对 + 实测验证 cpu/memory/transfer_out 三类):

类型含义单位
cpuCPU 使用率%
memory / swap内存 / 交换分区使用率%
disk磁盘使用率%
net_in_speed / net_out_speed / net_all_speed实时网速字节/秒
transfer_in / transfer_out / transfer_all累计流量(开机以来)字节
transfer_in_cycle / transfer_out_cycle / transfer_all_cycle周期流量(需配 cycle_interval 月度统计)字节
load1 / load5 / load15负载-
tcp_conn_count / udp_conn_count连接数个
process_count进程数个
temperature_max最高温度℃
offline离线告警(无需阈值)-
gpu / gpu_maxGPU 使用率%

6.2 通知组与通知方式

  • 通知组(Notification Group):告警规则的 notification_group_id 指向通知组,一个组可挂多个通知方式;
  • 通知方式(Notification):支持 Webhook、Telegram、钉钉、飞书、邮件等,请求体支持占位符:#NEZHA#(通知内容)、#SERVER.NAME#(服务器名)、#DATETIME#(时间)等;
  • 实测重要发现(安全限制):v2.3.18 对 Webhook 通知 URL 做 SSRF 防护,禁止指向私网/回环地址(实测 http://127.0.0.1:9999/hook 保存时被拒绝,提示 is not allowed,对应官方安全公告 GHSA-6x26-5727-rrm9 修复)。对接内网告警系统需走公网可达中转端点,或使用平台内置通知渠道类型;
  • 实测行为细节:通知组内没有任何通知方式时,每次告警投递会在 dashboard 日志记录 Notification group 1 has no recipients(可据此排查"告警没发出来")。

七、常见配置误区

  1. 改错文件:OAuth2、告警、通知都在后台界面配(存数据库),config.yaml 只管服务本体;
  2. 改完不重启:config.yaml 与 agent config.yml 都要重启对应服务才生效;
  3. 端口映射不同步:改 listen_port 后,Docker 端口映射、防火墙、反代 upstream 都要跟着改(见 §5.1 实测);
  4. 阈值方向理解反了:min/max 是"越界即告警",想让 CPU 低于某值才告警(如流量异常归零检测)应把 min 设为目标下限;
  5. 密钥落盘:jwt_secret_key 官方建议用 NZ_JWTSECRETKEY 环境变量注入,避免明文留盘(实测启动日志即有此提示)。

八、参考链接

  1. Dashboard 配置结构(config.yaml 字段定义):https://github.com/nezhahq/nezha
  2. Agent 配置与发版(config.yml 字段核对):https://github.com/nezhahq/agent
  3. 站内延伸:《Nezha 运维手册》——日常巡检、agent 迁移、告警实战、日志排障与升级备份。