Files
LokiStack/frontend/src/i18n/locales/zh/collectors.ts
T
opsx 87909ed403
CI / Backend (go vet + test) (push) Canceled after 0s
CI / Frontend (lint + build + test) (push) Canceled after 0s
docs(collectors): 采集策略弹框「命名空间」补分类型说明
用户困惑:这个字段到底是"只采集指定命名空间"还是"组件要部署的命名空间"?
查代码后确认——**同一个字段在三种采集类型下含义完全不同**:

  k8s-fluentbit-sidecar:
      = 目标应用 Deployment 所在的命名空间。
        平台会 Deployments(ns).Get(target) 然后 patch 注入 fluent-bit sidecar,
        同时把它作为日志的 namespace 标签。
        **不是**日志过滤条件。

  k8s-daemonset:
      = Promtail DaemonSet 部署到哪个命名空间。
        DaemonSet 挂载 /var/log/pods,采集**整个集群所有命名空间**的容器日志,
        不按命名空间做过滤。一般就填 Loki 所在的 log。

  host-promtail:不使用该字段。

原来这三种情况共用一句"命名空间",用户只能猜。
现在字段下方按类型显示对应说明(min-h-4 固定高度,不抖动)。

实测:三条提示文案均已进包(6fe430f59eef)。
2026-10-30 15:53:08 +00:00

