首先记下这个笔记,Logstash工具导入sqlserver数据到elasticSearch。

因为logstash使用java写的,我本地开发是win11,所以javade jdk必须要安装。具体安装不介绍了,就是网上下个java8,不要去官网要账号什么的,不是java开发不太折腾,目前只用java8,记得JAVA_HOME配置一下环境变量。

java version "1.8.0_66"

Java(TM) SE Runtime Environment (build 1.8.0_66-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b18, mixed mode)

从sqlserver拉取数据需要用到sqlserver 的jdbc驱动,我这里是官网下载的sqljdbc_6.2.2.1_enu,没用最新版本,个人认为java8不太合适什么都最新的。

logstash使用的是7.0.0的版本,这里遇到几个问题。

换了几个版本,7.0一下的起不来,8,0以上的也是起不来。

1.存放的目录不能有空格,2.(我的坑)不该去github上下载版本,发现跑不起来。3.版本8.0以上的需要java11支持。

有了这两个包(都是java的)后面就是配置了。首先我在ogstash-7.0.0\lib下面新建文件夹sqlserverdriver,去sqljdbc_6.2.2.1_enu\sqljdbc_6.2\enu文件夹下面拷贝了mssql-jdbc-6.2.2.jre8.jar文件过来

下面就是操作logstash文件夹下面config下面文件了。首先在jvm.options最下面加上权限。

-Djava.library.path=E:\sqljdbc_6.2.2.1_enu\sqljdbc_6.2\enu\auth\x64

在config文件夹下面新建文件sqlserver_update.conf文件,拷贝下面的内容,每行基本有注释就详不说。

  1. input {
  2. jdbc {
  3. jdbc_driver_library=>"E:\sqljdbc_6.2.2.1_enu\sqljdbc_6.2\enu/mssql-jdbc-6.2.2.jre8.jar"
  4. jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
  5. jdbc_connection_string => "jdbc:sqlserver://119.8.41.84:1433;databaseName=Reptile.NewsLetter"
  6. jdbc_user => "sa"
  7. jdbc_password => "IDCmC@0755@971"
  8. #分页且最大5万次
  9. jdbc_paging_enabled => "true"
  10. jdbc_page_size => "50000"
  11. #时区按照东八
  12. jdbc_default_timezone =>"Asia/Shanghai"
  13. last_run_metadata_path => "E:\logstash-7.0.0\config\last_value_meta.txt"
  14. #启用追踪,则需要指定tracking_column,默认是timestamp()
  15. use_column_value => true
  16. # 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是主键
  17. tracking_column => id
  18. #追踪字段的类型,目前只有数字(numeric)和时间类型(timestamp),默认是数字类型()
  19. tracking_column_type => numeric
  20. #是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中
  21. record_last_run => true
  22. #statement_filepath => "E:\logstash-7.0.0\config\update.sql" sql可放到独立文件里面去
  23. #表里有时间也有时间戳 都可用
  24. statement => "SELECT * FROM [Reptile.NewsLetter].[dbo].[LivesItems] where id > :sql_last_value "
  25. schedule => "* * * * *"
  26. #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录
  27. clean_run => false
  28. #是否将 column 名称转小写
  29. lowercase_column_names => false
  30. }
  31. }
  32. output {
  33. elasticsearch {
  34. hosts => ["http://my.es.com:9200"]
  35. index => "nl_livesitem"
  36. user => "elastic"
  37. password => "changeme"
  38. }
  39. }

上面的sql可以单独放到一个文件,增量更新可以通过实践、时间戳、id,我这里是id。

下面就是执行运行命令的时候了

bin\logstash -f config\sqlserver_update.conf ,上面设置的执行时corn是每分钟一次。所以logstash会每分钟去增量查询同步到es。这个服务可以作为windows后台服务,自行百度。

这里es就能实时的拿到数据库的数据。java的生态实在太好了。其实我们也可以通过net来写这个同样的共嗯,无非就是定时的查数据库调用es接口的插入操作。如果公司很依赖这个的话建议还是自己写,不管是版本还是配置还是升级这些都容易踩着坑。

简单总结一下logstash同步数据的要点,首先配置好jdk驱动,其次就是配置文件的配置。一个是bin、一个是config。总归下来很简单的。

下面简单介绍下elk分布式日志中心的搭建和使用

