需要一个配置文件 管理输入、过滤器和输出相关的配置。配置文件内容格式如下:

# 输入
input {
...
}
# 过滤器
filter {
...
}
# 输出
output {
...
}

先来看一个标准输入输出


root@c201b7b32a32# ./logstash -e 'input { stdin{} } output { stdout{} }'
Sending Logstash's logs to /opt/logstash/logs which is now configured via log4j2.properties
[2018-04-26T06:47:20,724][INFO ][logstash.modules.scaffold] Initializing module {:module_name=>"fb_apache", :directory=>"/opt/logstash/modules/fb_apache/configuration"}
……

[2018-04-26T06:47:24,124][INFO ][logstash.pipeline ] Pipeline started succesfully {:pipeline_id=>"main", :thread=>"#<Thread:0x5fec99f4 run>"}
The stdin plugin is now waiting for input:
[2018-04-26T06:47:24,253][INFO ][logstash.agent ] Pipelines running {:count=>1, :pipelines=>["main"]}

hello         ==>输入
2018-04-26T06:47:31.957Z c201b7b32a32 hello ==>输出
this is test ==>输入
2018-04-26T06:50:29.743Z c201b7b32a32 this is test  ==>输出

使用rubudebug显示详细输出,codec为一种编解码器


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

test2   ==>输入
{
"message" => "test2",
"@timestamp" => --26T07::.652Z,
"@version" => "",
"host" => "c201b7b32a32"
} ==>使用rubydebug输出

 input输入设置

input {
# file为常用文件插件,插件内选项很多,可根据需求自行判断
file {
path => "/var/log/httpd/access_log" # 要导入的文件的位置,可以使用*,例如/var/log/nginx/*.log
Excude =>”*.gz” # 要排除的文件
start_position => "beginning" # 从文件开始的位置开始读,默认是end
ignore_older => 0 # 多久之内没修改过的文件不读取,0为无限制,单位为秒
sincedb_path => "/dev/null" # 记录文件上次读取位置;输出到null表示每次都从文件首行开始解析
add_field=>{"test"="test"} # 增加一个字段
type => "apache-log" # type字段,可表明导入的日志类型
}
}

也可以使用多个file

input {
file {
path => "/var/log/messages"
type => "syslog"
}
  file {
path => "/var/log/apache/access.log"
type => "apache"
}
}

也可以使用数组方式   或者用*匹配

path => ["/var/log/messages","/var/log/*.log"]
path => ["/data/mysql/mysql.log"]

 filter过滤设置

Logstash三个组件的第二个组件,也是真个Logstash工具中最复杂的一个组件,
当然,也是最有作用的一个组件。

1、grok插件 grok插件有非常强大的功能,他能匹配一切数据,但是他的性能和对资源的损耗同样让人诟病。

filter{
grok{
#首先要说明的是,所有文本数据都是在Logstash的message字段中的,我们要在过滤器里操作的数据就是message。
#只说一个match属性,他的作用是从message 字段中把时间给抠出来,并且赋值给另个一个字段logdate。
        #第二点需要明白的是grok插件是一个十分耗费资源的插件。
#第三点需要明白的是,grok有超级多的预装正则表达式,这里是没办法完全搞定的,也许你可以从这个大神的文章中找到你需要的表达式
#http://blog.csdn.net/liukuan73/article/details/52318243
#但是,我还是不建议使用它,因为他完全可以用别的插件代替,当然,对于时间这个属性来说,grok是非常便利的。 match => ['message','%{TIMESTAMP_ISO8601:logdate}']
}
}

再看下match 另一种用法,将message中   ip、访问方法、url、数据量、持续时间   提取出来 
并赋值给 clientip、method、request、bytes、duration 字段

filter {
grok {
match => {"message"=>"%{IPORHOST:clientip}\s+%{WORD:method}\s+%{URIPATHPARAM:request}\s+%{NUMBER:bytes}\s+%{NUMBER:duration}"}
}
}

显示数据

{
"message" => "9.9.8.6 GET /xx.hmtl 343 44",
"@version" => "1",
"@timestamp" => "2017-01-18T00:12:37.490Z",
"path" => "/home/elk/0204/nginx.log",
"host" => "db01",
"type" => "nginx",
"clientip" => "9.9.8.6",
"method" => "GET",
"request" => "/xx.hmtl",
"bytes" => "343",
"duration" => "44"

}