193 lines
8.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// collectors 命名空间 — 「日志采集」页面域中文文案。
// 注册说明:i18n 入口(src/i18n/index.ts)由框架统一维护,页面域词典在被页面组件
// 与入口处 resources 静态注册的 common 命名空间共存。
const collectors = {
page: {
title: '日志采集',
description: '为主机与集群配置日志采集策略,日志将推送到关联的 Loki',
addAction: '添加采集策略',
},
empty: {
title: '暂无采集策略',
description: '新建一个日志采集器,关联已部署的 Loki',
},
// 采集器类型徽章(卡片描述行)
typeLabel: {
hostPromtail: '主机 Promtail',
k8sDaemonset: 'Promtail DaemonSet',
k8sFluentbitSidecar: 'Fluent Bit Sidecar',
},
// 卡片字段标签
field: {
loki: '关联 Loki',
cluster: '集群',
host: '主机',
namespace: '命名空间',
logPath: '日志路径',
target: '目标',
runMode: '运行方式',
unknown: '未知',
},
// 主机采集器托管方式(安装时自动探测:docker 优先、systemd 兜底)
runMode: {
docker: 'Docker 容器',
systemd: 'systemd 服务',
},
action: {
install: '部署',
uninstall: '卸载',
logs: '日志',
editAria: '编辑采集策略 {{name}}',
deleteAria: '删除采集器 {{name}}',
},
logs: {
title: '采集器日志 · {{name}}',
description: '采集器最近运行日志(主机:docker logs / journalctl;K8s:采集 Pod 日志)',
source: '来源:{{source}}',
tailLines: '{{count}} 行',
refresh: '刷新',
empty: '暂无日志输出(采集器可能刚启动,或暂时没有匹配的日志行)',
copy: '复制',
copied: '已复制',
close: '关闭',
failed: '读取采集器日志失败',
},
toast: {
loadOptionsFailed: '加载 Loki 部署/集群/主机数据失败',
installFailed: '部署采集器失败',
uninstallFailed: '卸载采集器失败',
deleteFailed: '删除采集器失败',
createFailed: '创建采集器失败',
saveFailed: '保存采集策略失败',
},
deleteConfirm: '确定要删除「{{name}}」吗?删除时将自动卸载采集端,此操作不可恢复。',
form: {
title: '添加采集策略',
name: '名称',
type: '采集器类型',
// 新建表单下拉里的类型选项(比卡片徽章多部署通道说明)
typeOption: {
hostPromtail: '主机 Promtail(SSH)',
k8sDaemonset: 'Kubernetes Promtail DaemonSet',
k8sFluentbitSidecar: 'Kubernetes Fluent Bit Sidecar',
},
lokiDeployment: '关联 Loki 部署',
lokiPlaceholder: '选择已部署的 Loki(推送目标)',
// 下拉项名称后的括号后缀(状态/IP),中英文括号形态不同
statusParen: '({{status}})',
hostParen: '({{ip}})',
host: '目标主机',
hostPlaceholder: '选择主机',
cluster: '目标集群',
clusterPlaceholder: '选择集群',
namespace: '命名空间',
namespaceHintSidecar: '填「目标应用(Deployment)所在的命名空间」。平台会在该命名空间里找到目标 Deployment 并注入 Fluent Bit sidecar,采集到的日志也会打上这个 namespace 标签。它不是日志过滤条件。',
namespaceHintDaemonset: '填「Promtail DaemonSet 部署到哪个命名空间」。DaemonSet 会采集整个集群所有命名空间的容器日志,不按命名空间过滤(一般就用 Loki 所在的 log)。',
namespaceHintHost: '主机模式不使用该字段。',
nsPickCluster: '先选择集群',
nsLoading: '加载命名空间…',
nsPick: '选择命名空间',
nsEmpty: '暂无可读取的命名空间',
nsLoadFailed: '读取命名空间失败',
pickFromCluster: '从集群选择',
manualInput: '手动填写',
targetDeployment: '目标 Deployment',
wlPickNamespace: '先选择命名空间',
wlLoading: '加载 Deployment…',
wlPick: '选择 Deployment',
wlEmpty: '此命名空间暂无 Deployment',
wlLoadFailed: '读取 Deployment 失败',
wlReady: '(就绪 {{ready}}/{{total}})',
logPath: '采集日志路径',
logPathHostHint: '支持 glob 通配(如 /var/log/*.log /var/log/syslog);多个路径用逗号分隔',
logPathSidecarHint:
'填业务写入的路径,如 /var/log/app/*.log;仅共享已有日志卷或专用 logs 目录。',
labels: '自定义标签(JSON,可选)',
labelsHint: '合法 JSON 时将附加到每条日志的标签,便于在日志平台中筛选;留空则不附加',
submit: '创建并部署',
submitting: '创建中...',
validation: {
nameRequired: '请输入采集器名称',
lokiRequired: '请选择关联的 Loki 部署',
hostRequired: '请选择目标主机',
clusterRequired: '请选择目标集群',
namespaceRequired: '请选择命名空间',
targetDeploymentRequired: '请填写目标 Deployment 名称',
},
},
edit: {
title: '编辑采集策略',
namespaces: '采集命名空间',
allNamespaces: '全集群所有命名空间',
selectedCount: '已选 {{count}} 个',
allCheckbox: '所有命名空间(全集群采集)',
nsSearch: '搜索命名空间…',
loading: '加载中…',
nsListEmpty: '未能获取命名空间列表(可手动输入)',
nsNoMatch: '无匹配',
nsLoadFailed: '加载命名空间失败',
// nsHint/appSourceHint/appIncludeHint 含行内 <code>,渲染处用 Trans 组件
nsHint:
'勾选「所有命名空间」即采集全集群;未勾选时仅采集所选命名空间。',
appLabelSource: 'app 标签取值来源',
appSourcePlaceholder: '留空 = 默认(controller 名回退链)',
appSourceHint:
'默认按 <code>app.kubernetes.io/name → app → controller 名 → pod 名</code> 回退;集群自定义标签(如 <code>k8s.kuboard.cn/name</code>)填此处优先。',
appSourcePreset: {
default: '默认:app.kubernetes.io/name → app → controller 名 → pod 名',
controllerName: 'controller_name(Pod 的 ReplicaSet 名,去 hash = Deployment 名)',
k8sAppName: 'app.kubernetes.io/name(Kubernetes 标准标签)',
app: 'app(常见简写)',
kuboard: 'k8s.kuboard.cn/name(Kuboard 注入)',
},
appInclude: '只采集这些 app(可选)',
appIncludePlaceholder: '留空 = 不限;多个用逗号分隔,如 cex-spot-api, cex-asset-api',
appIncludeHint:
'只保留 app 命中这些值的日志(<code>action: keep</code>),是控制日志量最直接的手段。',
logPathHint: 'Sidecar 需共享日志卷或专用 logs 目录;保存后点击「部署」生效。',
// ── 主机模式:结构化采集项(B 档) ──
jobs: {
title: '日志采集项',
hint: '每个采集项对应一个 promtail job;每个目录填写一个路径。保存后点击「部署」下发。',
add: '添加采集项',
remove: '删除采集项',
namePlaceholder: 'job 名称,如 app-api',
paths: '日志路径(逗号分隔,支持 glob)',
systemPathsPlaceholder: '留空 = 自动使用该主机实际存在的系统日志',
systemBadge: '系统日志 · 自动时间戳',
labels: '附加标签(key=value,逗号分隔)',
advanced: '高级:多行合并 / JSON / 时间戳 / 丢弃 / 限流',
system: '系统日志(自动选 ISO8601/传统格式)',
json: 'JSON 解析',
multiline: '多行合并(Java 堆栈)',
timestamp: '自定义时间戳',
maxLinesPlaceholder: '最大行数 128',
tsSourcePlaceholder: '字段名,如 time',
tsLocationPlaceholder: '时区,如 Asia/Shanghai',
dropIfMatch: '命中即丢弃(正则,逗号分隔)',
dropIfMatchPlaceholder: '留空不丢;如 "status":200',
ratePlaceholder: '限流 rate(默认 2000)',
burstPlaceholder: '限流 burst(默认 4000)',
hostInfo: '上次安装探测:主机名 {{host}},系统日志格式 {{format}}',
},
preview: {
button: '预览 YAML',
loading: '渲染中…',
failed: '预览失败',
title: '将要下发的 promtail.yaml',
description: '仅预览,不保存且不下发;确认无误后点击「保存」→「部署」。',
copy: '复制',
copied: '已复制',
close: '关闭',
},
save: '保存',
saving: '保存中…',
validation: {
nameRequired: '请输入采集策略名称',
},
},
}
export default collectors