logstash 的基础语法与使用

本文详细介绍了Logstash的安装过程,包括下载、解压和配置,强调了配置文件的作用以及启动和关闭Logstash的命令。此外,还讲解了Logstash的语法和基础使用,如DSL、输入输出插件的配置、数据类型和条件判断,并提供了配置文件和命令行启动的示例。
摘要由CSDN通过智能技术生成

一、logstash安装与配置

1. 下载

下载地址:Past Releases of Elastic Stack Software | Elastic

  • 注:使用Logstatsh的版本号与elasticsearch版本号需要保持一致

2. 上传并解压

先上传到服务器 /home/software/ 下,然后解压,并将解压后的文件夹移动到 /usr/local/ 下

tar -zxvf logstash-7.6.2.tar.gz -C /usr/local/

进入到解压后的文件夹下 /usr/local/logstash-7.6.2/conf/ 下:

(1)conf下配置文件说明:

  • logstash配置文件:/config/logstash.yml
  • JVM参数文件:/config/jvm.options
  • 日志格式配置文件:/config/log4j2.properties
  • 启动配置,比如启动时的java位置、LS的home等:/config/startup.options

(2)操作命令中的一些配置项:

  • --path.config 或 –f :logstash启动时使用的配置文件
  • --configtest 或 –t:测试 Logstash 读取到的配置文件语法是否能正常解析
  • --log或-l:日志输出存储位置
  • --pipeline.workers 或 –w:运行 filter 和 output 的 pipeline 线程数量。默认是 CPU 核数。
  • --pipeline.batch.size 或 –b:每个 Logstash pipeline 线程,在执行具体的 filter 和 output 函数之前,最多能累积的日志条数。
  • --pipeline.batch.delay 或 –u:每个 Logstash pipeline 线程,在打包批量日志的时候,最多等待几毫秒。 --verbose:输出调试日志 --debug:输出更多的调试日志

(3)其他的一些重要项:

  • 数据收集目录:/usr/local/logstash-6.6.0/data
  • 插件目录:/usr/local/logstash-6.6.0/vendor/bundle/jruby/1.9/gems
  • 查看插件命令: /usr/local/logstash-6.6.0/bin/logstash-plugin list
  • 更新插件命令: /usr/local/logstash-6.6.0/bin/logstash-plugin update logstash-xxxx-xxxxx
  • 安装插件命令: /usr/local/logstash-6.6.0/bin/logstash-plugin install logstash-xxxx-xxxxx
  • 插件地址: https://github.com/logstash-plugins

(4)启动与关闭

Logstash 的启动命令位于安装路径的 bin 目录中,直接运行 ./logstash 不行,会报异常,提示让你配置一下 pipelines.yml 文件

如果你没有配置 pipelines.yml 文件的话,那就需要指定一个配置文件启动,该配置文件 logstash-script.conf 需要自己新建:

# 启动
/usr/local/logstash-7.6.2/bin/logstash -f /usr/local/logstash-7.6.2/script/logstash-script.conf

如果也没有指定配置文件的话,可以按如下方式提供参数:

./logstash -e "input {stdin {}} output {stdout{}}"

启动时应注意: -e 参数后要使用双引号。如果在命令行启动日志中看“Successfully started Logstash API end-point l:port= >9600 ”,就证明启动成功。

在上面的命令行中,-e 代表输入配置字符串,定义了一个标准输入插件 ( 即 stdin) 和一个标准输出插件( 即 stdout), 意思就是从命令行提取输入,并在命令行直接 将提取的数据输出。如果想要更换输入或输出,只要将 input 或 output 中的插 件名称更改即可,这充分体现了 Logstash 管道配置的灵活性。按示例启Logstash,命令行将会等待输入,键入“ Hello World!” 后会在命令行返回结果如 下 

 在默认情况下, stdout 输出插件的编解码器为 rubydebug, 所以输出内容中 包含了版本、时间等信息,其中 message 属性包含的就是在命令行输入的内容。如果在启动时, 试着将输出插件的编码器更换为 plain 或 line ,则输入的结果将会发生变化 :

./logstash -e "input {stdin {}} output {stdout{codec => plain}}"

可以使用 jps 命令查看是否启动成功:

关闭:首先使用 jps 查看进程号,再使用 kill 命令关闭:

二、logstash 语法与基础使用

1. Logstash设计了自己的DSL,

包括有

  • 区域,
  • 注释,
  • 数据类型(布尔值,字符串,数值,数组,哈希),
  • 条件判断
  • 字段引用等。

2. Logstash用{}来定义区域。

区域内可以包括插件区域定义,你可以在一个区域内定义多个插件。插件区域内则可以定义键值对设置。

3. 格式、语法、使用方式: 

(1)整体格式结构:

# 注释.
input {
  ...
}
 
filter {
  ...
}
 
output {
  ...
}

(2)input设置:

## 两个input设置:
input {
  file {
    path => "/var/log/messages"
    type => "syslog"
  }
  file {
    path => "/var/log/apache/access.log"
    type => "apache"
  }
}

(3)数据类型:

## bool类型
debug => true
## string类型
host => "hostname"
## number类型
port => 6789
## array or list类型
path => ["/var/log/message","/var/log/*.log"]
## hash类型
match => {
    "field1" => "value1"
    "field2" => "value2"
}
## codec类型
codec => "json"

(4)字段引用方式

# 定义字段
{
    "agent":  "Mozilla/5.0  (compatible;  MSIE  9.0)",
    "ip":  "192.168.24.44",
    "request":  "/index.html"
    "response":  {
        "status":  200,
        "bytes":  52353
    },
    "ua":  {
        "os":  "Windows  7"
    }
}
## 引用字段值:
[response][status]
[ua][os]

(5)条件判断condition

if EXPRESSION {
  ...
} else if EXPRESSION {
  ...
} else {
  ...
}

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

(6)使用环境变量:

## 使用环境变量(如果缺失会报错):
input { 
	tcp { 
		port => "${TCP_PORT}" 
	} 
}
## 使用环境变量(缺失使用默认值):
input { 
	tcp { 
		port => "${TCP_PORT:54321}" 
	} 
}

4. logstash 示例

## input 从标准输入流:
input { stdin { } }

## 输入数据之后 如何进行处理:
filter {
  ## grok:解析元数据插件,这里从input输入进来的所有数据默认都会存放到 "message" 字段中
  ## grok提供很多正则表达式,地址为:http://grokdebug.herokuapp.com/patterns
  ## 比如:%{COMBINEDAPACHELOG} 表示其中一种正则表达式 Apache的表达式
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  ## date:日期格式化
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

## output 从标准输出流:
output {
  elasticsearch { hosts => ["192.168.11.35:9200"] }
  stdout { codec => rubydebug }
}

5. file插件使用

## file插件
input {
    file {
        path => ["/var/log/*.log", "/var/log/message"]
        type => "system"
        start_position => "beginning"
    }
}

其他参数:

  • discover_interval ## 表示每隔多久检测一下文件,默认15秒
  • exclude ## 表示排除那些文件
  • close_older ## 文件超过多长时间没有更新,就关闭监听 默认3600s
  • ignore_older ## 每次检查文件列表 如果有一个文件 最后修改时间超过这个值 那么就忽略文件 86400s
  • sincedb_path ## sincedb保存文件的位置,默认存在home下(/dev/null)
  • sincedb_write_interval ## 每隔多久去记录一次 默认15秒
  • stat_interval ## 每隔多久查询一次文件状态 默认1秒
  • start_position ## 从头开始读取或者从结尾开始读取
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值