【logstash】 - logstash配置语言基础

在网上很难找到logstash中文资料,ruby也没了解过,看官方文档太吃力,而我的要求也不高,使用loggstash可以提取想要的字段即可。

以下内容纯粹想当然的理解:

logstash配置格式

#官方文档:http://www.logstash.net/docs/1.4.2/

input {
  ...#读取数据,logstash已提供非常多的插件,比如可以从file、redis、syslog等读取数据
}

filter {
  ...#想要从不规则的日志中提取关注的数据,就需要在这里处理。常用的有grok、mutate等
}

output {
  ...#输出数据,在上面处理后的数据输出到file、elasticsearch等
}

logstash处理过程:

1.从input中的插件中读入数据,按行处理(与awk一样)

file{

path => "/var/log/maillog"

start_position => "beginning"

}

2.在filter中进行数据处理

首先读取第一行,把内容传给message字段(message与awk中的$0相似)。

grok{}从message中取需要的数据,主要使用正则表达式。

mutate{}主要是修改数据,比如取得一个字段的值,可以使用mutate进行数据处理。

3.把处理后的数据输出去各个插件

处理完一行数据后,重复上面的动作,直到把数据全部处理完成。

logstash配置语言

网址:http://www.logstash.net/docs/1.4.2/configuration

#:注释

Boolean:true 或者false
Examples:
debug => true

String(字符串)

name => "Hello world"
#字符串放在双引号内
abc => "%{name}"
#这样abc的值就是name的值

Number

port => 33

Array(数组)

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

#path包含三个路径。

Hash

match => {
  "field1" => "value1"
  "field2" => "value2"
  ...
}
#把多个字段放在{}中,每个字段使用 "key" => "value"

Field References(字段引用)

{
  "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"
  }
}

#字段引用使用[]号,比如使用status做判断,if [status] = 200 {}
#若是要取得字段的值,使用 %{ip}
#取os的值,需要这样:[ua][os],可以把ua看作数组名,os是下标。

Conditionals(条件语句)

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

equality, etc: ==, !=, <, >, <=, >=
regexp: =~, !~ (正则表达式)
inclusion: in, not in
and, or, nand, xor
!

#例子如下:
filter {
  if [action] == "login" {
    mutate { remove => "secret" }
  }
}

output {
  if [type] == "apache" {
    if [status] =~ /^5\d\d/ {
      nagios { ...  }
    } else if [status] =~ /^4\d\d/ {
      elasticsearch { ... }
    }

    statsd { increment => "apache.%{status}" }
  }
}

output {
  # Send production errors to pagerduty
  if [loglevel] == "ERROR" and [deployment] == "production" {
    pagerduty {
      ...
    }
  }
}

filter {
  if [foo] in [foobar] {
    mutate { add_tag => "field in field" }
  }
  if [foo] in "foo" {
    mutate { add_tag => "field in string" }
  }
  if "hello" in [greeting] {
    mutate { add_tag => "string in field" }
  }
  if [foo] in ["hello", "world", "foo"] {
    mutate { add_tag => "field in list" }
  }
  if [missing] in [alsomissing] {
    mutate { add_tag => "shouldnotexist" }
  }
  if !("foo" in ["hello", "world"]) {
    mutate { add_tag => "shouldexist" }
  }
}
Or, to test if grok was successful:

output {
  if "_grokparsefailure" not in [tags] {
    elasticsearch { ... }
  }
}

前面关于mutate处理alter日志,存在非常多的问题。比如原字符串里面有多个:符号,就会描述显示不全。使用grok处理如下:

input{

	stdin{
		type => "hxwtest"

	    }	

}

filter{

grok{
	match => ["message","(?<ORAERR_ID>^O[A-Z]{2}-[0-9]{5}):(?<ORA_DESC>.*)"]
}

grok{
    #(?<组名>regex) 把regex捕获的内容放到组名中,组名会当作一个字段。(?<=:)环视
	match => ["message","(?<TEST>(?<=:).*)"]
}

if "_grokparsefailure" not in [tags]{
	mutate{
			add_field => {"NGSUBTEST" => "%{TEST}"}
		}
	}

#把TEST中的空格去掉
mutate {gsub => ["TEST"," ",""]}

}

output{

      stdout{
		codec => rubydebug
	}

}

结果如下:

ORA-01589: alter database oracle lkjldkfjdkf
{
       "message" => "ORA-01589: alter database oracle lkjldkfjdkf\r",
      "@version" => "1",
    "@timestamp" => "2014-12-13T02:50:46.671Z",
          "type" => "hxwtest",
          "host" => "huangwen",
     "ORAERR_ID" => "ORA-01589",
      "ORA_DESC" => " alter database oracle lkjldkfjdkf\r",
          "TEST" => "alterdatabaseoraclelkjldkfjdkf\r",
     "NGSUBTEST" => " alter database oracle lkjldkfjdkf\r"
}
时间: 2024-10-10 11:08:43

