- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
首先记下这个笔记,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文件,拷贝下面的内容,每行基本有注释就详不说.
input { jdbc { jdbc_driver_library => " E:\sqljdbc_6.2.2.1_enu\sqljdbc_6.2\enu/mssql-jdbc-6.2.2.jre8.jar " jdbc_driver_class => " com.microsoft.sqlserver.jdbc.SQLServerDriver " jdbc_connection_string => " jdbc:sqlserver://sqlserverIP:1433;databaseName=Reptile.NewsLetter " jdbc_user => " sa " jdbc_password => "密码 " #分页且最大5万次 jdbc_paging_enabled => " true " jdbc_page_size => " 50000 " #时区按照东八 jdbc_default_timezone => " Asia/Shanghai " last_run_metadata_path => " E:\logstash-7.0.0\config\last_value_meta.txt " #启用追踪,则需要指定tracking_column,默认是timestamp() use_column_value => true # 如果 use_column_value 为真,需配置此参数. track 的数据库 column 名,该 column 必须是递增的. 一般是主键 tracking_column => id #追踪字段的类型,目前只有数字(numeric)和时间类型(timestamp),默认是数字类型() tracking_column_type => numeric #是否记录上次执行结果, 如果为真,将会把上次执行到的 tracking_column 字段的值记录下来,保存到 last_run_metadata_path 指定的文件中 record_last_run => true #statement_filepath => " E:\logstash-7.0.0\config\update.sql " sql可放到独立文件里面去 #表里有时间也有时间戳 都可用 statement => " SELECT * FROM [Reptile.NewsLetter].[dbo].[LivesItems] where id > :sql_last_value " schedule => " * * * * * " #是否清除 last_run_metadata_path 的记录,如果为真那么每次都相当于从头开始查询所有的数据库记录 clean_run => false #是否将 column 名称转小写 lowercase_column_names => false } } output { elasticsearch { hosts => [ " http://my.es.com:9200 " ] index => " nl_livesitem " user => " elastic " password => " changeme " } }
上面的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 。
<?xml version= " 1.0 " encoding= " utf-8 " ?> <nlog xmlns= " http://www.nlog-project.org/schemas/NLog.xsd " xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance " autoReload = " true " internalLogLevel = " Warn " internalLogFile = " internal-nlog.txt " > <extensions> <add assembly= " NLog.Web.AspNetCore " /> </extensions > <variable name= " logDirectory " value= " ${basedir}\logs\"/> <!--define various log targets--> <targets> <!--write logs to file--> <!--address 填写Logstash数据的接收通道--> <target xsi:type= " Network " name = " elastic " keepConnection = " false " address = " tcp://my.es.com:50000 " layout = " ${longdate}|${logger}|${uppercase:${level}}|${message} ${exception} " /> /> <target xsi:type= " Null " name= " blackhole " /> </targets> <rules> <!--All logs, including from Microsoft--> <!--<logger name= " * " minlevel= " Trace " writeTo= " allfile " />--> <!--Skip Microsoft logs and so log only own logs--> <logger name= " Microsoft.* " minlevel= " Trace " writeTo= " blackhole " final= " true " /> <logger name= " * " minlevel= " Trace " writeTo= " elastic " /> </rules> </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分布式日志中心的文章就讲到这里了,如果你想了解更多关于使用Logstash工具导入sqlserver数据到elasticSearch及elk分布式日志中心的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在 logstash 中使用文件作为日志的输入。我的日志文件每天轮换,所以我想问一下我们如何配置 logstash 的文件插件,以便它可以处理每天轮换的文件。除此之外,文件节拍也可以进行日志轮换。
我正在我公司服务的服务器上实现监控工具。为此,我正在使用 logstash。我们的应用程序通过 log4net udp appender 将它们的日志发送到 logstash(输入 udp),然后 l
我期待对 Logstash 中收到的输入使用数学运算,但无法看到任何此类 过滤器 . 输入如下: { "user_id": "User123", "date": "2016 Jun 26 12
我对 logstash 和 Elasticsearch 很陌生。我正在尝试将日志文件存储在 elasticsearch 和平面文件中。我知道 logstash 支持两种输出。但是它们是同时处理的吗?还
寻求一些入门帮助...我已经安装了 Logstash(以及 ElasticSearch),但我正在为我的第一个过滤器而苦苦挣扎。 作为测试,我将其配置为从包含 6 行的修剪日志文件中读取,每行以时间戳
我已经按照下面提到的架构实现了 logstash(在测试中)。 成分分解 Rsyslog 客户端:默认情况下,所有 Linux destros 中都安装了 syslog,我们只需要配置 rsyslog
我无法在 LogStash 中使用负正则表达式(如 the docs 中所述) 考虑以下正则表达式,它可以正常工作以检测已分配值的字段: if [remote_ip] =~ /(.+)/ {
我在云中使用两台服务器,在一台服务器上 (A) 我安装了 filebeat,在第二台服务器上 (B) 我安装了 logstash、elasticsearch 和 kibana。所以我在 logstas
我有一个来自 Windows 事件日志的 IP 地址字段,它在 IP 地址前面包含类似“::fffff:”的字符。我无法在此处更改源,因此我必须在 Logstash 中修复此问题。 我一定很不擅长谷歌
我正在尝试将此日期结构 YYYY-MM-DD_HH-MM-SS 转换为 logstash 中的 YYYY-MM-DD HH:MM:SS。这是我的过滤器: filter { csv {
我正在使用 Logstash(以 Kibana 作为 UI)。我想从我的日志中提取一些字段,以便我可以在 UI 的 LHS 上按它们进行过滤。 我日志中的示例行如下所示: 2013-07-04 00:
如何将此 Logstash 过滤器更改为不区分大小写? filter { if "foo" in [message] { mutate { add_field => { "Alert_le
我正在尝试将事件消息与几个正则表达式相匹配。我打算使用 grep 过滤器,但它已被弃用,所以我正在尝试使用否定的方法。 我正在寻找的功能是删除所有事件,除非消息匹配多个正则表达式。 过滤器波纹管不起作
我用过logstash的RPM安装。因此,logstash 作为 linux 服务运行。我想调试一个管道,需要查看的内容 output { stdout { codec => rubydebug
如何在 logstash 中比较日期。我想将日期与恒定日期值进行比较。以下代码在 Logstash 中失败并出现 ruby 异常。 if [start_dt] { "str_dt" => "20
我正在从logstash-1.1.3升级到logstash-1.3.3。问题是,1.1.3 中的标签和字段配置在 1.3.3 版本中已弃用。这些允许仅将那些事件发送到具有给定标签或包含给定字段的输出。
我想在同一台机器上运行两个 logstash 实例。现在我使用命令启动 logstash。logstash.bat agent -f logstashconf.conf。但是当我要通过相同的命令启动第
我有这种格式的 php 日志 [Day Mon DD HH:MM:SS YYYY] [Log-Type] [client ] : [Day Mon DD HH:MM:SS YYYY] [Log-Ty
我的 logstash 中的一些请求使 http 输出插件失败,并且日志显示 [2020-10-16T18:44:54,574][ERROR][logstash.outputs.http ] [HTT
我正在探索Logstash来接收HTTP上的输入。我已经使用以下方法安装了http插件: 插件安装logstash-input-http 安装成功。然后我尝试使用以下命令运行logstash: log
我是一名优秀的程序员,十分优秀!