继续修改,提取后删除message

filter {
grok {
match => {"message"=>"%{IPORHOST:clientip}\s+%{WORD:method}\s+%{URIPATHPARAM:request}\s+%{NUMBER:bytes}\s+%{NUMBER:duration}"}
remove_field =>["message"]
}
}

显示结果

{
"@version" => "",
"@timestamp" => "2017-01-18T00:15:03.879Z",
"path" => "/home/elk/0204/nginx.log",
"host" => "db01",
"type" => "nginx",
"clientip" => "55.9.3.6",
"method" => "GET",
"request" => "/zz.xml",
"bytes" => "",
"duration" => ""

}

比较常用的是 %{COMBINEDAPACHELOG}   是logstash自带的匹配模式,内置的正则,用来匹配apache access日志

filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
} remove_field => "message"
}
}

显示结果

{
"_index": "logstash-2018.05.03",
"_type": "apache_logs",
"_id": "VFHkI2MBPZdRHaSpwnN-",
"_version": ,
"_score": null,
"_source": {
"agent": "\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Maxthon/5.1.5.2000\"",
"path": "/var/log/httpd/access_log",
"referrer": "\"http://10.10.12.81/cacti/data_sources.php\"",
"host": "cacti",
"verb": "GET",
"clientip": "10.0.7.99",
"request": "/cacti/graphs.php",
"auth": "-",
"@version": "",
"ident": "-",
"httpversion": "1.1",
"response": "",
"bytes": "",
"@timestamp": "2018-05-03T02:46:26.477Z",
"timestamp": "03/May/2018:10:46:25 +0800"
},
"fields": {
"@timestamp": [
"2018-05-03T02:46:26.477Z"
]
},
"sort": [ ]
}

其它插件暂时不讲……

 
output输入设置

输出到elasticserarch

 elasticsearch{
hosts=>["10.10.10.11:9200"] # elasticsearch 地址 端口
action=>"index" # 索引
index=>"indextemplate-logstash" # 索引名称
#document_type=>"%{@type}"
document_id=>"ignore" template=>"/opt/logstash-conf/es-template.json" # 模板文件的路径
template_name=>"es-template.json" # 在es内部模板的名字
template_overwrite=>true #
    protocol => "http"         #目前支持三种协议    node、http 和tranaport  
   }

写几个实例

1.配置文件

input {
file {
path => ['/var/log/httpd/access_log']
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
} remove_field => "message"
}
}
output {
elasticsearch {
hosts => ["10.10.15.95:9200"]
index => "12.81-cacti-%{+YYYY.MM.dd}"
action => "index"
document_type => "apache_logs"
}
}

数据

{
"_index": "logstash-2018.05.03",
"_type": "apache_logs",
"_id": "U1HkI2MBPZdRHaSpMXPM",
"_version": ,
"_score": ,
"_source": {
"agent": ""Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36 Maxthon/5.1.5.2000"",
"path": "/var/log/httpd/access_log",
"referrer": ""http://10.10.12.81/cacti/include/themes/modern/jquery-ui.css"",
"host": "cacti",
"verb": "GET",
"clientip": "10.0.7.99",
"request": "/cacti/include/themes/modern/images/ui-icons_454545_256x240.png",
"auth": "-",
"@version": "",
"ident": "-",
"httpversion": "1.1",
"response": "",
"bytes": "",
"@timestamp": "2018-05-03T02:45:49.442Z",
"timestamp": "03/May/2018:10:45:49 +0800"
}
}

2.一台机器上传输两种日志

