logstash

logstash简介

  • 是一个数据采集、加工处理以及传输的工具
  • 特点
    • 所有类型的数据集中处理
    • 不同模式和格式数据的正常化
    • 自定义日志格式的迅速扩展
    • 为自定义数据源轻松添加插件

安装logstash

  • 主机配置要求最低2核CPU2G内存
[root@logstash ~] rsync -av 192.168.1.252:/etc/hosts /etc/   #同步主机名解析
[root@logstash ~] yum -y install java-1.8.0-openjdk logstash  #需要jdk运行环境
  • 没有默认的配置文件,需要手写,安装路径在/opt/logstash/
[root@logstash ~] vim /etc/logstash/logstash.conf
input{
  stdin{}
}

filter{}

output{
  stdout{}
}
#写入验证配置,作用类似echo,输入什么输出什么
[root@logstash ~] /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf   #启动程序,-f 指定配置文件路径及文件名
Settings: Default pipeline workers: 2
Pipeline main started    #表示启动成功
test    #输入test
2020-02-24T04:02:22.790Z logstash test    #输出test,则服务正常

logstash使用

1)类型

布尔值类型:ssl_enable => true
字节类型:bytes => "1MiB"
字符串类型:name => "xkops"
数值类型:port => 22
数组:match => ["datetime","UNIX"]
哈希:options => {k => "v",k2 => "v2"}
编码解码:codec => "json"
路径:file_path => "/tmp/filename"
注释:#

2)条件判断

等于			==
不等于		!=
小于			<
大于			>
小于等于		<=
大于等于		>=
匹配正则		=~
不匹配正则	!~
包含			in
不包含		not in 
与			and
或			or
非与			nand
非或			xor
复合表达式	()
取反复合		!()

3)插件

1. codec类插件

  • 常用的插件:plain、json、json _lines、rubydebug、multiline等
] vim /etc/logstash/logstash.conf
input{
  stdin{ codec => "json" }
}

filter{}

output{
  stdout{ codec => "rubydebug" }
}
] /opt/logstash/bin/logstash -f /etc/logstash/logstash.conf

2. input file插件

] vim /etc/logstash/logstash.conf
input{
  file{
    start_position => "beginning"
    sincedb_path => "/var/lib/logstash/sincedb-access"
    path => [ "/tmp/a.log", "/tmp/b.log" ]
    type => 'filelog'
}
  • sincedb_path记录读取位置文件的路径和文件名
  • start_position配置第一次读取文件从什么地方开始,值为[“beginning”,“end”],默认为"end"。配置为beginning时,第一次从文件开头进行读取,并将已读取的位置记录到sincedb_path指定的文件中,下一次读取时会从这个文件查看记录的位置并读取未读取的部分,保证记录完整性
  • type相当于给日志打标签
  • path指定要读取的日志文件

3.filter grok插件

  • 解析各种非结构化的日志数据插件
  • grok使用正则表达式把飞结构化的数据结构化
  • 在分组匹配,正则表达式需要根据具体数据结构编写
  • 虽然编写困难,但适用性极广
  • 几乎可以应用于各类数据
filter{
  grok{
    match => { "message" => "%{IP:client_ip}"}
  }
}
  • grok正则分组匹配
    • 匹配ip时间戳和请求方法

    • 使用正则宏,正则宏查询文件/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns

filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

或者:

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}"}   #正则宏名
  }
}

4.output ES插件

  • 主要作用为将数据写入es集群
output{
  if [type] == "apache_log"{   #if的作用是将type为这个VALUE的日志数据写入,其他的不写入,达到多种服务的日志区分的目的
    elasticsearch{
      hosts => ["192.168.1.51:9200", "192.168.1.52:9200", "192.168.1.53:9200"]    #es集群主机和端口
      index => "logstash-apache"    #索引名
      flush_size => 2000      #数据大小达到2000字节时才写入一次
      idle_flush_time => 10   #数据写入空闲10s时,写入一次数据
    }}
  }

5.input filebeats插件

  • 这个插件主要用来接收beats类软件发送过来的数据,由于logstash以来JAVA环境,而且占用资源非常大,所以使用更轻量的filebeats替代,将logstash独立出来处理日志
beats{
  port => 5044
}

例:

input {
  beats {
    port => 5044
  }
}

filter{
  if [type] == "http_log"{
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }}
}

output{
  #stdout{ codec => "rubydebug" }
  if [type] == "http_log"{
  elasticsearch {
    index => "weblog"
    hosts => ["192.168.1.51:9200", "192.168.1.52:9200", "192.168.1.53:9200"] 
    flush_size => 2000
    idle_flush_time => 10
  }}
}

web服务器安装filebeat

] yum -y install filebeat
] vim /etc/filebeat/filebeat.yml
 15         - /var/log/access_log  #数组格式,可以写多个文件
 72       document_type: http_log  #设置发送的日志的type,作用是再logstash服务器匹配对应的规则
 183   #elasticsearch:		#注释掉elasticsearch相关配置
 188     #hosts: ["localhost:9200"]    #注释掉elasticsearch相关配置
 278   logstash:			#打开注释
 280     hosts: ["192.168.1.57:5044"]  #打开注释,指定logstash服务器ip和监听的端口
 ] systemctl start filebeat
 ] systemctl enable filebeat

如果kibana使用时报错:Field data loading is forbidden on [xxxx],则不要将索引名称设置为logstash-开头即可,参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值