【logstash】 - logstash配置语言基础的相关文章

Logstash中配置默认索引映射

ES中使用自动检测对索引字段进行索引,例如IP.日期自动检测(默认开启).数字自动检测(默认关闭)进行动态映射自动为文档设定索引,当需要为字段指定特定的类型时,可能使用Mapping在索引生成定义映射, Logstash中默认索引的设置是基于模板的. 首先我们需要指定一个默认的映射文件,文件的内容大致如下: { "template" : "logstash-*", "mappings" : { "_default_" : {

快速学习C语言三: 开发环境, VIM配置, TCP基础,Linux开发基础,Socket开发基础

上次学了一些C开发相关的工具,这次再配置一下VIM,让开发过程更爽一些. 另外再学一些linux下网络开发的基础,好多人学C也是为了做网络开发. 开发环境 首先得有个Linux环境,有时候家里机器是Windows,装虚拟机也麻烦,所以还不如30块钱 买个腾讯云,用putty远程练上去写代码呢. 我一直都是putty+VIM在Linux下开发代码,好几年了,只要把putty和VIM配置好,其实 开发效率挺高的. 买好腾讯云后,装个Centos,会分配个外网IP,然后买个域名,在DNSPod解析过去

45 puppet基础、资源详解、配置语言、puppet类与模板及模块

01 puppet基础 配置: node1:192.168.1.131 CentOS7.2 node2:192.168.1.132 CentOS7.2 [[email protected] ~]# rpm -ivh epel-release-latest-7.noarch.rpm [[email protected] ~]# yum list all | grep -i "puppet" puppet.noarch                           3.6.2-3.e

C语言基础课程 第一课 Linux环境配置小实战httpserver

?? C语言基础课程 第一课 Linux环境配置小实战httpserver 首先环境需要的是redhat虚拟机操作系统 打开redhat 防火墙 2.将WWW(HTTP)勾选上 3.点击apply 点击是 4.切换到root用户 输入正确的root密码 5. 启动http服务 6.输入ifconfig 查看当前ip 痛 7.通过分析我们知道 他是一个局域网的ip   windows可以通过net 或者 主机模式与Linux进行通信 如果不想改变本地ip地址的话  我们需要改变虚拟机的ip地址 和

Elasticsearch+Logstash+Kibana配置

Elasticsearch+Logstash+Kibana配置 关于Elasticsearch+Logstash+Kibana的安装有很多文章,这里不复述了,这里仅记录一些比较细节的内容. AWS EC2中安装需要的注意事项 9200,9300,5601端口要记得打开 elasticsearch的地址不要写外部IP,否则会很浪费data,写内部ip elasticsearch { host => "ip-10-160-94-102.ap-northeast-1.compute.intern

ELK 做日志分析(filebeat+logstash+elasticsearch)配置

利用 Filebeat去读取日志发送到 Logstash ,再由 Logstash 处理后发送给 Elasticsearch . 一.Filebeat 项目日志文件: 利用 Filebeat 去读取文件,paths 下面配置路径地址,Filebeat 会自动去读取 /data/share/business_log/TA-*/debug.log 文件 #=========================== Filebeat prospectors ========================

C#语言基础

第一部分 了解C# C#是微软公司在2000年7月发布的一种全新且简单.安全.面向对象的程序设计语言,是专门为.NET的应用而开发的.体现了当今最新的程序设计技术的功能和精华..NET框架为C#提供了一个强大的.易用的.逻辑结构一致的设计环境.其特点: 语言简洁 保留了C++的强大功能: 快速应用开发功能: 语言的的自由性: 强大的Web服务器控件: 支持跨平台: 与XML相融合: 第二部分 C#语言基础: 一.C#项目的组成结构: 1.项目后缀 .config——配置文件(存放配置参数文件)

MiS603 开发板2.2 Verilog HDL硬件语言基础

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ 2.2 Verilog HDL硬件语言基础 2.2.1 技术背景 大规模集成电路设计制造技术和数字信号处理技术,近三十年来,各自得到了迅

java--学习java从这里开始:Java语言基础(1)《基础知识篇》--黑马程序员

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- Java语言基础(1) 从这篇日记开始说一些关于java的语言基础知识, 1  Java语言概述 java的创始人——詹姆斯·高斯林(James Gosling) 1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算机科学博士学位,毕业后到IBM工作,设计IBM第7一代工作站NeWS系统,但不受重视.后来转至Sun公司,1990年,与Patrick,Na