Nezha v2.3.18 配置参数详解
哪吒监控 dashboard config.yaml 与 agent config.yml 逐字段详解,含环境变量覆盖、改值重启实测对比与告警规则参数说明
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 | "" | 站点名称,浏览器标题与面板左上角显示 |
language | zh_CN | 界面语言(zh_CN / en_US) |
location | Asia/Shanghai | 时区,影响面板时间显示与周期流量统计边界 |
listen_port | 8008 | HTTP 面板与 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_timeout | 1 | 登录令牌有效期(小时) |
force_auth | false | 强制认证(开启后未登录无法访问任何页面) |
allow_jwt_ip_change | false | 登录后 IP 变化是否仍保持会话(默认踢下线) |
2.3 Agent 接入项
| 字段 | 默认值 | 说明 |
|---|---|---|
tls | false | agent 接入是否走 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_notification | false | 服务器 IP 变化时发送提醒 |
ip_change_notification_group_id | 0 | IP 变更提醒发往的通知组 ID |
cover | 1 | 提醒覆盖范围:0 提醒所有未被排除的服务器;1 仅提醒被包含的服务器 |
ignored_ip_notification | 未写入 | 指定参与 IP 提醒筛选的服务器 IP 列表(逗号分隔) |
enable_plain_ip_in_notification | false | 通知中 IP 是否不打码(默认脱敏显示) |
2.5 外观与高级项
| 字段 | 默认值 | 说明 |
|---|---|---|
admin_template / user_template | admin-dist / user-dist | 管理端/用户端前端模板目录 |
custom_code / custom_code_dashboard | 未写入 | 注入自定义 HTML(统计脚本等),后者仅管理端 |
avg_ping_count | 2 | ping 延迟平均采样的合并粒度 |
debug | false | 调试日志开关 |
dns_servers | 未写入 | 自定义 DNS 解析服务器 |
2.6 https / tsdb / memory 三个子配置(实测均为空 {})
| 子配置 | 字段 | 说明 |
|---|---|---|
https | listen_port / tls_cert_path / tls_key_path / insecure_tls | 面板直接挂证书开 HTTPS 时填写;一般建议交给反代 |
tsdb | data_path / retention_days / min_free_disk_space_gb / max_memory_mb 等 | 内置时序库,存放历史指标。实测不配置时启动日志输出 TSDB is disabled (tsdb.data_path not configured),即默认不启用,无历史曲线 |
memory | go_mem_limit_mb | dashboard 进程 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或域名:端口 |
tls | false | 与 dashboard 侧 tls 对应,走 HTTPS 反代时改 true |
client_secret | 安装时传入 | 接入密钥,必须与 dashboard agent_secret_key 一致 |
uuid | 自动生成 | agent 身份标识;保持不变则重装/迁移后 dashboard 中仍是同一台机器 |
report_delay | 3 | 指标上报间隔(秒)。调小更实时但增加开销,一般无需改动 |
ip_report_period | 1800 | IP 归属地信息刷新间隔(秒),默认 30 分钟 |
debug | false | 调试日志开关(实测验证见下文) |
disable_auto_update | false | 是否关闭自动更新。agent 默认会自检新版本并升级 |
disable_force_update | false | 是否拒绝 dashboard 下发的强制更新 |
disable_command_execute | false | 安全开关:关闭后 dashboard 侧无法在该机执行命令(Web 终端/计划任务/告警触发任务全部失效),暴露面大的机器建议开启 |
disable_nat | false | 是否禁用 NAT 端口穿透功能 |
disable_send_query | false | 是否禁用面板下发的网络测试查询 |
gpu / temperature | false | 是否采集 GPU / 温度信息 |
skip_connection_count / skip_procs_count | false | 是否跳过连接数 / 进程数采集 |
insecure_tls | false | 跳过 TLS 证书校验(自签场景) |
use_gitee_to_upgrade / use_atomgit_to_upgrade | false | 自动更新走 Gitee / AtomGit 镜像(GitHub 不畅的机器适用) |
use_ipv6_country_code | false | IP 归属地判断使用 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_mode | 0 持续触发(失败期间每个采样周期都执行任务);1 仅新故障触发一次 |
fail_trigger_tasks | 触发告警时在触发该告警的机器上执行的计划任务 ID 列表 |
recover_trigger_tasks | 恢复时执行的任务 ID 列表 |
notification_group_id | 通知组 ID |
cover + ignore | 0 监控全部服务器(ignore 列出排除的);1 仅监控 ignore 列表中的服务器 |
rules[].type 实测可用枚举(v2.3.18 源码核对 + 实测验证 cpu/memory/transfer_out 三类):
| 类型 | 含义 | 单位 |
|---|---|---|
cpu | CPU 使用率 | % |
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_max | GPU 使用率 | % |
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(可据此排查"告警没发出来")。
七、常见配置误区
- 改错文件:OAuth2、告警、通知都在后台界面配(存数据库),config.yaml 只管服务本体;
- 改完不重启:config.yaml 与 agent config.yml 都要重启对应服务才生效;
- 端口映射不同步:改
listen_port后,Docker 端口映射、防火墙、反代 upstream 都要跟着改(见 §5.1 实测); - 阈值方向理解反了:
min/max是"越界即告警",想让 CPU 低于某值才告警(如流量异常归零检测)应把min设为目标下限; - 密钥落盘:
jwt_secret_key官方建议用NZ_JWTSECRETKEY环境变量注入,避免明文留盘(实测启动日志即有此提示)。
八、参考链接
- Dashboard 配置结构(config.yaml 字段定义):https://github.com/nezhahq/nezha
- Agent 配置与发版(config.yml 字段核对):https://github.com/nezhahq/agent
- 站内延伸:《Nezha 运维手册》——日常巡检、agent 迁移、告警实战、日志排障与升级备份。