ELK技术-Logstash
1.背景
1.1 简介

Logstash 是一个数据流引擎
- 它是用于数据物流的开源流式 ETL(Extract-Transform-Load)引擎
- 在几分钟内建立数据流管道
- 具有水平可扩展及韧性且具有自适应缓冲
- 不可知的数据源
- 具有 200 多个集成和处理器的插件生态系统
- 使用 Elastic Stack 监视和管理部署
Logstash 几乎可以摄入各种类别的数据
Logstash 相关概念
- Logstash 实例是一个正在运行的 Logstash 进程。建议在 Elasticsearch 的单独主机上运行 Logstash,以确保两个组件有足够的计算资源可用。
- 管道(pipeline)是配置为处理给定工作负载的插件集合。一个 Logstash 实例可以运行多个管道。(彼此独立)
- 输入插件(input plugins)用于从给定的源系统中提取或接收数据。 Logstash 参考指南中提供了支持的输入插件列表:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
- 过滤器插件(filter plugin)用于对传入事件应用转换和丰富。 Logstash 参考指南中提供了支持的过滤器插件列表:Filter plugins | Logstash Reference [8.3] | Elastic
- 输出插件(output plugin)用于将数据加载或发送到给定的目标系统。 Logstash 参考指南中提供了支持的输出插件列表:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
1.2 学习参考
- Logstash官方文档:《Logstash官方文档》
- 中国社区官方博客:《Logstash入门教程》
- 其他参考技术博客:《通过Logstash实现mysql数据定时增量同步到ES》
- Logstash解析:《解析插件-Grok》
1.3 本例测试版本

[root@dev1613 study]# sudo -u logstash ../bin/logstash --version
Using bundled JDK: /opt/logstash/jdk
logstash 7.12.1
2.功能应用
2.1 基础测试
sudo -u logstash ../bin/logstash -e 'input { stdin { } } output { stdout {} }'

2.2 Logstash解析日志文件

日志原始内容
2022-07-06 18:48:37.453 ERROR 14677 --- [ dispatcher 108] c.a.c.s.dashboard.metric.MetricFetcher : Failed to fetch metric from <http://10.32.4.230:8719/metric?startTime=1657104506000&endTime=1657104512000&refetch=false>: socket timeout
2022-07-06 18:48:44.439 ERROR 14677 --- [ dispatcher 109] c.a.c.s.dashboard.metric.MetricFetcher : Failed to fetch metric from <http://10.32.4.230:8719/metric?startTime=1657104513000&endTime=1657104519000&refetch=false>: socket timeout
2022-07-06 18:48:51.514 ERROR 14677 --- [ dispatcher 110] c.a.c.s.dashboard.metric.MetricFetcher : Failed to fetch metric from <http://10.32.4.230:8719/metric?startTime=1657104520000&endTime=1657104526000&refetch=false>: socket timeout
Logstash配置文件
input {
file {
path => "/opt/logstash/study/outlog.log"
start_position => "beginning"
stat_interval => "3"
type => "sentinel-log"
}
}
filter {
grok {
match => ["message","%{TIMESTAMP_ISO8601:datetime} %{LOGLEVEL:loglevel} %{NUMBER:textid} %{GREEDYDATA:errormsg}"]
}
json {
source => "request"
}
}
output {
stdout { codec => rubydebug }
}
Grok日志解析在线测试

日志解析结构化输出

