windows下 logstash7.6安装配置

1.直接下载解压,版本要和es一样最好,本次安装的为7.6
下载地址:
https://www.elastic.co/cn/downloads/past-releases#logstash
2.在bin目录下新建.conf文件(名称随意),比如logstash.conf,填入如下配置,一个jdbc对应一个表

input {
    stdin {
	
    }
    jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://localhost:3306/jgmes_xinyuan?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
  	   # mysql驱动所在位置,去maven里面找,F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java
      jdbc_driver_library => "F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java\8.0.23\mysql-connector-java-8.0.23.jar"
      #sql执行语句
	  statement => "SELECT * FROM jgmes_pb_bgsj WHERE SY_CREATETIME > :sql_last_value"
	  #指定路径,t_01文件会自动生成,用来存放最后一次运行时间sql_last_value的值,logstash自带的,一个jdbc对应一个
	  last_run_metadata_path => "F:\ElasticSearch\logstash-7.6.1\logs\last_run_time\t_01"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
	  #每次重启logstash,就重新同步数据,相当于第一次全量同步,接下来就增量同步,看情况设置,
	  #假如为false,当你停掉logstash,mysql又插入数据,那这些数据是无法同步到es中的,如果你的数据量特别大,那就false吧
	  clean_run => true
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
	  #解决中文乱码问题
	  codec => plain { charset => "UTF-8"}
	  # 索引类型
	  type => "t_01"
    }
	
	jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://localhost:3306/jgmes_xinyuan?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
  	   # mysql驱动所在位置,去maven里面找,F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java
      jdbc_driver_library => "F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java\8.0.23\mysql-connector-java-8.0.23.jar"
      #sql执行语句
	  statement => "SELECT * FROM jgmes_plan_scrw WHERE SY_CREATETIME > :sql_last_value"
	  #指定路径,t_02文件会自动生成,用来存放最后一次运行时间sql_last_value的值,logstash自带的,一个jdbc对应一个
	  last_run_metadata_path => "F:\ElasticSearch\logstash-7.6.1\logs\last_run_time\t_02"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
	  #每次重启logstash,就重新同步数据,相当于第一次全量同步,接下来就增量同步,看情况设置,
	  #假如为false,当你停掉logstash,mysql又插入数据,那这些数据是无法同步到es中的,如果你的数据量特别大,那就false吧
	  clean_run => true
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
	  #解决中文乱码问题
	  codec => plain { charset => "UTF-8"}
	  # 索引类型
	  type => "t_02"
    }
	jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://localhost:3306/jgmes_xinyuan?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
  	   # mysql驱动所在位置,去maven里面找,F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java
      jdbc_driver_library => "F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java\8.0.23\mysql-connector-java-8.0.23.jar"
      #sql执行语句
	  statement => "SELECT * FROM jgmes_base_productdata WHERE SY_CREATETIME > :sql_last_value"
	  #指定路径,t_03文件会自动生成,用来存放最后一次运行时间sql_last_value的值,logstash自带的,一个jdbc对应一个
	  last_run_metadata_path => "F:\ElasticSearch\logstash-7.6.1\logs\last_run_time\t_03"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
	  #每次重启logstash,就重新同步数据,相当于第一次全量同步,接下来就增量同步,看情况设置,
	  #假如为false,当你停掉logstash,mysql又插入数据,那这些数据是无法同步到es中的,如果你的数据量特别大,那就false吧
	  clean_run => true
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
	  #解决中文乱码问题
	  codec => plain { charset => "UTF-8"}
	  # 索引类型
	  type => "t_03"
    }
	jdbc {
      # 配置数据库信息
      jdbc_connection_string => "jdbc:mysql://localhost:3306/jgmes_xinyuan?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
      jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
      jdbc_user => "root"
      jdbc_password => "root"
      jdbc_paging_enabled => "true"
      jdbc_page_size => "50000"
      jdbc_default_timezone => "Asia/Shanghai"
  	   # mysql驱动所在位置,去maven里面找,F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java
      jdbc_driver_library => "F:\maven\apache-maven-3.5.2\maven-repository\mysql\mysql-connector-java\8.0.23\mysql-connector-java-8.0.23.jar"
      #sql执行语句
	  statement => "SELECT * FROM jgmes_gygl_gylxgx WHERE SY_CREATETIME > :sql_last_value"
	  #指定路径,t_04文件会自动生成,用来存放最后一次运行时间sql_last_value的值,logstash自带的,一个jdbc对应一个
	  last_run_metadata_path => "F:\ElasticSearch\logstash-7.6.1\logs\last_run_time\t_04"
      # 定时字段 各字段含义(由左至右)分、时、天、月、年,全部为*默认含义为每分钟都更新
      schedule => "* * * * *"
	  #每次重启logstash,就重新同步数据,相当于第一次全量同步,接下来就增量同步,看情况设置,
	  #假如为false,当你停掉logstash,mysql又插入数据,那这些数据是无法同步到es中的,如果你的数据量特别大,那就false吧
	  clean_run => true
      # 是否将 sql 中 column 名称转小写
      lowercase_column_names => false
	  #解决中文乱码问题
	  codec => plain { charset => "UTF-8"}
	  # 索引类型
	  type => "t_04"
    }
}
filter {
	json {
		 source => "message"
		 remove_field => ["message"]
    }
	if[type]=="t_01"{
		#grok插件 将非结构化数据解析为结构化和可查询的数据,比如:日志
		
		#data插件 将日期字段解析为中间带T格式时间,就是es的时间类型
		#如果字段BGSJ_GZSJ属于后面日期中的一种,就把BGSJ_GZSJ转换为中间带T格式时间
		#一个date里边只能一个match和一个target
		#target默认指的就是@timestamp,所以target不写就是给@timestamp设置时间格式,
		#@timestamp属于系统字段,加个@符号,简直让人高深莫测
		date {
			match => ["BGSJ_GZSJ", "yyyy-MM-dd HH:mm:ss","yyyy-MM-dd","MMM dd yyyy HH:mm:ss","MMM  d yyyy HH:mm:ss", "ISO8601"]
			target => "BGSJ_GZSJ"
			timezone => "Asia/Shanghai"
		}
		
		#ruby插件 逻辑判断,操作对象,
		#@timestamp为es系统时间字段,但时间不准,这里更改@timestamp+8小时,
		#让timestamp显示为正常时间,timestamp和@timestamp不一样
		ruby {
			code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)"   
		}
		ruby {
			code => "event.set('BGSJ_GZSJ', event.get('BGSJ_GZSJ') + 8*60*60)"   
		}

		#mutate插件 对字段做处理的,属性有很多这里举例几个,插件都是logstash自带的不需要另外安装
	    mutate {
			#字段重命名,主键id重命名的话,output里面的id应该也要改,最好不改主键id吧
			rename => {
				"BGSJ_GWID" => "gwid"
				"BGSJ_BC" => "bc"
			}
			#移除字段
			remove_field => ["@timestamp","BGSJ_GWMC","BGSJ_CPGG"]
			#转变字段类型,能转的就转不能转的会报错,字段为空的转integer会默认赋值0,
			#上面重新命名的字段bc,也可以转换,仅支持转换为integer、float、string和Boolean
			convert => {
				 "BGSJ_YGGH" => "string"
				 "BGSJ_BGBLSL" => "integer"
				 "bc" => "integer"
				 } 
			#存在但为空的字段的默认值
			coerce => {
				"BGSJ_BLSL" => 0
			}
		}
		
	}
		
	
}
output {
	#通过type来进行区分表的数据然后建立索引进行存储
	if[type]=="t_01"{
		elasticsearch {
		# ES的IP地址及端口
        hosts => ["127.0.0.1:9200"]
		# 索引名称
        index => "reportbean"
        # 文档_id,把mysql数据库报工表的id字段拿过来作为es的id字段
        document_id => "%{JGMES_PB_BGSJ_ID}"
		manage_template => true #自动管理模板功能,默认为true,不要改成false
		template_name => "reportbean"   #模板名称
		template => "F:\ElasticSearch\logstash-7.6.1\bin\reportbean_temp.json" #映射配置文件的位置
		template_overwrite => true #如果设置为true,模板名字一样的时候,新的模板会覆盖旧的
		}
	}
	if[type]=="t_02"{
		elasticsearch {
		# ES的IP地址及端口
        hosts => ["127.0.0.1:9200"]
		# 索引名称
        index => "taskbean"
        # 文档_id,把mysql数据库生产任务表的id字段拿过来作为es的id字段
        document_id => "%{JGMES_PLAN_SCRW_ID}"
		}
	}

	if[type]=="t_03"{
		elasticsearch {
		# ES的IP地址及端口
        hosts => ["127.0.0.1:9200"]
		# 索引名称
        index => "productbean"
        # 文档_id,把mysql数据库生产任务表的id字段拿过来作为es的id字段
        document_id => "%{JGMES_BASE_PRODUCTDATA_ID}"
		}
	}
	if[type]=="t_04"{
		elasticsearch {
		# ES的IP地址及端口
        hosts => ["127.0.0.1:9200"]
		# 索引名称
        index => "processtoprocessstepbean"
        # 文档_id,把mysql数据库生产任务表的id字段拿过来作为es的id字段
        document_id => "%{GYLXGX_ID}"
		}
	}
	stdout {
		# JSON格式输出
		codec => json_lines
	}
}


