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 解析出来的所有字段:clientip、response、verb、agent 等
相关推荐
子兮曰5 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰5 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
前端小万5 天前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝5 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端