input{
kafka {
bootstrap_servers => "127.0.0.1:9092"
client_id => "nginxlog"
auto_offset_reset => "latest"
consumer_threads =>
decorate_events => true
topics => ["nginx_log"]
codec => "json"
type => "nginx_log"
}
}
filter{
mutate {
gsub => ["message", "\\x22", '"']
gsub => ["message", "\\x09", '']
}
json {
source => "message"
remove_field=>["message","beat","@version","@timestamp"]
}
if [type] == "nginx_log" {
ruby {
code => '
-- 获取白名单
file = File.open("/usr/local/logstash/config/white.txt", "r")
text = file.read
file.close
-- 判断日志中request_uri属性是否在白名单中 -- 也可直接将不在白名单的日志排除 event.cancel if !text.include?(event.get("request_uri"))
if !text.include?(event.get("request_uri")) then
-- 如果不存在就增加一个属性es_flag=0表示该日志没用
event.set("es_flag","")
else
-- 如果不存在就增加一个属性es_flag=1表示该日志有用
event.set("es_flag","")
end
'
}
}
}
}
output {
if [type] == "nginx_log" {
-- 判断es_flag=1放到nginx-log-yes索引中
if [es_flag] =="" {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "nginx-log-yes"
}
}
-- 判断es_flag=0放到nginx-log-no索引中
else {
elasticsearch {
hosts => "127.0.0.1:9200"
index => "nginx-log-no"
}
}
}
}

Lostash event API说明

除了基本的get和set外,还提供了丰富的接口。我们能用到的方法包括:
删除事件:cancel
取消删除事件:uncancel
是否删除:cancelled?
是否包含字段:include?
删除字段:remove
事件转字符串:to_s
事件转hash字典(不含metadata字段):to_hash
事件转hash字典(含metadata字段):to_hash_with_metadata
事件转json字符串:to_json
增加tag:tag
取事件时间戳:timestamp

测试配置文件

input{
stdin{
codec=>json
}
}filter{
ruby{
code=>'
event.cancel
event.set("cancelled",event.cancelled?)
event.uncancel
event.set("include",event.include?("hello"))
event.remove("hello")
event.set("to_s",event.to_s)
event.set("to_hash",event.to_hash)
event.set("to_hash_with_metadata",event.to_hash_with_metadata)
event.set("to_json",event.to_json)
event.tag("_test_tag")
event.set("timestamp",event.timestamp)
'
}
}output{
stdout{
codec=>rubydebug
}
}

启动logstash,然后输入如下,查看结果

{"hello":"world"}

Logstash利用ruby将有用的日志放到一个ES_INDEX将无用的日志放到另一个ES_INDEX的更多相关文章

  1. linux下redis4.0.2集群部署(利用Ruby脚本命令)

    一.原生命令方式和Ruby脚本方式区别 利用Ruby脚本部署和用原生命令部署,节点准备的步骤都是一样的,节点启动后的握手,以及主从.槽分配,利用Ruby脚本一步就能完成,利用原生命令需要一步一步地执行 ...

  2. 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?

    上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.并利用Kibana中分析日志. NLog输出结构化日志 Elas ...

  3. 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...

  4. apache 访问日志access_log 配置和解析 rotatelogs分割日志

    一.解析访问日志        apache 的访问日志记载着大量的信息,学会高效快捷的读出其中关键信息对我们的工作有极大帮助.       如果Apache的安装方式是默认安装,服务器一运行就会有两 ...

  5. SQL Server中的事务日志管理(9/9):监控事务日志

    当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...

  6. Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录

    [翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...

  7. .NET Core下的日志(3):如何将日志消息输出到控制台上

    当我们利用LoggerFactory创建一个Logger对象并利用它来实现日志记录,这个过程会产生一个日志消息,日志消息的流向取决于注册到LoggerFactory之上的LoggerProvider. ...

  8. 写一个简单的配置文件和日志管理(shell)

    最近在做一个Linux系统方案的设计,写了一个之前升级服务程序的配置和日志管理. 共4个文件,服务端一个UpdateServer.conf配置文件和一个UpdateServer脚本,客户端一个Upda ...

  9. SQL Server中怎么查看每个数据库的日志大小,以及怎么确定数据库的日志文件,怎么用语句收缩日志文件

    一,找到每个数据库的日志文件大小 SQL Server:查看SQL日志文件大小命令:dbcc sqlperf(logspace) DBA 日常管理工作中,很重要一项工作就是监视数据库文件大小,及日志文 ...

随机推荐

  1. vue环境的搭建与第一个demo

    参考两个博客 1 2 git.npm和淘宝镜像的安装过程过程省略了,直接开始webpack + vue-cli + 创建demo 首先,在磁盘创建一个文件夹,命名为vue-projects,里面再建一 ...

  2. [模板] k短路

    简介 Dijkstra最短路+A*搜索. 先逆向求所有点到终点的最短路 \(dis[i]\). 定义估价函数 \(f[i] = d[i] + dis[i]\) , 其中 \(d[i]\) 表示当前起点 ...

  3. 作业二:Git的安装与使用

    作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 分布式版本控制系统Git的安装与使用 1.下载安装配置用户名 ...

  4. Zookeeper 启蒙

    2018-12-14 关键词: Zookeeper入门介绍 . Zookeeper是什么.Zookeeper架构解析.Zookeeper应用场景.Zookeeper有什么用 本篇文章系笔者依据当前所掌 ...

  5. (二分查找 结构体) leetcode33. Search in Rotated Sorted Array

    Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e. ...

  6. iframe 自适应高度、父子页面传值、回调

    总结一下最近用iframe遇到的问题与解决办法: 结构:主页面main.html,里面套用iframe.iframe不能出现滚动条,自适应子页面高度.内容多了滚动条是main.html页面的. 1.  ...

  7. 剑指Offer_编程题_19

    题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...

  8. 抓包工具Charles基本用法

    我们在进行B/S架构的Web项目开发时,在前端页面与后台交互的调试的时候,通常使用在JSP中加入“debugger;”断点,然后使用浏览器的F12开发者工具来查看可能出错的地方的数据.或者使用Http ...

  9. SpringBoot系列: 单元测试2

    之前发了SpringBoot 单元测试的博客, https://www.cnblogs.com/harrychinese/p/springboot_unittesting.html , 内容较少, 现 ...

  10. Groovy 设计模式 -- 适配器模式

    Adapter Pattern http://groovy-lang.org/design-patterns.html#_adapter_pattern 适配器模式,对象存在一个接口, 此接口在此对象 ...