跳到主要内容

站点与用户变量

全站设置,以及模板和集成可以引用的加密变量。

这页办完你会得到:一条存在库里、界面上看不到明文的凭证,以及一条从通知媒介引用它的路径; 外加一份「站点设置里每个字段管什么」的对照。

两件事都在 系统配置 下面,但用途完全不同:变量设置存的是值(多半是凭证), 站点设置调的是这套系统长什么样、怎么记日志。

1. 新建一个变量​

系统配置 → 变量设置(/system/variable-settings),右上角 创 建。

变量设置变量设置
字段说明
变量名必填,全局唯一。命名规则见下文
是否加密开关。打开之后「变量值」变成密码输入框
变量值必填
备注建议写清楚「谁在用、从哪儿申请的」——之后没人能再看到值本身

预期结果:列表里多一行,列为变量名、变量值、备注、操作。加密过的那行, 变量值列显示 ******,不是省略,是真的取不回来了。

2. 在通知媒介里引用它​

引用写法是 Go 模板的顶层字段,变量名前面加一个点:

{{.my_token}}

能用这个写法的地方有三处,别的地方不生效:

位置具体字段
通知媒介 的 HTTP 配置请求地址、请求头、查询参数、请求体
SMTP 配置邮件媒介的服务器配置
单点登录 的六份配置正文LDAP、CAS、OIDC、OAuth2、钉钉、飞书

数据源和大模型配置不在其中。 它们的密码字段是各自表里的独立字段, 不走变量替换,只能在各自的编辑页里改。

改完变量不用重启:后端每 9 秒对一次变量的条数和更新时间,变了就重新拉一份解密快照。 拆开部署时(独立的 n9e-alert、n9e-edge)这些进程不自己解密, 而是回中心调 /v1/n9e/user-variable/decrypt,所以中心那边要开 [HTTP.APIForService] Enable = true。

3. 加密变量能做到什么,做不到什么​

勾上「是否加密」之后,值在浏览器里就用 RSA 公钥加密好才发出去, 库里存的是密文。这对密钥是 center 启动时自动生成并存进库的, 和 [HTTP.RSA] OpenRSA 那个开关没有关系——后者管的是登录密码要不要加密传输, 关着也不影响加密变量。

它挡住的是:

  • 顺手看见:列表里是 ******;编辑已有变量时值输入框是禁用的, 要换值得点 重置密码 重新填一遍;
  • 落进日志:渲染进请求头、查询参数、请求体的变量值, 在访问日志和通知记录里都会被替换成 ***,不是靠字符串匹配,是拿掩码上下文重渲染一遍。

它挡不住的是能读数据库的人:私钥和它的口令跟密文存在同一张 configs 表里。 这层加密解决的是「运维界面上的凭证可见性」,不是「数据库泄露」。 真正的边界在数据库访问控制上。

权限上,这四个接口由 /system/variable-settings 权限点把守,不是 Admin 专属—— 这是系统配置里唯一的例外(见角色与权限矩阵)。但改和删还要再过一道: 你得是 Admin,或者是这条变量的创建人,否则返回 403。

4. 命名规则与保留字​

变量名必须匹配 ^[a-zA-Z_][a-zA-Z0-9_]*$——字母或下划线开头,后面只能是字母、数字、下划线。 重名会被直接拒绝。

另外两组名字是保留字,用了会在保存时报错:

保留字为什么
Scheme、Host、Hostname、Port、Path、Query、FragmentURL 解析用的字段名
tpl、event、events、params、sendto、sendtos通知模板上下文里的内置顶层 key。同名变量在渲染时会被内置值盖掉,静默失效

5. 名字写错了会怎样​

不会报错。Go 模板对不存在的 key 一律渲染成空串,加上日志里那一段本来就被打成 ***, 最终现象只剩「对端返回认证失败」,看不出是变量名拼错了。

后端会打一条 Warning 兜底,同一处只打一次:

notify http config "xxx" references undefined variable "my_tokne",
it renders as empty; check 变量配置 (system variable settings)

排查这类问题时,去 center 或 alert 进程的日志里搜 references undefined variable。

6. 站点设置里的字段​

系统配置 → 站点设置(/system/site-settings)。开源版里是这十个:

字段管什么
站点地址外部访问夜莺的地址,后端用它拼分享链接、通知里的跳转链接
默认访问地址访问根路径 / 时跳到哪儿,默认 /landing
业务组展示模式树形 / 列表
业务组分隔符树形模式下按它切分组名,默认 -
团队展示模式树形 / 列表,默认列表
团队分隔符同上,默认 -
即时查询的时序图图例管理即时查询图例里显示哪几个统计值,默认 Last
开启 Access Log打不打访问日志,默认关
打印请求 Body 路径见下面这条
字体界面字体

保存要求 Admin,保存后页面会自己刷新一次。

「打印请求 Body 路径」要克制着用。 列进来的每个路径,请求体会被整个写进访问日志。 它是排查表单提交的利器,也是把明文凭证写进磁盘的最快方式—— 登录、数据源、变量设置这类路径不要列。排查完记得删掉,别留在生产上。

下一步​