elastic8.4.0搜索+logstash-mysql实时同步+kibana可视化操作+netcore代码笔记

news/2025/2/6 1:08:59/文章来源:https://www.cnblogs.com/morec/p/18586025

做全文搜索,es比较好用,安装可能有点费时费力。mysql安装就不说了。主要是elastic8.4.0+kibana8.4.0+logstash-8.16.1,可视化操作及少量netcore查询代码。

安装elastic8.4.0+kibana8.4.0使用docker-desktop,logstash-8.16.1是线程解压执行文件。

  • 1. docker-compose.yml 如下: 首先使用docker network创建一个es-net内部通讯网络,这样kibana连接es可以通过容器名ELASTICSEARCH_HOSTS=http://elasticsearch:9200,此作为单机测试使用单机的es.
services:elasticsearch:container_name: elasticsearchimage: docker.elastic.co/elasticsearch/elasticsearch:8.4.0environment:- discovery.type=single-nodeulimits:memlock:soft: -1hard: -1cap_add:- IPC_LOCKports:- "9200:9200"networks:- es-net kibana:container_name: kibanaimage: docker.elastic.co/kibana/kibana:8.4.0environment:- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    ports:- "5601:5601"networks:- es-netnetworks:es-net:driver: bridge

作为es的8以上版本是有账号密码和crt证书的,需要做如下配置:

安装好es后默认给一个elastic账号,需要重置一下密码,进入es容器执行重置密码命令,会给你一个密码。

docker exec  -it -u root elasticsearch /bin/bash
bin/elasticsearch-reset-password -u elastic

 

这里登录的其实是https带证书的,但是kibana使用的是http的,所以在容器内部,config/elasticsearch.yml中需要把下面的两个参数置为false ,生产环境不建议这么操作。

 因为es带账号密码,所以kibana连接es也需要账号密码信息,但是默认的elastic是超级管理员,kibana默认是不支持的,需要自己新建账号。但是es默认是给了账号的,用他的就行。自己新建es账号给一个超级管理员角色依然没有重建所应权限,导致kibana起不来,用kibana_system就行。

进入es容器内部给kibana_system重置一个密码,用下面的命令在内部调用也行,我设置的elastic和kibana_system的密码一样,方便使用。

curl -u elastic:DiVnR2F6OGYmP+Ms+n2o -X POST "http://localhost:9200/_security/user/kibana_system/_password" -H 'Content-Type: application/json' -d'
{"password": "DiVnR2F6OGYmP+Ms+n2o"
}
'

  •  2. 然后在kibana容器中,加上账号密码信息即可,重启。还有最后一行加上i18n.locale: zh-CN  ,改变ui为中文。

 然后通过开发工具就可以做es的调试了,这里注意下需要中文分词的可以去 https://github.com/infinilabs/analysis-ik/releases 下载对应版本8.4.0的中文分词器 ,改个名放到es容器内plugins中去。也可以自定义分词文件丢进去

 

  •  3. 下面就是logstash安装跟mysql的同步了,测试数据如下:

 

 首先去logstash官网下载对应的包,我选的版本是8.16.1,目录如下是可以通过控制台执行的。

 这里只需要配置好mysql-connector的驱动和链接信息即可。

 

 jdbc.conf文件内容如下:

input {stdin {}jdbc {type => "jdbc"# 数据库连接地址jdbc_connection_string => "jdbc:mysql://192.168.200.2:3306/bbs?characterEncoding=UTF-8&autoReconnect=true"# 数据库连接账号密码;jdbc_user => "admin"jdbc_password => "这是密码"# MySQL依赖包路径;jdbc_driver_library => "D:\software\logstash-8.16.1\mysql\mysql-connector-j-8.0.32.jar"# the name of the driver class for mysqljdbc_driver_class => "com.mysql.jdbc.Driver"# 数据库重连尝试次数connection_retry_attempts => "3"# 判断数据库连接是否可用,默认false不开启jdbc_validate_connection => "true"# 数据库连接可用校验超时时间,默认3600Sjdbc_validation_timeout => "3600"# 开启分页查询(默认false不开启);jdbc_paging_enabled => "true"# 单次分页查询条数(默认100000,若字段较多且更新频率较高,建议调低此值);jdbc_page_size => "500"# statement为查询数据sql,如果sql较复杂,建议配通过statement_filepath配置sql文件的存放路径;# sql_last_value为内置的变量,存放上次查询结果中最后一条数据tracking_column的值,此处即为ModifyTime;# statement_filepath => "mysql/jdbc.sql"statement => "SELECT    ArticleID,UserID,ArticleTitle,ArticleContent,ImageAddress,StandPoint,PublishTime,`Status`,Likes,    Shares,Comments,Reports,    Sort,PublishingMode,SourceType,Reply,IsTop,TopEndTime,Hot,EditUserId,CreatedTime,EditTime,UserType,UserNickname,ForbiddenState,PublishDateTime,TopArea,SubscribeType,CollectionCount,Articletype,NewsID,CommentUserCount,TopStartTime,`View`,ViewDuration,Forwardings,ForwardingFId,Freshness,Shelf_Reason,AuditTime FROM bbs_articles" # 是否将字段名转换为小写,默认true(如果有数据序列化、反序列化需求,建议改为false);lowercase_column_names => false# Value can be any of: fatal,error,warn,info,debug,默认info;sql_log_level => warn## 是否记录上次执行结果,true表示会将上次执行结果的tracking_column字段的值保存到last_run_metadata_path指定的文件中;record_last_run => true# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_column为timestamp的值;use_column_value => true# 需要记录的字段,用于增量同步,需是数据库字段tracking_column => "PublishTime"# Value can be any of: numeric,timestamp,Default value is "numeric"tracking_column_type => timestamp# record_last_run上次数据存放位置;last_run_metadata_path => "mysql/last_id.txt"# 是否清除last_run_metadata_path的记录,需要增量同步时此字段必须为false;clean_run => false## 同步频率(分 时 天 月 年),默认每分钟同步一次;schedule => "* * * * *"}
}filter {json {source => "message"remove_field => ["message"]}# convert 字段类型转换,将字段TotalMoney数据类型改为float;mutate {convert => {#    "TotalMoney" => "float"}}
}
output {elasticsearch {# host => "127.0.0.1"# port => "9200"# 配置ES集群地址# hosts => ["192.168.1.1:9200", "192.168.1.2:9200", "192.168.1.3:9200"]hosts => ["127.0.0.1:9200"]user => "elastic"password => "DiVnR2F6OGYmP+Ms+n2o"ssl => false# 索引名字,必须小写index => "bbs_act"# 数据唯一索引(建议使用数据库KeyID)document_id => "%{ArticleID}"}stdout {codec => json_lines}
}

配置文成后执行该命令,数据实时同步开始

bin\logstash.bat -f mysql\jdbc.conf

 可以通过kibana的discover查看数据,也可以通过开发工具查询,elk日志就是这么玩。

 

  •  4. 下面就是代码,这里的实体没给全,注意实体需要给Text的Name属性,否则会解析不到数据的:
 public class ArticleEsContext : EsBase<ArticleDto>{public ArticleEsContext(EsConfig esConfig) : base(esConfig){}public override string IndexName => "bbs_act";public async Task<List<ArticleDto>> GetArticles(ArticleParameter parameter){var client = _esConfig.GetClient(IndexName);// 计算分页的起始位置var from = (parameter.PageNumber - 1) * parameter.PageSize;var searchResponse = await client.SearchAsync<ArticleDto>(s => s.Index(IndexName).Query(q => q.Bool(b => b.Should(sh => sh.Match(m => m.Field(f => f.ArticleTitle)  // 查询 ArticleTitle
                             .Query(parameter.KeyWords).Fuzziness(Fuzziness.Auto)  // 启用模糊查询
                         ),sh => sh.Match(m => m.Field(f => f.ArticleContent)  // 查询 ArticleContent
                             .Query(parameter.KeyWords).Fuzziness(Fuzziness.Auto)  // 启用模糊查询
                         )).MinimumShouldMatch(1)  // 至少一个条件必须匹配
                 )).From(from)  // 设置分页的起始位置.Size(parameter.PageSize)  // 设置每页大小
         );if (!searchResponse.IsValid){Console.WriteLine(searchResponse.DebugInformation);return new List<ArticleDto>();}return searchResponse.Documents.ToList();}}public class ArticleDto{[Text(Name = "ArticleID")]public int ArticleId { get; set; }[Text(Name = "ArticleTitle")]public string ArticleTitle { get; set; }[Text(Name = "ArticleContent")]public string ArticleContent { get; set; }[Date(Name = "CreatedTime")]public DateTime CreatedTime { get; set; }}

代码调用结果如下:

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846636.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于双JWT的流程记录

鉴权问题一直是个经典问题,从最初的cookie-session方案,到token方案,再到使用签名保证准确性的JWT方案一直到OAuth2.0,这里我在项目中对于原来的传统授权方式使用双JWT进行改造 为什么要使用双token 由于token的过期时间在token生成后就难以更改,所有token的过期时长不宜设置过…