2.3 Logstash-数据库同步
基础数据内容
CREATE TABLE `study_logstash_es` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`study_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编码',
`study_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
`study_tag` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '标签',
`study_level` smallint NOT NULL DEFAULT '0' COMMENT '等级,如1,2,3',
`is_delete` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '0 未删除 1 删除',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`operate_user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '操作人',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_study_code` (`study_code`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='学习-logstash同步msql数据到es';
PUT /study_logstash_es
{
"settings": {
"index": {
"number_of_shards": 1,
"number_of_replicas": 1
}
}, "mappings": {
"properties": {
"id": {
"type": "integer"
},
"study_code": {
"type": "text"
},
"study_name": {
"type": "text"
},
"operate_user": {
"type": "text"
},
"study_tag": {
"type": "keyword"
},
"is_delete": {
"type": "integer"
},
"study_level": {
"type": "integer"
},
"mark_time": {
"type": "date",
"format": "epoch_millis"
},
"update_time": {
"type": "date"
}
}
}
}
Logstash配置文件
input {
jdbc {
jdbc_driver_library => "/opt/logstash/study/mysql-connector-java-8.0.30.jar"
jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://xxx.xxx.xx.x:3306/study_database?serverTimezone=Asia/Shanghai&allowMultiQueries=true&characterEncoding=utf-8"
jdbc_user => "root"
jdbc_password => "xxxxx"
jdbc_paging_enabled => true
jdbc_page_size => "2"
use_column_value => true
tracking_column => "mark_time"
tracking_column_type => "numeric"
schedule => "* * * * *"
statement => "SELECT id,study_code,study_name,study_tag,study_level,operate_user,update_time,UNIX_TIMESTAMP(update_time) as mark_time from study_logstash_es where UNIX_TIMESTAMP(update_time)>:sql_last_value AND update_time < NOW()"
}
}
output{
elasticsearch{
hosts => ["xxx.xxx.16.4:9200","xxx.xxx.16.xx:9200","192.xxx.xx.xx:9200"]
index => "study_logstash_es"
timeout => 300
user => "xxx"
password => "xxxxx"
}
}
数据同步es


2.4 Logstash-kafka消息同步
input {
kafka {
bootstrap_servers => "xxx.xxx.xx.4:9092,xxx.xxx.16.4:9093,xxx.xxx.16.4:9094" #kafka服务器地址
topics => "xxxlog"
# batch_size => 5
codec => "json"
group_id => "logstash"
consumer_threads => 3
}
}
filter {
# 丢弃所有的header请求
if [request][method] == "HEAD" {
drop { }
}
# 因为[request][querystring]这个玩意中的字段类型可能不一样,所以全部干成字符串
ruby {
code => "event.set('[request][querystring]', event.get('[request][querystring]').to_s) if event.get('[request][querystring]')"
}
if [request][uri] =~ "^/ucenter-admin-view/v3(.*)" {
mutate {
add_field => { "log_source" => "用户中心管理后台" }
add_field => { "log_source_id" => "1" }
}
}
else if [request][uri] =~ "^/ucenter-org-view/v3/(.*)" {
mutate {
add_field => { "log_source" => "用户中心工作台" }
add_field => { "log_source_id" => "2" }
}
}
else if [request][uri] =~ "^/safety-admin-api(.*)" {
mutate {
add_field => { "log_source" => "安全管理平台" }
add_field => { "log_source_id" => "3" }
}
}
else{
mutate {
add_field => { "log_source" => "其他" }
add_field => { "log_source_id" => "0" }
}
}
grok {
match => { "[request][uri]" => "%{URIPATH:[request][path]}" }
named_captures_only => false
}
}
output{
# stdout {
# codec => json
# }
elasticsearch{
hosts => ["xxx.xxx.xx.4:9200","xxx.xxx.16.13:9200","xxx.xxx.16.14:9200"]
index => "apisixlog"
timeout => 300
user => "elastic"
password => "HApn2xCJMuRlg0UOIV0P"
}
3.总结
- Logstash基于 输入(inputs),过滤器(filters)和输出(outputs)可以方便快捷的处理数据,将一些非结构化数据,处理为结构化数据。Logstash支持数据中转,数据同步等场景的应用。本例只是简要测试,在实际业务使用时,可基于某一个输入插件/输出插件参考官方文档,结合项目使用。
- Logstash收集大量日志时,存在耗内存的情况,建议参考官方推荐的FileBeat模式。详情参考文档:《开源日志管理方案 ELK 和 EFK 的区别》,《通过Filebeat把日志传入到Elasticsearch》。
- Logstash在配置文件调整后,启动命令,可能出现如下报错:


- Logstash启动命名常用如下:
sudo -u logstash ../bin/logstash -f study-file-es.conf
表示当前窗口启动,关闭或退出命令行时,logstash实例关闭。 sudo -u logstash ../bin/logstash -f study-file-es.conf --config.reload.automatic
表示当前窗口启动,配置文件变化时,不用重新启动实例,可自动加载。关闭或退出命令行时,logstash实例关闭。 sudo -u logstash ../bin/logstash -f study-mysql-es.conf & test.out --config.reload.automatic
表示后台启动,关闭退出命令,实例在后台一直运行。 ps -ef|grep logstash
kill-9 进程号, 关闭对应的实例
- Logstash运行日志查看

ELK技术-Logstash的更多相关文章
- ELK技术栈之-Logstash详解
ELK技术栈之-Logstash详解 前言 在第九章节中,我们已经安装好Logstash组件了,并且启动实例测试它的数据输入和输出,但是用的是最简单的控制台标准输入和标准输出,那这节我们就来深入的 ...
- ELK技术实战-安装Elk 5.x平台
ELK技术实战–了解Elk各组件 转载 http://www.ywnds.com/?p=9776 ELK技术实战-部署Elk 2.x平台 ELK Stack是软件集合Elasticsearch. ...
- [转] ELK 之 Logstash
[From] https://blog.csdn.net/iguyue/article/details/77006201 ELK 之 Logstash 简介: ELK 之 LogstashLogsta ...
- 应用编排服务之ELK技术栈示例模板详解
日志对互联网应用的运维尤为重要,它可以帮助我们了解服务的运行状态.了解数据流量来源甚至可以帮助我们分析用户的行为等.当进行故障排查时,我们希望能够快速的进行日志查询和过滤,以便精准的定位并解决问题. ...
- 使用ELK(Elasticsearch + Logstash + Kibana) 搭建日志集中分析平台实践--转载
原文地址:https://wsgzao.github.io/post/elk/ 另外可以参考:https://www.digitalocean.com/community/tutorials/how- ...
- ELk(Elasticsearch, Logstash, Kibana)的安装配置
目录 ELk(Elasticsearch, Logstash, Kibana)的安装配置 1. Elasticsearch的安装-官网 2. Kibana的安装配置-官网 3. Logstash的安装 ...
- CentOS 6.x ELK(Elasticsearch+Logstash+Kibana)
CentOS 6.x ELK(Elasticsearch+Logstash+Kibana) 前言 Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案, ...
- 基于CentOS6.5或Ubuntu14.04下Suricata里搭配安装 ELK (elasticsearch, logstash, kibana)(图文详解)
前期博客 基于CentOS6.5下Suricata(一款高性能的网络IDS.IPS和网络安全监控引擎)的搭建(图文详解)(博主推荐) 基于Ubuntu14.04下Suricata(一款高性能的网络ID ...
- 键盘侠Linux干货| ELK(Elasticsearch + Logstash + Kibana) 搭建教程
前言 Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,分析网站的访问情况时我们一般会借助 Google / 百度 / CNZZ 等方式嵌入 JS ...
随机推荐
- 用python进行加密和解密——我看刑
加密和解密 密码术意味着更改消息的文本,以便不知道你秘密的人永远不会理解你的消息. 下面就来创建一个GUI应用程序,使用Python进行加密和解密. 在这里,我们需要编写使用无限循环的代码,代码将不断 ...
- NC23053 月月查华华的手机
NC23053 月月查华华的手机 题目 题目描述 月月和华华一起去吃饭了.期间华华有事出去了一会儿,没有带手机.月月出于人类最单纯的好奇心,打开了华华的手机.哇,她看到了一片的QQ推荐好友,似乎华华还 ...
- Cayley 定理与扩展 Cayley 定理
Cayley 定理 节点个数为 \(n\) 的无根标号树的个数为 \(n^{n−2}\) . 这个结论在很多计数类题目中出现,要证明它首先需要了解 \(\text{Prufer}\) 序列的相关内容. ...
- cmd中常用的dos命令
在电脑中除了我们常见的图形界面之外,图形页面的操作相信都会.那么还有在cmd执行的一些dos命令,可以简单记一下,方便日后复习所用 首先打开cmd窗口,windows+R,然后在对话框输入cmd,进入 ...
- 面试突击62:group by 有哪些注意事项?
注意:本文以下内容基于 MySQL 5.7 InnoDB 数据库引擎. 1.group by 后面不能加 where 在 MySQL 中,所有的 SQL 查询语法要遵循以下语法顺序: select f ...
- 强化学习-学习笔记5 | AlphaGo
本文不是论文阅读笔记,只是一个学习笔记,重在理解,在严谨程度上可能稍差. AlphaGo 论文指路: Mastering the game of Go with deep neural network ...
- PTA(BasicLevel)-1094 谷歌的招聘
一.问题定义 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘.内容超级简单,就是一个以 .com 结尾的网址, 而前面的网址是一个 10 位素数,这个素数 ...
- shell脚本函数及数组
函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...
- PostgreSQL下的SQL Shell(psql)工具
首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485130&idx=1 ...
- Solution -「HNOI」EVACUATE
Sol. 可以发现人的移动除了不能穿墙以外没有别的限制.也就是说人的移动多半不是解题的突破口. 接下来会发现出口的限制很强,即出口每个时刻只能允许一个人出去. 每个时刻? 不难想到对于每一个时刻每一个 ...