Logstash 分布式日志管理

本文介绍了如何使用 Logstash 进行分布式日志管理,重点讲解了 File 插件和 Grok 插件的配置与使用。File 插件用于读取并处理日志文件,Grok 插件通过正则表达式解析非结构化日志,两者结合将日志数据结构化并输出到 Elasticsearch。Logstash 在每台服务器上运行,收集本地日志并发送到同一个 ES 集群,实现高效运维。
摘要由CSDN通过智能技术生成

背景

日常部署服务时,为了达到 High Available 或是 Load Balance 的目的,经常会在多个服务器部署多个服务实例。不同实例的日志一般都是直接写入本地的日志文件中,一旦出现问题或是日常检查,运维人员需要登录不同的服务器获取日志详情,十分低效。

因此,希望能够通过Logstash读取本地日志文件,并进行简单的处理,将非格式文本解析为格式化数据,最终输出到 ES 或是 MySQL 等数据库管理工具进行同一管理查看,提升运维人员的工作效率。

查看官网,Logstash 提供了很多插件,对于日志解析而言,我觉得最主要的是 file 插件以及 log4j 插件。file 插件的优势在于能够解析各种非格式化文本,而 log4j 插件已经做好了足够的适配工作,但是只针对于 log4j 日志。由于此次解析的数据是 python log 数据,因此选择 file 插件来解析 log 文本数据。此外,想要将非格式化 log 文本转化为结构化数据,还需要配合 grok 正则表达式插件以及 date 时间转化插件等。

File 插件

介绍

File

Stream events from files, normally by tailing them in a manner similar to tail -0F but optionally reading them from the beginning.

Normally, logging will add a newline to the end of each line written. By default, each event is assumed to be one line and a line is taken to be the text before a newline character. If you would like to join multiple log lines into one event, you’ll want to use the multiline codec. The plugin loops between discovering new files and processing each discovered file. Discovered files have a lifecycle, they start off in the “watched” or “ignored” state. Other states in the lifecycle are: “active”, “closed” and “unwatched”

File 插件可以从指定的目录或者文件读取内容,输入到管道处理,也算是logstash的核心插件了,大多数的使用场景都会用到这个插件。简单的使用方法如下:

file {
   
    path => ["/root/syslog.txt"]
    start_position => "beginning"
    # 如果禁用 sincedb(将其设置为 /dev/null),则 logstash 将从头开始读取与路径匹配的所有文件
    # /dev/null 是 linux 系统中的存在的黑洞文件,因此 sincedb 将不会生成
    sincedb => /dev/null
}

基本配置项

常用的配置项如下:

  • path:需要读取的文件,可以设置通配符以及目录;
  • start_position:设置 Logstash 将从哪里开始解析文件;
  • delimiter:该配置设置文档的分隔符,即如何切割文档,默认是 \n。但是配置的时候不可以直接使用转义字符配置,Logstash 无法识别。如果你要用两个换行符分割,那么就要敲两次回车;
  • sincedb:该文件将记录 Logstash 处理 file 文件的进度,以便下次处理的时候从上次的偏移量继续处理。sincedb 默认是按照文件的 inode 等信息自动生成,其中记录了inode、主设备号、次设备号以及读取的位置。因此,如果一个文件仅仅是重命名,那么它的 inode 以及其他信息就不会改变,因此也不会重新读取文件的任何信息;
  • sincedb_write_interval:Logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。
  • close_older:一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时。
  • ignore_older:在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天。
  • stat_interval:Logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。

Grok 插件

介绍

Grok is a great way to parse unstructured log data into something structured and queryable.

This tool is perfect for syslog logs, apache and other webserver logs, mysql logs, and in general, any log format that is generally written for humans and not computer consumption.

Logstash ships with about 120 patterns by default. You can find them here: https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns. You can add your own trivially. (See the patterns_dir setting)

If you need help building patterns to match your logs, you will find the http://grokdebug.herokuapp.com and http://grokconstructor.appspot.com/ applications quite useful!

日志文件大部分都是非结构化的文本数据,需要人工去匹配文本规则,剥离出关心的数据,并结构化存储,方便搜索及排错。Grok 是 Logstash 最重要的插件,利用正则表达式来解析非结构化数据。你可以在Grok 里预定义好命名正则表达式,在稍后 Grok 参数或者其他正则表达式里引用它。

预定义 pattern

Grok 过滤器器附带了各种正则表达式和模式,用于你可以在日志中遇到的常见数据类型和表达式,例如 IP,用户名,电子邮件,主机名等。Logstash 读取日志时,可以使用这些模式来找到我们想要变成结构化字段的日志消息的语义元素。在 Logstash-8.4.3 中,附带的预定义 pattern 保存在 logstash-8.4.3/vendor/bundle/jruby/2.6.0/gems/logstash-patterns-core-4.3.4/patterns/legacy/grok-patterns,用户可以将想要配置的正则表达式模板也追加在其中。下面列出常用的 Grok 预定义 pattern:

USERNAME [a-zA-Z0-9._-]+
USER %{
   US
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值