一个有效的策略使您无法连接到此打印机列队里

你的计算机上有一个有效的策略使您无法连接到此打印机列队里,请联系管理员,无法连接打印机。 错误代码,000002 能共享打印机,能访问共享打印机。但在客户端访问出现该问题,无法连接。 发现是共享的打印机服务器未在域里,需要加域,加入域控后该问题解决。

基于 .NET 开发的多功能流媒体管理控制平台

前言 今天大姚给大家分享一个基于 .NET 开发且开源(MIT License)的多功能流媒体管理控制平台:AKStream。 项目介绍 AKStream是一个基于.NET开发且开源(MIT License)的、功能全面的流媒体管理控制平台,集成了GB28181、RTSP、RTMP、HTTP等设备的推拉流控制、PTZ控制、音视频…

sql注入-数据库表基本操作

一、数据库 linux下登录: mysql -u root -p查看数据库: show databases;可以在phpmyadmin面板点击SQL进行操作1. 增加/创建 创建xxx数据库,并使用utf-8编码 create database xxx charset utf8;2. 删除 删除xxx数据库 drop database xxx;3. 选择进入数据库 进入xxx数据库 use…

elastic8.4.0搜索+logstash=mysql实时同步+kibana可视化操作+netcore代码笔记

做全文搜索,es比较好用,安装可能有点费时费力。mysql安装就不说了。主要是elastic8.4.0+kibana8.4.0+logstash-8.16.1,可视化操作及少了netcore查询代码。 安装elastic8.4.0+kibana8.4.0使用docker-desktop,logstash-8.16.1是线程解压执行文件。1. docker-compose.yml 如下…

达梦网络通信异常-断开的管道(write failed)报错排查及解决过程

应用连接数据库偶发性报网络通信异常,报错截图如下:查看驱动版本,应用所用的驱动和数据库当前版本匹配 数据库版本 网络和数据库日志方面也没有问题,连接池超时设置调整之后还是报错 应用报错日志有断开的管道 根据网上参考类似错误。应该是长时间没有刷新页面导致数据库断…

【日记】论韭菜是怎么养成的,指我自己(656 字)

正文今天被一种盛大的焦虑裹挟。可能由于现在视野越来越广了,原来的盲区也有了或多或少的了解,总觉得自己现在非常菜。今天上班还听到同事们在炒股,身后的同事说她这两天赚了半个月的工资,大概快四千块钱。我没说话,侧着耳朵听。有同事问她怎么选的,她说听一个炒股高人选…

使用自定义 JsonConverter 解决 long 类型在前端的精度问题

问题 Javascript 的 number 类型存在精度限制,浏览器反序列化 JSON 时,无法完整保留 long 类型的精度。在 JSON 序列化时将 long 转换为 string 进行传递就可以保留精度。在 ASP.NET Core 中,可以创建一个 自定义 JsonConverter 来达到这一目的。 实现 long 和 string 转换的…

『玩转Streamlit』--表单Form

在Streamlit中,Form组件是一种特殊的UI元素,允许用户输入数据而不立即触发应用的重新运行。 这对于创建需要用户输入多个参数后再进行处理的交互式表单非常有用。 1. 概要 Form组件的主要作用是在一个表单内集中处理多个用户输入,使得数据收集和验证更加高效和直观。 通过Fo…

netboot ipxe 源码

来自: https://www.egg0.com/show/19831.html最近,正在学习 iPXE 源码,于是开始各种 Google 查找 iPXE 的资料进行学习。以下就是学习过程中一些感觉比较重要的点,特此记录,以备后续查阅。 起源上世纪 90 年代初,网卡开始在其扩展卡上包含启动 ROM,每个扩展卡都遵循自己…

Expert电子实验室--嵌入式多功能调试器Exlink硬件分析

哈哈,容我介绍一下,如果大家对电子感兴趣,可以看一下下面的图片,会经常更新优秀的原创文章。再次感谢每一个努力的电子爱好者。1 前言 开源链接:Exlink最好用的嵌入式多功能调试器 大家好呀,在浏览网站的时候,突然看到这样的一个作品,瞬间眼前一亮。这个项目是Expert电…

docker安装SqlServer2019

使用docker compose部署 资源清单文件 services:sqlserver-2019:restart: alwayscontainer_name: sqlserverimage: mcr.microsoft.com/mssql/server:2019-latestuser: root#端口映射ports:- 1433:1433volumes:- ./mssql:/var/opt/mssql#环境变量environment:- ACCEPT_EULA=Y#SA…