2301_76832684 2025-04-07 21:44 采纳率: 0%
浏览 19

logstash同步es数据出现问题

logstash数据遇到了问题,数据抓取失败了,抓到的数据是空的,不知道怎么解决,希望得到解答,感谢。mysql数据库对应的表是数据库myblog2下的cmsblog,id是int类型。

要抓取到es的是这几个字段

img

这是sql文件的语句,在Navicat验证是可以查到数据的:

SELECT id,title,content,blog_desc from cms_blog where type='1'

这是mysql-es.config的:

input {
    stdin {
    }
    jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://127.0.0.1:3306/myblog2?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "123456"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
      # 执行 sql 语句文件
      statement_filepath => "D:\soft\elasticsearch-7.6.1-windows-x86_64\elasticsearch-7.6.1\logstash-7.6.2\jdbc.sql"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
    }
}

output {
    elasticsearch {
        hosts => ["127.0.0.1:9201"]
        index => "cmsblog"
        # 文档_id,%{goods_id}意思是取查询出来的goods_id的值,并将其映射到shop的_id字段中
        # 文档_id,%{goodsId}如果是别名,意思是取查询出来的goodsId的值,并将其映射到shop的_id字段中
        #document_id => "%{id}"
    #document_id => "%{id}"
     manage_template => false
    }
    stdout {
        codec => json_lines
    #codec => rubydebug  
    }
}


想后端发起请求,得到的数据是空的

img

后台打印出来的日志,拿到的数据为空
Repeatable - 开始处理请求: /es/blogs
调用了获取博客方法[]
Repeatable - 急速处理请求: /es/blogs
jwtFilter - 请求处理完毕: /es/blogs
20:55:19.900 [http-nio-8080-exec-13] DEBUG o.s.s.w.c.SecurityContextPersistenceFilter - [doFilter,118] - Cleared SecurityContextHolder to complete request

img

img

后面我发现logstack后台有这个报错:

img

我就修改了配置文件:

img

再次发起请求后:
logstack后台还是这个错,

img

img

img

Document.java:

@Data
@Document(indexName = "cmsblog",shards = 3,replicas = 0,createIndex = false)
public class BlogDocument {
    // 主键ID(数据库)
    @Id
//    @Field(type = FieldType.Long)
    private Integer id;

    // 内容核心字段(使用 ik 分词)
    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String title;

    @Field(type = FieldType.Text, analyzer = "ik_max_word", searchAnalyzer = "ik_smart")
    private String content;

    // 辅助信息字段
    @Field(name = "blog_desc",type = FieldType.Text, analyzer = "ik_max_word")
    private String blogDesc;    // 简介

}


**Controller **:

img


对应的Service :

img

看下来好像是logstack抓取出来的id是一段字符串,类型好像出了问题。

img

img

  • 写回答

2条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-04-07 21:50
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析
      - 首先要确定数据抓取失败且抓到为空的原因。这可能涉及到多个方面,比如Logstash与MySQL的连接配置是否正确、SQL查询语句是否能获取到预期的数据、Logstash与Elasticsearch的连接和数据传输配置是否正确等。
    2. 解决方案
      - 检查MySQL连接配置
      • 在Logstash的配置文件中,MySQL输入插件部分,确保jdbc_connection_stringjdbc_userjdbc_password等参数正确。例如:
    input {
        jdbc {
            jdbc_connection_string => "jdbc:mysql://localhost:3306/myblog2"
            jdbc_user => "your_username"
            jdbc_password => "your_password"
            statement => "SELECT * FROM cmsblog"
        }
    }
    
    • 检查SQL查询语句
      • 上述示例中的statement字段指定了查询语句。确保查询语句能正确获取cmsblog表中的数据。如果表结构复杂,可能需要调整查询语句,比如只查询特定字段或者添加条件等。例如:
    statement => "SELECT id, title, content FROM cmsblog WHERE some_condition"
    
    • 检查Elasticsearch输出配置
      • 在Logstash配置文件的输出部分,确保Elasticsearch输出插件的配置正确。例如:
    output {
        elasticsearch {
            hosts => ["localhost:9200"]
            index => "myblog2_cmsblog"
        }
    }
    
    • 查看Logstash日志
      • 运行Logstash时,查看其日志文件(默认在logstash/logs目录下)。日志中会记录连接MySQL和Elasticsearch的详细信息,以及查询执行情况等。通过日志可以判断是哪个环节出现了错误,比如连接被拒绝、查询语法错误等。
        3. 多种解决方案的优缺点
    • 逐一排查配置参数
      • 优点:全面且细致,能准确找到每个配置环节可能出现的问题。
      • 缺点:需要对每个配置项都进行仔细检查,比较耗时,如果配置文件复杂,可能会遗漏一些细节。
    • 先简化配置测试
      • 优点:快速定位问题所在,如果是简单的连接或查询问题,能较快发现。
      • 缺点:可能无法完全模拟复杂的生产环境,对于一些依赖复杂配置的问题可能无法检测到。
        4. 总结
    • 解决Logstash同步数据为空的问题,关键在于仔细检查MySQL连接、SQL查询以及Elasticsearch输出的配置。通过查看日志文件可以辅助定位问题,然后针对性地进行调整。可以先从简化配置开始测试,逐步排查出具体的错误原因。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月7日