← 返回文章列表
使用指南 4 分钟阅读 炬鲸团队

5 分钟接入日志采集:DaemonSet 部署与解析规则配置

一份日志采集接入教程:在 Kubernetes 用 DaemonSet 部署采集 Agent,配置采集源、多行合并与 JSON 字段抽取,并在控制台验证日志入库,附常见报错排查。

为什么用 DaemonSet 部署

容器日志默认写到标准输出,由容器运行时收集。但生产环境里大量日志写在文件里——Java 应用的 application.log、Nginx 的 access.log、业务自己切的滚动日志。要采这些文件日志,最稳的做法是在每个节点上跑一个采集 Agent,用 DaemonSet 部署,让 Agent 以 hostPath 挂载的方式读到宿主机上的日志目录。这样每个节点一份 Agent,日志就近采集,不经过网络中转,采集端没有单点。

第一步:部署采集 Agent

炬鲸的采集 Agent 支持 DaemonSet 一键部署。先在控制台「接入管理 → 数据接入」生成接入 Token,再把下面的 YAML 改好占位符后 apply:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: jujing-agent
spec:
  selector:
    matchLabels: { app: jujing-agent }
  template:
    metadata:
      labels: { app: jujing-agent }
    spec:
      containers:
      - name: agent
        image: registry.jjhub.cn/jujing/agent:latest
        env:
        - name: JJHUB_TOKEN
          value: "<your-token>"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
          readOnly: true
        - name: varlib
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: varlog
        hostPath: { path: /var/log }
      - name: varlib
        hostPath: { path: /var/lib/docker/containers }

/var/log 挂载用于采集宿主机上的日志文件,/var/lib/docker/containers 用于关联容器标准输出。readOnly: true 是必须的:Agent 只读日志,不给它写权限是安全底线。

第二步:配置采集源与解析规则

Agent 部署后,采集源和解析规则都在控制台配置,不用改 YAML。以采 Nginx 日志为例,配置一个采集源指向 /var/log/nginx/access.log,再配解析规则:

  • 多行合并:Java 异常堆栈、Python traceback 是多行,配置 multiline 模式,用正则匹配起始行(如 ^\d{4}-\d{2}-\d{2} 日期开头),把后续行归入同一条日志
  • JSON 抽取:日志本身是 JSON 时选 JSON 解析,字段自动拆成可检索的键值对,无需手写正则
  • 字段抽取:对非结构化日志用 grok/正则把关键字段抽出来,比如从 access.log 里抽出 status、latency、uri,之后就能按字段过滤和聚合

解析规则是事后可改的:改规则只影响新入库的日志,历史日志保持原样,不用重采。

第三步:验证入库

配置完成后,到「日志检索」页按 service 或 host.name 过滤,看最近几分钟有没有新日志进来。如果查不到,按这个顺序排查:先看 Agent 是否 Running(kubectl get pods -l app=jujing-agent),再看 Agent 日志有没有 Token 报错(401/403 就是 Token 不对),最后确认采集路径在容器内确实存在(进容器 ls /var/log/nginx/)。确认收到后,给日志配上保留周期和冷热分层,日常排查的体验就完整了。