阿杰,你这个需求涉及 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 安装与配置
- 下载并解压:
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
- 修改配置
config/elasticsearch.yml
:network.host: 0.0.0.0 http.port: 9200 discovery.type: single-node xpack.security.enabled: false # 开发环境禁用安全认证
- 启动:
./bin/elasticsearch
访问http://localhost:9200
,看到 ES 版本号即成功。
三、Logstash 配置(MySQL -> ElasticSearch 实时同步)
- 安装 Logstash 并进入
config
目录。 - 编辑配置
mysql-to-es.conf
:input { 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 } }
- 启动 Logstash:
./bin/logstash -f mysql-to-es.conf
✅ MySQL 中的users
表会实时同步到 ES 的users_index
索引。
四、Kibana 可视化
- 启动 Kibana:
./bin/kibana
- 访问
http://localhost:5601
- 在 Index Patterns 中新建
users_index
,可直接在 Discover 页面看到 MySQL 数据。 - 在 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 调用 的闭环。
发表回复