上面的logstash同步es因为是做esde查询所以我单独部署的es系统。跟下面要介绍的elk是独立开来的,不涉及日志操作就隔离开了。

首先在虚拟机目录下面新建了一个elk文件夹。在elk文件夹下面通过wget 和github的下载链接把包下载下来,解压后就成了下面的样子。后面主要做的就是执行docker-compose up -d。github下面有详细介绍这个执行的命令和操作。这里需要踩坑就是docker和docker-compose的版本最好是最新的,太老的话执行docker-compose up -d会报一堆错误。

打开github下docker-elk的源地址

deviantony/docker-elk: The Elastic stack (ELK) powered by Docker and Compose. (github.com)

通过查看docker-compose.yml可以看到它的配置,装完后他会默认打开以下这些端口

5000: Logstash TCP input(Logstash数据的接收通道)
9200: Elasticsearch HTTP(ES的http通道)
9300: Elasticsearch TCP transport(ES的TCP通道)
5601: Kibana(UI管理界面)

打开ip:5601的古管理界面,这里用到了es商业版本,会有默认的登陆账号elastic、密码changeme 。我这里有测试过所以有产生几条数据。

下面新建net7的项目,新建配置文件Nlog.config

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. autoReload="true"
  5. internalLogLevel="Warn"
  6. internalLogFile="internal-nlog.txt">
  7.  
  8. <extensions>
  9. <add assembly="NLog.Web.AspNetCore"/>
  10. </extensions >
  11. <variable name="logDirectory" value="${basedir}\logs\"/>
  12. <!--define various log targets-->
  13. <targets>
  14. <!--write logs to file-->
  15. <!--address 填写Logstash数据的接收通道-->
  16. <target xsi:type="Network"
  17. name="elastic"
  18. keepConnection="false"
  19. address ="tcp://my.es.com:50000"
  20. layout="${longdate}|${logger}|${uppercase:${level}}|${message} ${exception}" />
  21. />
  22. <target xsi:type="Null" name="blackhole" />
  23. </targets>
  24. <rules>
  25. <!--All logs, including from Microsoft-->
  26. <!--<logger name="*" minlevel="Trace" writeTo="allfile" />-->
  27. <!--Skip Microsoft logs and so log only own logs-->
  28. <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
  29. <logger name="*" minlevel="Trace" writeTo="elastic" />
  30. </rules>
  31. </nlog>

这里i只需要配置logstash接受数据通道50000,加上Program一行代码,当然NLog.Extensions.Logging 、NLog.Web.AspNetCore连个nuget包是需要引用的。

只是测试一下是否可用,所以测试代码就这么一点。

下面就可以运行项目调用swagger的接口了。上面有配置txt输出 internalLogFile="internal-nlog.txt,会在项目中生成该文件,通过该文件可以查看是否链接logstash成功,以及写入。

生产项目中用的serilog写入到logstash,使用中很方便。

logstash对于日志量大的保存一个月两个月的日志,性能也很不错,问题排查也的很友好,特别是生产环境。

NLog不支持ILogger泛型和微软自带的兼容好像没有serilog那么完美。当然没怎么使用和研究,NLog也有可能是我还没学会怎么用。

