Logstash 管理

file输入插件

使用 Logstash file 输入插件 读取本地系统日志文件 /var/log/messages,实时采集日志并写入 Elasticsearch

复制代码
编写 file 插件采集配置
# cd /etc/logstash/conf.d

# vim test.conf
input {
        file {
                path => "/var/log/messages"
                start_position => "beginning"
        }
}

# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf

当 Logstash 第一次发现这个文件时,从文件开头读取

sincedb 作用

1.sincedb 文件里保存日志文件的读取偏移量(读到文件哪个字节位置)

2.Logstash 重启后,读取 sincedb 记录,不会重复采集已经读过的日志,避免数据冗余、重复写入 ES

3.sincedb 文件名由日志文件 inode 编号哈希生成。

4.想要强制从头重新读取日志:

  • 先停止 Logstash

  • 删除对应的 sincedb 文件

  • 重启 Logstash

复制代码
.sincedb文件保存文件读取进度,避免数据冗余读取

# cd /usr/share/logstash/data/plugins/inputs/file

# l.
.  ..  .sincedb_452905a167cf4509fd08acb964fdb20c

# ls -i  /var/log/messages
50695316 /var/log/messages

删除后重新读取
# rm -f .sincedb_452905a167cf4509fd08acb964fdb20c

下方截图可以看到:日志成功进入 ES 索引 messages-2026.08.11

  • 自动生成索引:messages-2026.08.11(由 output 里 index 模板定义按日期生成索引)

  • 原始日志内容被提取到 message 字段,可以看到原始日志文本 /var/log/messages 相关系统日志;

复制代码
再写入一条messages

# cd /usr/share/logstash/data/plugins/inputs/file/

# logger helloworld

# tail -1 /var/log/messages

Aug 11 14:38:10 server5 root: helloworld

日志写入 /var/log/messages 之后,Logstash 实时监听到文件新增内容,自动采集 ,很快在 Elasticsearch 的 messages-2026.08.11 索引中出现这条 helloworld 日志。

syslog 插件

Logstash syslog 插件负责监听 514 端口,接收其他服务器 rsyslog 推送过来、遵守 syslog 协议的日志,并自动解析字段。

复制代码
Logstash 服务端配置(接收端 server5)

[root@server5 conf.d]# vim test.conf
input {
        syslog {}
}

output {
         stdout {}

        elasticsearch {
                hosts => "192.168.36.170:9200"
                index => "syslog-%{+YYYY.MM.dd}"
        }

}

[root@server4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf


配置客户端日志输出
[root@server1 ~]# vim /etc/rsyslog.conf

去掉注释: *.*	 @@192.168.223.174:514

[root@server1 ~]# systemctl  restart rsyslog.service

Logstash 内置 syslog 输入插件,默认监听 UDP 514 端口,等待其他主机 rsyslog 推送日志。

符号重点解释

  • *.*:所有设施、所有级别日志全部转发;

  • @@ = TCP 协议发送 syslog;

  • @ = UDP 协议发送 syslog;

  • 192.168.223.174:514:Logstash 服务端 IP+514 端口。

复制代码
 在server1.2.3执行
# vim /etc/rsyslog.conf

去掉以下行的注释
$ModLoad imudp
$UDPServerRun 514

*.*	 @@192.168.223.174:514

# systemctl  restart rsyslog.service
# logger server2

logger xxx 命令会向本机 /var/log/messages 写入一条日志,同时 rsyslog 会把这条日志转发给 Logstash。

代表 server3 执行 logger server3 产生的测试日志成功被 Logstash 收到。

说明Elasticsearch 中存储的数据 ,日志自带自动解析字段:

·host:产生日志的源服务器主机名(server1/server2/server3)

Logstash 多行过滤插件:multiline 过滤器

作用

日志场景常见:一条业务报错会分成多行打印(Java 异常堆栈、Python 报错、程序调用栈) 示例原始日志:

复制代码
2026-08-11 10:00:00 INFO 启动服务
2026-08-11 10:00:05 ERROR 出现异常
java.lang.NullPointerException
    at Test.main(Test.java:20)
    ...

如果不做多行处理,Logstash 会把每一行当成单独一条日志multiline 多行过滤器:把属于同一个事件的连续多行日志合并成单条日志

复制代码
从server1拷贝模板文件
[root@server1 ]# cd /var/log/elasticsearch
[root@server1 elasticsearch]# scp my-es.log server5:/var/log/

[root@server5 conf.d]# vim test.conf

先将下面的行注释掉进行测试

图中的报错是由于注释掉了multiline 编解码器:把堆栈异常、多行日志合并成一条完整日志

导致出现了一条完整日志变为多行日志报错。

解决方法 :删除myeslog,,让其重新生成,并且删除/usr/share/logstash/data/plugins/inputs/file/下面的 ". 文件";取消注释,再重新执行命令

复制代码
# cd /usr/share/logstash/data/plugins/inputs/file/

[root@server5 file]# ls
[root@server5 file]# l.
.  ..  .sincedb_4d10e6fb4e3ffdf0fe00d1ce0f25b0fd
[root@server5 file]# rm -f .sincedb_4d10e6fb4e3ffdf0fe00d1ce0f25b0fd

Logstash Grok 过滤器

作用

原始非结构化文本日志 → 切割成结构化字段 绝大多数系统、应用日志是一整串文本,没有字段。 grok 使用正则模板把一行日志拆分出:时间、级别、进程、IP、URL、状态码等独立字段,方便 ES 检索、Kibana 筛选。

复制代码
[root@server4 ~]# yum install -y httpd
[root@server4 ~]# systemctl  enablel --now httpd
[root@server4 ~]# echo helloword > /var/www/html/index.html

访问此站点生成日志信息
[root@k8s1 ~]# ab -c1 -n 100 http://192.168.223.174/index.html

进入 Logstash 配置文件目录

编辑名为grok.conf的配置文件(采集 Apache 日志 + grok 解析)

指定配置文件启动 Logstash

复制代码
# cd /etc/logstash/conf.d/

# vim grok.conf

# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/grok.conf
  1. 日志已经成功发送存入 Elasticsearch,索引名称:apachelog-2026.08.11
  2. 弹窗展开了单条日志完整 JSON,和第一张控制台输出的日志内容完全一致
  3. ES 中完整保留了 grok 解析出来的所有字段:clientipresponseverbagent
相关推荐
测试运维日常笔记1 小时前
VMware vSphere、ESXi 与 vCenter Server:核心概念与关系详解
java·开发语言
名字还没想好☜1 小时前
React 用自定义 useDebounce Hook 治好搜索框频繁请求:防抖、竞态取消与卸载清理
前端·javascript·react.js·react·hooks
风流 少年1 小时前
Spring AI 2.0:Flux
java·人工智能·spring
m0_547486661 小时前
《面向对象与Java程序设计》全套PPT课件2026
java·开发语言
杉氧1 小时前
Flutter 跨平台多端适配与 Android/iOS 一键自动化打包发布
android·前端·flutter
障碍的枫子1 小时前
xss和CSRF的攻击和防御
前端·xss·csrf
用户921080262862 小时前
3. 给 Bubble 新增一个 Agent Variant
前端
jason成都2 小时前
ignav-next|Java 层封装 GNSS/INS 组合导航框架,隔离 RTKLIB 与 INS 内核,双模块独立演进、最小侵入
java·开发语言
抓不住时间的沙2 小时前
butterfly主题美化,打造属于自己的个性博客
java·开发语言·前端·javascript·node.js·github