input {
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
file {
path => "/var/log/elasticsearch/chuck-cluster.log"
type => "es-error"
start_position => "beginning"
}
}
output {
if [type] == "system" {
elasticsearch {
hosts => ["192.168.56.11:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
if [type] == "es-error" {
elasticsearch {
hosts => ["192.168.56.11:9200"]
index => "es-error-%{+YYYY.MM.dd}"
}
}
}

123

logstash 配置文件语法的更多相关文章

  1. logstash配置文件

    1. 安装  logstash 安装过程很简单,直接参照官方文档: https://www.elastic.co/guide/en/logstash/current/installing-logsta ...

  2. Logstash配置文件详情

    logstash 配置文件编写详解 说明 它一个有jruby语言编写的运行在java虚拟机上的具有收集分析转发数据流功能的工具能集中处理各种类型的数据能标准化不通模式和格式的数据能快速的扩展自定义日志 ...

  3. Logstash配置文件介绍

    Logstash配置文件介绍 Logstash配置文件有两种,分别是pipeline配置文件和setting配置文件. Pipeline配置文件主要定义logstash使用的插件以及每个插件的设置,定 ...

  4. ELK 学习笔记之 Logstash基本语法

    Logstash基本语法: 处理输入的input 处理过滤的filter 处理输出的output 区域 数据类型 条件判断 字段引用 区域: Logstash中,是用{}来定义区域 区域内,可以定义插 ...

  5. java日志框架系列(4):logback框架xml配置文件语法

    1.xml配置文件语法 由于logback配置文件语法特别灵活,因此无法用DTD或schema进行定义. 1.配置文件基本结构 配置文件基本结构:以<configuration>标签开头, ...

  6. ELK日志管理之——logstash配置语法

    Logstash 设计了自己的 DSL -- 有点像 Puppet 的 DSL,或许因为都是用 Ruby 语言写的吧 -- 包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字 ...

  7. ELK之Logstash配置文件详解

    Logstash 是一个开源的数据收集引擎,它具有备实时数据传输能力.它可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地.它以插件的形式来组织功能,通过配置文件来描述需要插件做什么, ...

  8. logstash配置文件详解

     logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter. 从input读取事件源,(经过filter解析和处理之后),从output输出到目标 ...

  9. logstash 配置文件实例

    这个配置文件记不起来是从那个地方下载的来的了,感谢那位无私的朋友 input {  beats {            #shipper 端用的是 filebeat,所以用这个插件     port ...

随机推荐

  1. 使用ABAP Data Validator验证数据有效性

    在日常的开发过程中,我们常常要处理不同来源的数据.数据可能来自不可靠的外部系统.不可靠的用户输入和甚至设计有误的数据库表,因此,对数据有效性进行验证是必要的工作. 开源工具ABAP Data Vali ...

  2. python shutil 文件(夹)的复制、删除、移动、压缩和解压

    高级的 文件.文件夹.压缩包 处理模块 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import shutil shutil.copy ...

  3. 清晰架构(Clean Architecture)的Go微服务: 事物管理

    为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个. 事务很容易在Go中实现,但很难做到正确地实现. 需求: 将业务逻辑与事务代码分开. 在编 ...

  4. 从0到1掌握某Json-TemplatesImpl链与ysoserial-jdk7u21的前因后果

    本文首发于先知社区: https://xz.aliyun.com/t/7096 前言 作为一名安全研究人员(java安全菜鸡),知道拿到exp怎么打还不够,还得进一步分析exp构造原理与漏洞原理才行. ...

  5. [洛谷P4585] [FJOI2015] 火星商店问题

    Description 火星上的一条商业街里按照商店的编号 \(1\),\(2\) ,-,\(n\) ,依次排列着 \(n\) 个商店.商店里出售的琳琅满目的商品中,每种商品都用一个非负整数 \(va ...

  6. MyBatis-Plus学习笔记(1):环境搭建以及基本的CRUD操作

    MyBatis-Plus是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,使用MyBatis-Plus时,不会影响原来Mybatis方式的使用. SpringBoot+M ...

  7. 用ES7解决异步回调地狱问题

    用了 Promise 其实并没有真正解决回调地狱问题,并且还新增了很多 .then(data => { .... }) 这些很没有意义的 “模板代码”.所以先人们又搞出了generator 和 ...

  8. 将Ubuntu下网卡名称enss改为eth0

    将Ubuntu下网卡名称enss改为eth0   sudo nano /etc/default/grub 找到GRUB_CMDLINE_LINUX=""改为GRUB_CMDLINE ...

  9. ios--->帧动画

    帧动画 NSMutableArray<UIImage *> *imageArr=[NSMutableArray array]; for(int i=0;i<20;i++){ NSSt ...

  10. Linux防火墙之iptables入门

    一.防火墙的概念 什么是防火墙?防火墙是一台或一组设备,用以在网络间实施访问控制策略:事实上一个防火墙能够包含OSI模型中的很多层,并且可能会涉及进行数据包过滤的设备,它可以实施数据包检查和过滤,在更 ...