采集Systemd Journal日志

Logtail支持从原始的二进制文件中采集Linux系统的Systemd Journal日志。本文介绍如何通过日志服务控制台创建Logtail采集配置采集Systemd Journal日志。

前提条件

已在服务器上安装Linux Logtail 0.16.18及以上版本。具体操作,请参见安装Logtail(Linux系统)

简介

Systemd是专用于Linux操作系统的系统与服务管理器。当作为启动进程(PID=1)运行时,它将作为初始化系统运行,启动并维护各种用户空间的服务。Systemd统一管理所有Unit的日志(包括内核和应用日志),配置文件一般为/etc/systemd/journald.conf

说明

运行的操作系统需支持Journal日志格式。

功能

  • 支持设置初始采集位置,后续采集会自动保存checkpoint,应用重启时不影响进程。

  • 支持过滤指定的Unit。

  • 支持采集内核日志。

  • 支持自动解析日志等级。

  • 支持以容器方式采集宿主机上的Journal日志,适用于Docker、Kubernetes场景。

应用场景

  • 监听内核事件,出现异常时自动告警。

  • 采集所有系统日志,用于长期存储,减少磁盘空间占用。

  • 采集软件(Unit)的输出日志,用于分析或告警。

  • 采集所有Journal日志,可以从所有日志中快速检索关键词或日志,相比Journalctl的查询效率大幅提升。

操作步骤

  1. 登录日志服务控制台

  2. 接入数据区域,选择自定义数据插件

  3. 选择目标Project和Logstore,单击下一步
  4. 机器组配置页面,配置机器组。

    1. 根据实际需求,选择使用场景和安装环境。

      重要

      无论是否已有机器组,都必须根据实际需求正确选择使用场景和安装环境,这将影响后续的页面配置。

    2. 确认目标机器组已在应用机器组区域,单击下一步

      已有机器组

      源机器组列表选择目标机器组。

      image

      没有可用机器组

      单击创建机器组,在创建机器组面板设置相关参数。机器组标识分为IP地址用户自定义标识,更多信息请参见创建用户自定义标识机器组(推荐)创建IP地址机器组

      重要

      创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

  5. 数据源设置页签中,设置配置名称插件配置,然后单击下一步

    • inputs为数据源配置,必选项。

      重要

      一个inputs中只允许配置一个类型的数据源。

    • processors为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。

      如果当前的inputs配置无法满足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见使用Logtail插件处理数据

    {
      "inputs": [
        {
          "detail": {
            "JournalPaths": [
              "/var/log/journal"
            ],
            "Kernel": true,
            "ParsePriority": true,
            "ParseSyslogFacility": true
          },
          "type": "service_journal"
        }
      ]
    }

    配置项

    类型

    是否必选

    说明

    type

    string

    数据源类型,固定为service_journal

    JournalPaths

    string数组

    Journal日志路径,建议配置为Journal日志所在目录,例如/var/log/journal

    SeekPosition

    string

    首次采集方式,可以配置为headtail。默认为tail

    • head表示采集所有数据。

    • tail表示只采集Logtail采集配置被应用后的新数据。

    Kernel

    boolean

    是否采集内核日志,默认为true,表示采集内核日志。

    Units

    string数组

    指定采集的Unit列表,默认为空,表示全部采集。

    ParseSyslogFacility

    boolean

    是否解析syslog日志的facility字段,默认为false。不配置时,表示不解析。

    ParsePriority

    boolean

    是否解析Priority字段,默认为false。不配置时,表示不解析。

    设置为true时,Priority字段的映射关系如下所示。

      "0": "emergency"
      "1": "alert"
      "2": "critical"
      "3": "error"
      "4": "warning"
      "5": "notice"
      "6": "informational"
      "7": "debug"

    UseJournalEventTime

    boolean

    是否使用Journal日志中的字段作为日志时间,默认为false。不配置时,表示使用采集时间作为日志时间。

    实时日志采集一般相差3秒以内。

  6. 创建索引预览数据,然后单击下一步。日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果需要查询日志中的所有字段,建议使用全文索引。如果只需查询部分字段、建议使用字段索引,减少索引流量。如果需要对字段进行分析(SELECT语句),必须创建字段索引。

  7. 单击查询日志,系统将跳转至Logstore查询分析页面。

    您需要等待1分钟左右,待索引生效后,才能在原始日志页签中,查看已采集到的日志。查询和分析日志的详细步骤,请参见查询和分析日志

