写点什么

大数据 -186 Logstash JDBC vs Syslog Input:原理、场景对比与可复用配置(基于 Logstash 7.3.0)

作者:武子康
  • 2025-12-17
    山东
  • 本文字数:3593 字

    阅读完需:约 12 分钟

大数据-186 Logstash JDBC vs Syslog Input:原理、场景对比与可复用配置(基于 Logstash 7.3.0)

TL;DR

  • 场景:从 MySQL 增量同步结构化数据到 Logstash;同时集中采集 Linux/设备 Syslog 日志并解析。

  • 结论:JDBC 适合“按表/按 SQL 拉取+增量位点”;Syslog 适合“网络日志流入+Grok/Date 解析”,两者瓶颈分别在 DB/查询与网络/解析。

  • 产出:两套可跑通的 Logstash 7.3.0 配置(jdbc.conf、syslog.conf)+ 增量追踪与 rsyslog 转发链路。


版本矩阵


基本介绍

Logstash 的 JDBC 和 Syslog 是两种功能各异的 Input 插件,它们分别针对不同的数据源进行优化设计,在数据处理流程中扮演着关键角色。下面将详细阐述它们的技术特性、应用场景及典型配置:

JDBC 插件深入解析

  1. 核心功能

  2. 支持主流关系型数据库:MySQL (5.7+)、PostgreSQL (9.6+)、Oracle (12c+)、SQL Server (2016+)等

  3. 基于 JDBC 4.2 规范实现,使用数据库官方提供的 JDBC 驱动

  4. 支持增量数据采集:通过 sql_last_value 参数记录最后处理位置

  5. 典型应用场景

  6. 数据仓库的 ETL 流程

  7. 业务系统数据库变更监控

  8. 将传统数据库数据导入 Elasticsearch 集群

  9. 示例:电商订单数据实时同步


     SELECT * FROM orders WHERE update_time > :sql_last_value
