日志服务数据加工最佳实践: 解析syslog各种标准格式

简介: 本篇介绍日志服务数据加工最佳实践: 解析syslog各种标准格式的整体结构, 覆盖RFC524, RFC3164以及RSyslog的标准配置格式: TraditionalFormat, FileFormat, RSYSLOG_SyslogProtocol23Format, RSYSLOG_Debug.

概况

syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。

问题

在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
但是,长期以来,没有一个标准来规范syslog的格式,导致syslog的格式是非常随意的。最坏的情况下,根本就没有任何格式,导致程序不能对syslog 消息进行解析,只能将它看作是一个字符串。对syslog日志解析一直是比较令人头疼的事情,本篇介绍如何使用LOG DSL中的grok高效快捷的去解析不同格式的syslog日志

解决方案

syslog协议标准

目前业界存在常见两种syslog日志协议,一个是2009年起草协议RFC524,另外一个是2001年的RFC3164协议。以下,为大家介绍这两种协议的不同之处,以便能够在以后实践中能够灵活应用grok解析syslog日志。

RFC5424协议

RFC5424协议包含以下字段信息,具体信息可以参考官方协议(https://tools.ietf.org/html/rfc5424)

PRI VERSION SP TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID

以下通过几个示例来解释以上字段代表信息:

"""
Example1:
<34>1 2019-07-11T22:14:15.003Z aliyun.example.com ali - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
"""
PRI -- 34
VERSION -- 1
TIMESTAMP -- 2019-07-11T22:14:15.003Z
HOSTNAME -- aliyun.example.com
APP-NAME -- ali
PROCID -- 无
MSGID -- ID47
MESSAGE -- 'su root' failed for lonvick on /dev/pts/8
"""
Example-2:
<165>1 2019-07-11T22:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.
"""
PRI -- 165
VERSION -- 1
TIMESTAMP -- 2019-07-11T05:14:15.000003-07:00
HOSTNAME -- 192.0.2.1
APP-NAME -- myproc
PROCID -- 8710
STRUCTURED-DATA -- “-”
MSGID -- “-”
MESSAGE -- "%% It's time to make the do-nuts."
"""
Example3: - with STRUCTURED-DATA
<165>1 2019-07-11T22:14:15.003Z aliyun.example.com
           evntslog - ID47 [exampleSDID@32473 iut="3" eventSource=
           "Application" eventID="1011"] BOMAn application
           event log entry...
"""
PRI -- 165
VERSION -- 1
TIMESTAMP -- 2019-07-11T22:14:15.003Z
HOSTNAME -- aliyun.example.com
APP-NAME -- evntslog
PROCID -- "-"
MSGID -- ID47
STRUCTURED-DATA -- [exampleSDID@32473 iut="3" eventSource="Application" eventID="1011"]
MESSAGE -- An application event log entry...

RFC3164协议

RFC3164协议包含以下字段信息,具体信息可以参考官方协议(https://tools.ietf.org/html/rfc3164)

PRI HEADER[TIME HOSTNAME] MSG

以下通过几个示例来解释以上字段代表信息:

"""
<30>Oct 9 22:33:20 hlfedora auditd[1787]: The audit daemon is exiting.
"""
PRI -- 30
HEADER
- TIME -- Oct 9 22:33:20
- HOSTNAME -- hlfedora
MSG
- TAG -- auditd[1787]
- Content --The audit daemon is exiting.

grok解析syslog常见格式

以上内容介绍了syslog,接下来进入实践解析阶段。在syslog配置文件中为用户定制了几种常用格式的syslog,以下使用grok一一解析。此外,syslog采集到logstore上要使用文本格式采集。
具体的grok规则可参考grok模式参考:

TraditionalFormat格式

日志内容形式如下:

May  5 10:20:57 iZbp1a65x3r1vhpe94fi2qZ systemd: Started System Logging Service.

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: May  5 10:20:57 iZbp1a65x3r1vhpe94fi2qZ systemd: Started System Logging Service.
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: May  5 10:20:57 iZbp1a65x3r1vhpe94fi2qZ systemd: Started System Logging Service.
    timestamp: May  5 10:20:57
    logsource: iZbp1a65x3r1vhpe94fi2qZ
    program: systemd
    message: Started System Logging Service.
"""
e_regex('content', grok('%{SYSLOGBASE} %{GREEDYDATA:message}'))

FileFormat格式

日志内容形式如下:

2019-05-06T09:26:07.874593+08:00 iZbp1a65x3r1vhpe94fi2qZ root: 834753

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: 2019-05-06T09:26:07.874593+08:00 iZbp1a65x3r1vhpe94fi2qZ root: 834753
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: 2019-05-06T09:26:07.874593+08:00 iZbp1a65x3r1vhpe94fi2qZ root: 834753
    timestamp: 2019-05-06T09:26:07.874593+08:00
    hostname: iZbp1a65x3r1vhpe94fi2qZ
    program: root
    message: 834753
"""
e_regex('content',grok('%{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{SYSLOGPROG} %{GREEDYDATA:message}'))

RSYSLOG_SyslogProtocol23Format格式

日志内容形式如下:

<13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ root - - - twish

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ root - - - twish
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ root - - - twish
    priority: 13
    version: 1
    timestamp: 2019-05-06T11:50:16.015554+08:00
    hostname: iZbp1a65x3r1vhpe94fi2qZ
    program: root
    message: twish
"""
e_regex('content',grok('%{POSINT:priority}>%{NUMBER:version} %{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{PROG:program} - - - %{GREEDYDATA:message}'))

RSYSLOG_DebugFormat格式

日志内容形式如下:

2019-05-06T14:29:37.558854+08:00 iZbp1a65x3r1vhpe94fi2qZ root: environment

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: 2019-05-06T14:29:37.558854+08:00 iZbp1a65x3r1vhpe94fi2qZ root: environment
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: 2019-05-06T14:29:37.558854+08:00 iZbp1a65x3r1vhpe94fi2qZ root: environment
    timestamp: 2019-05-06T14:29:37.558854+08:00 
    hostname: iZbp1a65x3r1vhpe94fi2qZ
    program: root
    message: environment
"""
e_regex('content',grok('%{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{SYSLOGPROG} %{GREEDYDATA:message}'))

自此,syslog配置文件常见log日志文件格式解析已解析完成,接下来介绍两种FluentSyslog日志格式。

FluentRFC5424格式

日志内容形式如下:

<16>1 2013-02-28T12:00:00.003Z 192.168.0.1 fluentd 11111 ID24224 [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] Hi, from Fluentd!

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: <16>1 2019-02-28T12:00:00.003Z 192.168.0.1 aliyun 11111 ID24224 [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] Hi, from Fluentd!
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: <16>1 2019-02-28T12:00:00.003Z 192.168.0.1 aliyun 11111 ID24224 [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211] Hi, from aliyun!
    priority: 16
    version: 1
    timestamp: 2019-02-28T12:00:00.003Z
    hostname: 192.168.0.1
    ident: aliyun
    pid: 1111
    msgid: ID24224
    extradata: [exampleSDID@20224 iut='3' eventSource='Application' eventID='11211]
    message: Hi, from aliyun!
"""
e_regex('content',grok('%{POSINT:priority}>%{NUMBER:version} %{TIMESTAMP_ISO8601:timestamp} %{SYSLOGHOST:hostname} %{WORD:ident} %{NUMBER:pid} %{USERNAME:msgid} (?P<extradata>(\[(.*)\]|[^ ])) %{GREEDYDATA:message}'))

FluentRFC3164格式

日志内容形式如下:

<6>Feb 28 12:00:00 192.168.0.1 fluentd[11111]: [error] Syslog test

LOG DSL编排规则处理:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: <6>Feb 28 12:00:00 192.168.0.1 aliyun[11111]: [error] Syslog test
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: <6>Feb 28 12:00:00 192.168.0.1 aliyun[11111]: [error] Syslog test
    priority: 6
    timestamp: Feb 28 12:00:00
    hostname: 192.168.0.1
    ident: aliyun
    pid: [1111]
    level: [error]
    message: Syslog test
"""
e_regex('content', grok('%{POSINT:priority}>%{SYSLOGTIMESTAMP:timestamp} %{SYSLOGHOST:hostname} %{WORD:ident}(?P<pid>(\[(\d+)\]|[^:])): (?P<level>(\[(\w+)\]|[^ ])) %{GREEDYDATA:message}'))

对priority做进一步解析

针对,以上解析过后的日志内容还可以对priority进一步解析,并且匹配出解析出来的facility和serverity信息,使用RFC5424协议更多参考e_syslogrfc函数,如下:

"""
处理前日志格式:
    receive_time: 1558663265
    __topic__:
    content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ root - - - twish
    priority: 13
    version: 1
    timestamp: 2019-05-06T11:50:16.015554+08:00
    hostname: iZbp1a65x3r1vhpe94fi2qZ
    program: root
    message: twish
处理后日志格式:
    receive_time: 1558663265
    __topic__:
    content: <13>1 2019-05-06T11:50:16.015554+08:00 iZbp1a65x3r1vhpe94fi2qZ root - - - twish
    priority: 13
    version: 1
    timestamp: 2019-05-06T11:50:16.015554+08:00
    hostname: iZbp1a65x3r1vhpe94fi2qZ
    program: root
    message: twish
    _facility_: 1
    _severity_: 5
    _severitylabel_: Notice: normal but significant condition
    _facilitylabel_: user-level messages
"""
e_syslogrfc("priority","SYSLOGRFC5424")

总结

通过以上内容,覆盖了syslog各种常见日志解析。syslog格式还有很多种,解析方法还是推荐使用LOG DSL的grok解析效率更快更高。grok还可以解析其他类型的log内容,比如Apache、Http错误日志等等。
如果解析出来之后的message或者body. 还需要进一步解析的,有各种方式:grok, 正则或者CSV等等

进一步参考

欢迎扫码加入官方钉钉群获得实时更新与阿里云工程师的及时直接的支持:
image

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
3445 1
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
1146 1
日志收集和Spring 微服务监控的最佳实践
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
656 1
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
1659 55
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
2046 13
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
438 0
优化 Apache 日志记录的 5 个最佳实践
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
11592 2
|
人工智能 运维 监控
一招高效解析 Access Log,轻松应对泼天流量
一招高效解析 Access Log,轻松应对泼天流量
425 0
一招高效解析 Access Log,轻松应对泼天流量
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
815 9

相关产品

  • 日志服务
  • 推荐镜像

    更多
  • DNS