鱼弦:内容合伙人、新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)

【教你通透ELK】Logstash 数据收集和转换_jenkins

 

Logstash是一款用于数据采集、转换和传输的开源工具,其广泛应用于各种场景,例如:

  1. 日志处理和分析:Logstash可以收集、解析和过滤各种应用和系统产生的日志数据,可用于日志监控、报表分析、故障排查等。例如,可以使用Logstash收集服务器日志、网络设备日志、应用程序日志等,并将其发送到Elasticsearch中进行搜索和分析。
  2. 数据采集和ETL:Logstash可以从多种数据源中采集数据,并进行转换和清洗,可用于数据仓库、数据分析、BI等。例如,可以使用Logstash从数据库中提取数据、从文件中读取数据、从API中获取数据等,并将其转换为统一的格式和结构,以便进行后续处理。
  3. 数据管道和流处理:Logstash可以将数据从一个系统传输到另一个系统,支持实时流式处理和批处理。例如,可以使用Logstash将数据从Kafka中读取并发送到Elasticsearch中进行搜索和分析,或者从Elasticsearch中读取数据并将其发送到MySQL数据库中进行存储。

以下是一些有关Logstash数据收集和转换的文献材料链接:

下面是一个简单的Logstash示例实现,演示如何使用Logstash从MySQL数据库中读取数据,进行简单的数据转换并输出到Elasticsearch中:

  1. 准备一个MySQL数据库和一个表,可以使用以下SQL语句创建:
CREATE DATABASE test_db;

USE test_db;

CREATE TABLE test_table (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(50),
  age INT,
  email VARCHAR(50)
);

INSERT INTO test_table (name, age, email) VALUES
  ('John', 25, 'john@example.com'),
  ('Mary', 30, 'mary@example.com'),
  ('Peter', 40, 'peter@example.com');

这个表包含了一些简单的数据,包括姓名、年龄和电子邮件地址等字段。

  1. 创建一个名为logstash.conf的配置文件,内容如下:
input {
  jdbc {
    jdbc_connection_string => "jdbc:mysql://localhost:3306/test_db"
    jdbc_user => "root"
    jdbc_password => "password"
    jdbc_driver_library => "/path/to/mysql-connector-java-8.0.26.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    statement => "SELECT * FROM test_table"
    jdbc_paging_enabled => true
    jdbc_page_size => 1000
  }
}

filter {
  mutate {
    remove_field => ["@version", "host", "message"]
    convert => { "age" => "integer" }
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "test_index"
  }
}

这个配置文件指定了一个jdbc输入插件,一个mutate过滤器插件和一个Elasticsearch输出插件。它将从MySQL数据库中读取test_table表的所有数据,使用mutate过滤器将age字段转换为整数类型,并将处理后的数据输出到Elasticsearch中。

需要注意的是,这里需要将MySQL JDBC驱动程序的路径和名称指定为jdbc_driver_library参数的值。

  1. 启动Logstash,指定配置文件:
bin/logstash -f logstash.conf

这将启动Logstash并加载logstash.conf配置文件。

  1. 在Elasticsearch中查看输出结果:
GET /test_index/_search
{
  "query": {
    "match_all": {}
  }
}

这个查询将返回所有在test_index索引中保存的数据,可以看到每个字段的值已经被正确解析和转换。