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 记录不会重复采集已经读过的日志避免数据冗余、重复写入 ES3.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 [rootserver5 conf.d]# vim test.conf input { syslog {} } output { stdout {} elasticsearch { hosts 192.168.36.170:9200 index syslog-%{YYYY.MM.dd} } } [rootserver4 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/test.conf 配置客户端日志输出 [rootserver1 ~]# vim /etc/rsyslog.conf 去掉注释 *.* 192.168.223.174:514 [rootserver1 ~]# systemctl restart rsyslog.serviceLogstash 内置 syslog 输入插件默认监听 UDP 514 端口等待其他主机 rsyslog 推送日志。符号重点解释*.*所有设施、所有级别日志全部转发 TCP 协议发送 syslog UDP 协议发送 syslog192.168.223.174:514Logstash 服务端 IP514 端口。在server1.2.3执行 # vim /etc/rsyslog.conf 去掉以下行的注释 $ModLoad imudp $UDPServerRun 514 *.* 192.168.223.174:514 # systemctl restart rsyslog.service # logger server2logger xxx命令会向本机/var/log/messages写入一条日志同时 rsyslog 会把这条日志转发给 Logstash。代表 server3 执行logger server3产生的测试日志成功被 Logstash 收到。说明Elasticsearch 中存储的数据 日志自带自动解析字段·host产生日志的源服务器主机名server1/server2/server3Logstash 多行过滤插件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拷贝模板文件 [rootserver1 ]# cd /var/log/elasticsearch [rootserver1 elasticsearch]# scp my-es.log server5:/var/log/ [rootserver5 conf.d]# vim test.conf先将下面的行注释掉进行测试图中的报错是由于注释掉了multiline编解码器把堆栈异常、多行日志合并成一条完整日志。导致出现了一条完整日志变为多行日志报错。解决方法删除myeslog,让其重新生成并且删除/usr/share/logstash/data/plugins/inputs/file/下面的“. 文件”取消注释再重新执行命令# cd /usr/share/logstash/data/plugins/inputs/file/ [rootserver5 file]# ls [rootserver5 file]# l. . .. .sincedb_4d10e6fb4e3ffdf0fe00d1ce0f25b0fd [rootserver5 file]# rm -f .sincedb_4d10e6fb4e3ffdf0fe00d1ce0f25b0fdLogstash Grok 过滤器作用原始非结构化文本日志 → 切割成结构化字段绝大多数系统、应用日志是一整串文本没有字段。grok使用正则模板把一行日志拆分出时间、级别、进程、IP、URL、状态码等独立字段方便 ES 检索、Kibana 筛选。[rootserver4 ~]# yum install -y httpd [rootserver4 ~]# systemctl enablel --now httpd [rootserver4 ~]# echo helloword /var/www/html/index.html 访问此站点生成日志信息 [rootk8s1 ~]# 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日志已经成功发送存入 Elasticsearch索引名称apachelog-2026.08.11弹窗展开了单条日志完整 JSON和第一张控制台输出的日志内容完全一致ES 中完整保留了 grok 解析出来的所有字段clientip、response、verb、agent等