阿杰,你这个需求涉及 ElasticSearch 8.4.0 + Logstash + MySQL 同步 + Kibana 可视化 + .NET Core 代码实战,我帮你整理一个完整的操作笔记,方便你以后搭建和复盘。


📘 ElasticSearch 8.4.0 + Logstash + MySQL 实时同步 + Kibana + .NET Core 笔记

一、环境准备

  • ElasticSearch:8.4.0
  • Logstash:与 ES 版本兼容
  • Kibana:与 ES 版本匹配
  • MySQL:5.7 / 8.x
  • .NET Core:6 或 7(推荐)

二、ElasticSearch 安装与配置

  1. 下载并解压:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.4.0-linux-x86_64.tar.gz tar -xvf elasticsearch-8.4.0-linux-x86_64.tar.gz cd elasticsearch-8.4.0
  2. 修改配置 config/elasticsearch.ymlnetwork.host: 0.0.0.0 http.port: 9200 discovery.type: single-node xpack.security.enabled: false # 开发环境禁用安全认证
  3. 启动:./bin/elasticsearch 访问 http://localhost:9200,看到 ES 版本号即成功。

三、Logstash 配置(MySQL -> ElasticSearch 实时同步)

  1. 安装 Logstash 并进入 config 目录。
  2. 编辑配置 mysql-to-es.confinput { jdbc { jdbc_driver_library => "/usr/share/logstash/mysql-connector-java-8.0.30.jar" jdbc_driver_class => "com.mysql.cj.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/demo_db?serverTimezone=UTC&useSSL=false" jdbc_user => "root" jdbc_password => "123456" schedule => "* * * * *" # 每分钟执行一次 statement => "SELECT id, name, created_at, updated_at FROM users WHERE updated_at > :sql_last_value" use_column_value => true tracking_column => "updated_at" clean_run => false last_run_metadata_path => "/usr/share/logstash/.logstash_jdbc_last_run" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "users_index" document_id => "%{id}" } stdout { codec => json_lines } }
  3. 启动 Logstash:./bin/logstash -f mysql-to-es.conf ✅ MySQL 中的 users 表会实时同步到 ES 的 users_index 索引。

四、Kibana 可视化

  1. 启动 Kibana:./bin/kibana
  2. 访问 http://localhost:5601
  3. 在 Index Patterns 中新建 users_index,可直接在 Discover 页面看到 MySQL 数据。
  4. 在 Dashboard 里可视化展示(柱状图、折线图、饼图等)。

五、.NET Core 接入 ElasticSearch

安装依赖:

dotnet add package NEST --version 7.17.5

代码示例(增删改查)

using Nest;

var settings = new ConnectionSettings(new Uri("http://localhost:9200"))
    .DefaultIndex("users_index");

var client = new ElasticClient(settings);

// 插入数据
var user = new { id = 1, name = "阿杰", created_at = DateTime.Now };
var indexResponse = client.IndexDocument(user);

// 查询数据
var searchResponse = client.Search<dynamic>(s => s
    .Query(q => q.Match(m => m.Field("name").Query("阿杰")))
);

foreach (var hit in searchResponse.Hits)
{
    Console.WriteLine(hit.Source);
}

// 删除数据
var deleteResponse = client.Delete<dynamic>(1, d => d.Index("users_index"));


六、总结

  • ElasticSearch:存储和搜索数据
  • Logstash:实时 ETL,将 MySQL 数据推送到 ES
  • Kibana:可视化分析
  • .NET Core:作为业务服务调用 ES

这样一套流程就是 MySQL → Logstash → ElasticSearch → Kibana → .NET Core 调用 的闭环。