LogStash实操

LogStash实操

简单的从本地输入,输出到本地

logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'

从本地输入,输出到es

logstash -e 'input{stdin{}} output {elasticsearch{hosts=>["hadoop111:9200"]}}'
##会在es根据时间生成一个索引库名称为logstash-xx-xx 每天只会自动生成一个索引库,就是根据时间命名的
##生成的索引库中type为logs,字段的id是自动生成的,message是采集的每一条日志的信息

实际应用中,都是将logstash三大组件写到一个文件中去执行

  • 如下面两个例子

使用logstash采集日志文件中的数据到kafka集群

  • 创建一个配置文件,写入如下ruby代码
input {
		  file {
			codec => plain {
			  charset => "UTF-8"
			}
            #指定从某个文件读取数据 也可以指定某个目录下的所有文件 支持通配符 /xxx/*/*.txt
			path => "/test/logstashData/*"
			#指定每隔几秒检测一次目录或文件下的数据变动
            discover_interval => 5
            #指定以哪种方式作为检测数据的方式进行更新,有两种beginning,end一般项目中用的都是end
            #end方式当有数据变化,会每次读取新增的数据(不包括修改的数据)
            #beginning方式当有数据变化,会每次读取所有的数据,会造成数据重复
			start_position => "end"
		  }
		}

		output {
			kafka {
              #在kafka中可以没有这个主题,在向kafka写入数据时,会创建分区数为1,副本为1的当前主题
			  topic_id => "gamelogs-prj"
			  codec => plain {
				format => "%{message}"
				charset => "UTF-8"
			  }
              ##指定kafka集群的broker,我这里是单节点
	 		 bootstrap_servers => "hadoop111:9092"
			}
		}
  • 执行 ./bin/logstash -f ./xxx.conf
  • 向指定的目录中导入数据文件,会发现kafka多了一个gamlogs-prj主题,并且从beginning正常消费数据

从kafka集群中使用logstash采集数据输送到es集群中

input {
	  kafka {
        #当从多个kafka中消费时,需要指定不同的client-id,随便写,不同就行
        #client_id => "logstash-1-1"
        #这个type名称可以随意写,主要是为了后面过滤与输出用,可以定位到当前kafka主题中
		type => "gamelogs-prj"
         # earliest (真实项目中,此种方式是首选)
	#当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,从头开始消费 
	#latest 
	#当各分区下有已提交的offset时,从提交的offset开始消费;无提交的offset时,消费新产生的该分区下的数据 
	#none 
	#topic各分区都存在已提交的offset时,从offset后开始消费;只要有一个分区不存在已提交的offset,则抛出异常
		auto_offset_reset => "earliest"
		codec => "plain"
        #指定当前消费者所在的消费者组
		group_id => "elas-prj"
       #指定要消费的主题
		topics => "gamelogs-prj"
        #指定kafka集群的broker,我这里是单节点
		bootstrap_servers => "hadoop111:9092"
			  }
		}

filter {
  	if [type] == "gamelogs-prj" {
		mutate {
       	#将获取的每一条日志按照|切分
	  	split => { "message" => "|" }
	  	add_field => {
      	#指定所形成的的索引库中字段的名称以及value
		"event_type" => "%{message[0]}"
		"current_time" => "%{message[1]}"
		"user_ip" => "%{message[2]}"
		"user" => "%{message[3]}"
	 }
        #将message字段移除,数据我已经切分了,整条消息我这里就不需要了
	 remove_field => [ "message" ]
   }
  }
}

output {
	  if [type] == "gamelogs-prj" {
		elasticsearch {
          ##指定索引库的名称
		  index => "gamelogs-prj"
		  codec => plain {
			charset => "UTF-16BE"
	  }
      	#指定es集群的节点,我这里是单点
  		hosts => ["hadoop111:9200"]
		} 
	  }
	}
  • 执行 ./bin/logstash -f ./xxx.conf
  • 会发现es集群中增加了一个gamlogs-prj的索引库,并且数据也已经写进去了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值