3.在bin目录 新建 reportbean_temp.json 模板,填入你的字段
“order”: 1, //是优先级,越大越优先,系统默认模板为0,所以你要大于它
“template”: “reportbean”, //模板名称 和conf文件output 里的对应
properties: 里面定义需要的字段,以及字段类型

{
    "order": 1,
    "template": "reportbean",
    "settings": {
        "index": {
            "refresh_interval": "5s"
        }
    },
    "mappings": {
        "properties": {
			"JGMES_PB_BGSJ_ID" : {
			   "type" : "keyword"
			},
			"BGSJ_CXBM" : {
			   "type" : "keyword"
			},
			"BGSJ_SCRW" : {
			   "type" : "keyword"
			},
			"BGSJ_CPBH" : {
			   "type" : "keyword"
			},
			"BGSJ_GXBH" : {
			   "type" : "keyword"
			},
			"BGSJ_SL" : {
			   "type" : "long"
			},
			"SY_CREATETIME" : {
			   "format" : "yyyy-MM-dd HH:mm:ss || yyyy-MM-dd || date_optional_time ||epoch_millis",
			   "type" : "date"
			}
        }
    },
    "aliases": {}
}

4.检查配置文件是否正确,在bin目录命令行窗口里输入:
logstash -f logstash.conf -t
出现 Configuration OK 表示配置文件正确
5. 启动logstash
输入 logstash -f logstash.conf
启动成功之后,logstash会自动连接数据库,并将数据自动导入elasticsearch 中。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值