logstash docker安装

logstash docker安装

最简单的安装方法,未做数据挂载等,需额外添加参数

  1. 拉取logstash镜像 (需要与es版本对应)
docker pull logstash:7.9.0
  1. 构建logstash容器

    docker run -d --name logstash --network host --privileged=true logstash:7.9.0
    
  2. 使用root用户进入logstash容器内部安装 jdbc 和 elasticsearch 插件

	# 使用root用户进入,避免权限问题
	docker exec -it --user root  logstash bash
	
	# 高版本自带插件,可以先用 logstash-plugin list 查看
	# 连接数据库的驱动
	logstash-plugin install logstash-input-jdbc
	#安装数据输出到es的插件
	logstash-plugin install logstash-output-elasticsearch
  1. 下载jdbc的mysql-connection.jar包

    # 创建存放的文件夹,下载并重命名:
    mkdir -p /usr/share/logstash/package
    wget -O ./package/mysql-connector-java.jar https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.24/mysql-connector-java-8.0.24.jar
    
  2. 修改容器内部配置

    # 更改logstash.yml文件
    vi config/logstash.yml
    
    # 修改es节点信息
    xpack.monitoring.elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
    
  3. 配置文件

	vi /usr/share/logstash/pipeline/logstash.conf

	input {
	 stdin { }
		jdbc {
			# mysql 数据库配置信息
			jdbc_connection_string => "jdbc:mysql://192.168.2.104:3306/test"
			jdbc_user => "root"
			jdbc_password => "root"
			# 数据库重连尝试
			connection_retry_attempts => "3"

			# 数据库连接可用校验超时时间,默认为3600s
			jdbc_validation_timeout => "3600"

			# 刚刚下载的mysql-connector-java.jar路径
			jdbc_driver_library => "/usr/share/logstash/package/mysql-connector-java.jar"
			jdbc_driver_class => "com.mysql.jdbc.Driver"

			# 开启分页查询(默认是false)
			jdbc_paging_enabled => "true"
			# 单次分页查询条数(默认100000,字段较多的话,可以适当调整这个数值)
			jdbc_page_size => "50000"

			# 执行的sql语句
			# statement_filepath => "xxx.sql"
			# 不复杂的sql也可以直接写sql
			statement => "SELECT * FROM data_table"

			# 需要记录查询结果某字段的值时,此字段为true,否则默认tracking_colum为timestamp的值
			# use_column_value => true

			# 是否将字段名转为小写,默认为true(如果具备序列化或者反序列化,建议设置为false)
			# lowercase_column_names => false

			# 需要记录的字段,同于增量同步,需要是数据库字段
			# tracking_column => id

			# 记录字段的数据类型
			# tracking_column_type => numeric

			# 上次数据存放位置
			# record_last_run => true

			# 上一个sql_last_value的存放路径,必须在文件中指定字段的初始值
			# last_run_metadata_path => "/etc/logstash/pipeline/cache/products.txt"

			# 是否清除last_run_metadata_path的记录,需要增量同步这个字段的值必须为false
			# clean_run => false

			# 同步的频率(分 时 天 月 年)默认为每分钟同步一次
			schedule => "* * * * *"
		}
	 }

	 output {
		# JSON格式输出
		stdout {
			codec => json_lines
		}
		elasticsearch {
			# es配置信息
			hosts => "192.168.213.128:9200"

			# es索引(先创建索引)
			index => "my_index"

			# 7.x 版本移除了 type,type 相关的所有内容全部变成 Deprecated
			# 为了兼容升级和过渡,所有的 7.x 版本 es 数据写入后 type 字段都默认被置为 “_doc”
			# document_type => "_doc"

			# 主键名称(类似数据库主键)
			document_id => "%{rid}"
		}
	}
  1. 执行(要先创建索引)
	./bin/logstash -f  /usr/share/logstash/pipeline/logstash.conf

	# LogStash 错误:Logstash could not be started because there is already another instance usin
	ll -a data/.lock
	rm -rf data/.lock