复制代码


  1. 关键配置参数


   input {     jdbc {       jdbc_driver_library => "/path/to/mysql-connector-java-8.0.28.jar"       jdbc_driver_class => "com.mysql.jdbc.Driver"       jdbc_connection_string => "jdbc:mysql://localhost:3306/ecommerce"       jdbc_user => "logstash"       jdbc_password => "securepassword"       schedule => "* * * * *"  # 每分钟执行       statement => "SELECT * FROM products WHERE last_modified > :sql_last_value"       use_column_value => true       tracking_column => "last_modified"     }   }
复制代码

Syslog 插件技术细节

  1. 协议支持

  2. RFC3164 (旧版 BSD syslog)

  3. RFC5424 (新版结构化 syslog)

  4. 支持 TCP/UDP 两种传输协议

  5. 网络配置选项

  6. 端口绑定:默认 514 (UDP) / 6514 (TCP)

  7. 支持 TLS 加密传输

  8. 可配置多个监听端口实现多租户隔离

  9. 典型部署模式

  10. 网络设备日志收集(路由器/交换机)

  11. Linux 系统日志集中管理

  12. 容器环境日志采集(Docker syslog 驱动)

  13. 示例:防火墙日志处理


     input {       syslog {         port => 5514         type => "firewall"         syslog_field => "syslog_message"       }     }
复制代码


  1. 高级功能

  2. 支持自定义消息解析模式

  3. 可配置时区转换

  4. 提供消息优先级(PRI)解析


两种插件在性能调优方面也存在差异:JDBC 插件需要关注数据库连接池配置和批处理大小,而 Syslog 插件则需要优化网络缓冲区设置和并发处理能力。实际部署时,建议根据数据量级和延迟要求进行针对性调优。

JDBC Input 插件

JDBC 插件用于从关系型数据库中提取数据,特别适用于将结构化的业务数据导入到 ELK(Elasticsearch, Logstash, Kibana)堆栈中。它支持定时调度和增量提取,适合数据同步和 ETL 场景。


主要功能:


  • 数据库连接:使用 JDBC 驱动来连接各种数据库(例如 MySQL、PostgreSQL、Oracle、SQL Server 等)。

  • SQL 查询:允许用户通过 SQL 查询语句选择数据,支持复杂的查询条件。

  • 增量提取:可以配置“追踪列”(tracking column),基于某一列(如自增 ID 或时间戳)实现增量数据拉取,避免重复导入。

  • 定时调度:可以设置定时任务,定期查询和同步数据库的数据。

  • 错误重试机制:可以处理连接错误并自动重试,确保数据采集的稳定性。

Syslog Input 插件

Syslog 插件用于接收基于 Syslog 协议传输的日志数据。Syslog 是一种广泛使用的日志协议,特别是在网络设备和 Linux/Unix 操作系统中。Logstash 的 Syslog 插件能够监听特定的端口,接收和解析这些日志。


主要功能:


  • 协议支持:支持 Syslog 协议,包括 RFC 3164 和 RFC 5424 格式的日志。

  • 多种传输方式:支持通过 TCP 和 UDP 协议接收日志,适应不同的传输需求。

  • 日志解析:自动解析 Syslog 消息的头部字段,例如时间戳、主机名、程序名等。

  • 网络监听:可以通过监听指定的 IP 和端口,持续接收并处理来自网络的 Syslog 日志。

JDBC 插件

JDBC 插件可以采集某张数据库表当中的数据到 Logstash 当中来

准备数据

CREATE TABLE `user` (  `id` bigint(20) NOT NULL,  `user_name` varchar(25) DEFAULT NULL,  `gender` varchar(20) DEFAULT NULL,  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  PRIMARY KEY(`id`)) ENGINE=InnoDB DEFAULT CHRASET=utf8;
INSERT INTO `user` VALUES(1, 'zhangsan', 'male', '2024-08-16 00:00:00');INSERT INTO `user` VALUES(2, 'lisi', 'female', '2024-08-16 00:00:00');
复制代码


目前我们的 MySQL 服务器是在 h122 节点上的(之前给 Hive 和 HBase 等业务使用的),现在我们需要到 h122 数据库中,执行上述的 SQL 指令。我这里使用 Navicat 执行, 执行结果如下图所示:


编写配置

cd /opt/servers/logstash-7.3.0/configvim jdbc.conf
复制代码


写入如下的内容(这里注意些自己的环境,我的环境和你的不一样):


input {  jdbc {    jdbc_driver_library => "/opt/servers/mysql-connector-java-8.0.19.jar"    jdbc_driver_class => "com.mysql.jdbc.Driver"    jdbc_connection_string => "jdbc:mysql://h122.wzk.icu:3306/es-test"    jdbc_user => "hive"    jdbc_password => "hive@wzk.icu"    use_column_value => "true"    clean_run => "false"    record_last_run =>"true"    tracking_column => "id"    schedule => "* * * * *"    last_run_metadata_path => "/opt/servers/es/.Logstash_user_jdbc_last_run"    statement => "SELECT * from user where id > :sql_last_value;"  }}
output{ stdout{ codec=>rubydebug }}
复制代码

检查配置

cd /opt/servers/logstash-7.3.0bin/logstash -f /opt/servers/logstash-7.3.0/config/jdbc.conf -t
复制代码


执行结果如下图所示:


启动服务

cd /opt/servers/logstash-7.3.0bin/logstash -f /opt/servers/logstash-7.3.0/config/jdbc.conf
复制代码


启动结果如下图所示:



可以看到获取到了对应的数据:


发送数据

现在向数据库中写入数据,就可以发现 Logstash 监听到了:


INSERT INTO `user` VALUES(3, 'wangwu', 'female', '2024-08-16 00:00:00');
复制代码


对应的 Logstash 的变化:


syslog 插件

syslog 机制负责记录内核和应用程序产生的日志信息,管理员可以通过查看日志记录,来掌握系统状况,默认系统已经安装了 rsyslog,直接启动即可。

编写配置

创建新脚本,syslog.conf


cd /opt/servers/logstash-7.3.0/configvim syslog.conf
复制代码


写入如下的内容:


input {  tcp {    port => 6789    type => "syslog"  }  udp {    port => 6789    type => "syslog"  }}
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => { "received_at" => "%{@timestamp}" "received_from" => "%{host}" } } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } }}
output { stdout { codec => rubydebug }}
复制代码


写入的内容如下图所示:


检查配置

cd /opt/servers/logstash-7.3.0bin/logstash -f /opt/servers/logstash-7.3.0/config/syslog.conf -t
复制代码


执行结果如下图所示:


启动服务

cd /opt/servers/logstash-7.3.0bin/logstash -f /opt/servers/logstash-7.3.0/config/syslog.conf
复制代码


执行结果如下图所示:


发送数据

修改系统日志配置文件


vim /etc/rsyslog.conf
复制代码


添加一行配置:


*.* @@h121.wzk.icu:6789
复制代码


写入的效果如下图所示:



重启系统日志服务


systemctl restart rsyslog
复制代码


查看数据,可以看到如下的效果:


错误速查

其他系列

🚀 AI 篇持续更新中(长期更新)

AI 炼丹日志-29 - 字节跳动 DeerFlow 深度研究框斜体样式架 私有部署 测试上手 架构研究,持续打造实用 AI 工具指南!AI 研究-132 Java 生态前沿 2025:Spring、Quarkus、GraalVM、CRaC 与云原生落地🔗 AI模块直达链接

💻 Java 篇持续更新中(长期更新)

Java-196 消息队列选型:RabbitMQ vs RocketMQ vs KafkaMyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务已完结,Dubbo 已完结,MySQL 已完结,MongoDB 已完结,Neo4j 已完结,FastDFS 已完结,OSS 已完结,GuavaCache 已完结,EVCache 已完结,RabbitMQ 正在更新... 深入浅出助你打牢基础!🔗 Java模块直达链接

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解🔗 大数据模块直达链接

发布于: 刚刚阅读数: 4
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-186 Logstash JDBC vs Syslog Input:原理、场景对比与可复用配置(基于 Logstash 7.3.0)_大数据_武子康_InfoQ写作社区