示例

  • 示例1

    从默认的/var/log/journal目录采集Journal日志,采集配置为:

    {
      "inputs": [
        {
          "detail": {
            "JournalPaths": [
              "/var/log/journal"
            ]
          },
          "type": "service_journal"
        }
      ]
    }

    日志样例:

    MESSAGE:  rejected connection from "192.168.0.250:43936" (error "EOF", ServerName "")
    PACKAGE:  embed
    PRIORITY:  6
    SYSLOG_IDENTIFIER:  etcd
    _BOOT_ID:  fe919cd1268f4721bd87b5c18afe59c3
    _CAP_EFFECTIVE:  0
    _CMDLINE:  /usr/bin/etcd --election-timeout=3000 --heartbeat-interval=500 --snapshot-count=50000 --data-dir=data.etcd --name 192.168.0.251-name-3 --client-cert-auth --trusted-ca-file=/var/lib/etcd/cert/ca.pem --cert-file=/var/lib/etcd/cert/etcd-server.pem --key-file=/var/lib/etcd/cert/etcd-server-key.pem --peer-client-cert-auth --peer-trusted-ca-file=/var/lib/etcd/cert/peer-ca.pem --peer-cert-file=/var/lib/etcd/cert/192.168.0.251-name-3.pem --peer-key-file=/var/lib/etcd/cert/192.168.0.251-name-3-key.pem --initial-advertise-peer-urls https://192.168.0.251:2380 --listen-peer-urls https://192.168.0.251:2380 --advertise-client-urls https://192.168.0.251:2379 --listen-client-urls https://192.168.0.251:2379 --initial-cluster 192.168.0.249-name-1=https://192.168.0.249:2380,192.168.0.250-name-2=https://192.168.0.250:2380,192.168.0.251-name-3=https://192.168.0.251:2380 --initial-cluster-state new --initial-cluster-token abac64c8-baab-4ae6-8412-4253d3cfb0cf
    _COMM:  etcd
    _EXE:  /opt/etcd-v3.3.8/etcd
    _GID:  995
    _HOSTNAME:  iZbp1f7y2ikfe4l8nx95amZ
    _MACHINE_ID:  f0f31005fb5a436d88e3c6cbf54e25aa
    _PID:  10926
    _SOURCE_REALTIME_TIMESTAMP:  1546854068863857
    _SYSTEMD_CGROUP:  /system.slice/etcd.service
    _SYSTEMD_SLICE:  system.slice
    _SYSTEMD_UNIT:  etcd.service
    _TRANSPORT:  journal
    _UID:  997
    __source__:  172.16.1.4
    __tag__:__hostname__:  logtail-ds-8kqb9
    __topic__:  
    _monotonic_timestamp_:  1467135144311
    _realtime_timestamp_:  1546854068864309
  • 示例2

    Kubernetes场景下,使用DaemonSet模式采集宿主机的系统日志,由于日志中有很多并不重要的字段,使用处理插件只挑选较为重要的日志字段。采集配置为:

    {
      "inputs": [
        {
          "detail": {
            "JournalPaths": [
              "/logtail_host/var/log/journal"
            ],
            "ParsePriority": true,
            "ParseSyslogFacility": true
          },
          "type": "service_journal"
        }
      ],
      "processors": [
        {
          "detail": {
            "Exclude": {
              "UNIT": "^libcontainer.*test"
            }
          },
          "type": "processor_filter_regex"
        },
        {
          "detail": {
            "Include": [
              "MESSAGE",
              "PRIORITY",
              "_EXE",
              "_PID",
              "_SYSTEMD_UNIT",
              "_realtime_timestamp_",
              "_HOSTNAME",
              "UNIT",
              "SYSLOG_FACILITY",
              "SYSLOG_IDENTIFIER"
            ]
          },
          "type": "processor_pick_key"
        }
      ]
    }

    日志样例:

    MESSAGE:  rejected connection from "192.168.0.251:48914" (error "EOF", ServerName "")
    PRIORITY:  informational
    SYSLOG_IDENTIFIER:  etcd
    _EXE:  /opt/etcd-v3.3.8/etcd
    _HOSTNAME:  iZbp1i0czq3zgvxlx7u8ueZ
    _PID:  10590
    _SYSTEMD_UNIT:  etcd.service
    __source__:  172.16.0.141
    __tag__:__hostname__:  logtail-ds-dp48x
    __topic__:  
    _realtime_timestamp_:  1547975837008708

问题排查

使用Logtail采集日志后,如果预览页面或查询页面无数据,您可以参见Logtail采集日志失败的排查思路进行排查。