使用Logstash工具导入sqlserver数据到elasticSearch及elk分布式日志中心的更多相关文章

  1. Logstash 6.4.3 导入 csv 数据到 ElasticSearch 6.4.3

    本文实践最新版的Logstash从csv文件导入数据到ElasticSearch. 本文目录: 1.初始化ES.Kibana.Logstash 2.安装logstash文件导入.过滤器等插件 3.配置 ...

  2. elasticsearch -- Logstash实现mysql同步数据到elasticsearch

    配置 安装插件由于这里是从mysql同步数据到elasticsearch,所以需要安装jdbc的入插件和elasticsearch的出插件:logstash-input-jdbc.logstash-o ...

  3. 如何通过 Docker 部署 Logstash 同步 Mysql 数据库数据到 ElasticSearch

    在开发过程中,我们经常会遇到对业务数据进行模糊搜索的需求,例如电商网站对于商品的搜索,以及内容网站对于内容的关键字检索等等.对于这些高级的搜索功能,显然数据库的 Like 是不合适的,通常我们采用 E ...

  4. logstash采集与清洗数据到elasticsearch案例实战

    原文地址:https://www.2cto.com/kf/201610/560348.html Logstash的使用 logstash支持把配置写入文件 xxx.conf,然后通过读取配置文件来采集 ...

  5. 利用logstash从mysql同步数据到ElasticSearch

    前面一篇已经把logstash和logstash-input-jdbc安装好了. 下面就说下具体怎么配置. 1.先在安装目录bin下面(一般都是在bin下面)新建两个文件jdbc.conf和jdbc. ...

  6. 【原创】手动导入SQLServer数据到SQLCE方法

    我找到一个工具,可以很容易把SQLServer里的数据导入到SQLCE: 工具名:Export2SqlCe.exe, 下载路径: http://exportsqlce.codeplex.com/rel ...

  7. Oracle:通过pl/sql developer工具导入excel数据

    1.在pl/sql developer中选择工具-->ODBC导入器 2.选择需要导入的EXCEL文件(CVS也可以):用户名.口令不用管,直接点“连接”,找到要导入的xls文件 3. 选择“导 ...

  8. Oracle:通过oracle sql developer工具导入excel数据

    我使用的是oracle sql developer3.1版本,以前developer2.×老版本的excel导入功能有问题. excel文件内容如下: 第一步:找到要导入的表,右键-->导入数据 ...

  9. excel 导入 sqlserver 字符串被截取为255长度解决方案

    excel表格导入sqlserver数据表中 内容被截取为255长度的字符串. 注意:excel是通过前8行(表头的首行除外)的数据类型来判断导入数据的数据格式的,例如前8行出现整数型,那么默认就用整 ...

  10. Logstash:把MySQL数据导入到Elasticsearch中

    Logstash:把MySQL数据导入到Elasticsearch中 前提条件 需要安装好Elasticsearch及Kibana. MySQL安装 根据不同的操作系统我们分别对MySQL进行安装.我 ...

随机推荐

  1. 1、在SrpingBoot的环境当中使用JSP及相关功能

    创建webapp目录 由于SpringBoot项目不建议直接访问jsp页面,但是我现在要做的事情需要去访问,那么我就需要在原有的项目基础上为访问jsp页面进行一个调整 首先在项目当中,java和res ...

  2. Cenots7 离线安装部署PostgreSQL

    1 PostgreSQL源码包下载并复制 1.1 PostgreSQL源码包下载: 访问PostgreSQL官网 选择所需版本进行下载,本次下载安装版本为v14.5 1.2 复制源码包至服务器 使用S ...

  3. 深入理解独占锁ReentrantLock类锁

    ReentrantLock介绍 [1]ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程 ...

  4. 每日算法3:随机生成五个不同整数,将数字转换为RMB格式

    随机生成五个不同整数 点击查看代码 /* 题目解析: 1.采用Math对象的random()方法, 2.将每次生成的数跟之前的数判断相等则此次生成无效i-- */ function randomNum ...

  5. Bob 的生存概率问题

    Bob 的生存概率问题 作者:Grey 原文地址: 博客园:Bob 的生存概率问题 CSDN:Bob 的生存概率问题 题目描述 给定五个参数 n , m , i , j , k,表示在一个 n*m 的 ...

  6. 基于Camera Link和PCIe DMA的多通道视频采集和显示系统

    基于Camera Link和PCIe DMA的多通道视频采集和显示系统 在主机端PCIe驱动的控制和调度下,视频采集与显示系统可以同时完成对多个Camera Link接口视频采集以及Camera Li ...

  7. ML-L1、L2 正则化

    出现过拟合时,使用正则化可以将模型的拟合程度降低一点点,使曲线变得缓和. L1正则化(LASSO) 正则项是所有参数的绝对值的和.正则化不包含theta0,因为他只是偏置,而不影响曲线的摆动幅度. \ ...

  8. iphoneApp Fidder设置

    使用iphone 打开fidder 按照如上配置 安装完毕 然后访问计算机地址- 比如我的计算机ip地址是 192.168.2.10那么我需要在我的safari浏览器中输入192.168.2.10:8 ...

  9. Codeforces Round #781(C. Tree Infection)

    Codeforces Round #781 C. Tree Infection time limit per test 1 second memory limit per test 256 megab ...

  10. Linux系统安装 tftp服务 NFS服务

    安装tftp服务 安装 sudo apt-get install tftp-hpa tftpd-hpa 配置文件 # /etc/default/tftpd-hpa TFTP_USERNAME=&quo ...