logstash 配置文件实例
这个配置文件记不起来是从那个地方下载的来的了,感谢那位无私的朋友
input {
beats { #shipper 端用的是 filebeat,所以用这个插件
port => 510 #开510端口,shipper 端发到 这里
}
beats {
port => 511
codec => json #原始日志是json格式,这里指定json格式,就可以解析好日志,下面filter 就不用写grok表达式了
}
tcp { #shipper用rsyslog,不像filebeat会自带元数据,所以用tcp开个端口就好
port => 512
type => commamd #增加个字段,以此来查找此类型日志
}
tcp {
port => 513
type => win_event
codec => multiline { #win的event日志,是多行的,用多行插件来做全合并
pattern => "^%{NGINXERR_DATE}" #这个正则变量,是一种时间日期格式,就是说日志以这种日期开头,后面的都算一条日志
negate => true
what => "previous"
}
}
}
filter {
if [input_type] == "log" { #判断值,filebeat 的元数据(即是每一条日志都会附带上的数据)就有这个字段。
ruby { #ruby插件,下面init 是声明有多少个字段。code 是声明 使用什么分隔符,分隔出每一个字段的值。要搞这个,前提是你的日志格式,指定生成以XXX符号为间隔啦
init => "@kname = ['http_x_forwarded_for','timestamp','request','status ','body_bytes_sent','http_referer','http_user_agent','remote_addr','http_head','upstream_addr','request_time','upstream_response_time']"
code => "new_event = LogStash::Event.new(Hash[@kname.zip(event['message'].split('|'))]); new_event.remove('@timestamp');event.append(new_event)"
}
if [request] { #还是判断,这是上面分好的字段,这里对request字段再分割一下
ruby { #同上啦
init => "@kname = ['method','URL','verb']"
code => "new_event = LogStash::Event.new(Hash[@kname.zip(event['request'].split(' '))]); new_event.remove('@timestamp');event.append(new_event)"
}
}
if [URL] { #跟上面的request判断 一个意思,就是要把一个字段,分的更细的方便日志分析
ruby {
init => "@kname = ['uri','url_args']"
code => "new_event = LogStash::Event.new(Hash[@kname.zip(event['URL'].split('?'))]); new_event.remove('@timestamp');event.append(new_event)"
remove_field => ["request","message","URL"] #这是每一个插件都有的命令,把多余的字段移除掉吧。
}
}
mutate { #匹配插件,常用的
convert => [ #转换,上面切割好字段,就像数据库表一样,都是str类型,下面就是把字段转换成对应的类型。举例:值是 - ,也会被转成0 。多个值的会变成数组。
"body_bytes_sent" , "integer",
"request_time", "float",
"upstream_response_time", "float"
]
}
date { #时间插件
match => ["timestamp" , "ISO8601"] #timestamp这个字段是日志里带的那个时间,而@timestamp 这个是默认的时间(此描述不准),通常我们多用这个@timestamp画图作为时间轴。ISO8601就是一种时间格式。详见搜下logstash N级目录下grok-patterns文件
}
}
if [input_type] == "test" {
mutate {split => ["ups_resp_time", ","]} #就是一个字段可能有多个值。用逗号隔开。
mutate {convert => ["ups_resp_time", "float"]} #然后再转成浮点型
mutate {convert => ["request_time", "float"]}
date {match => ["timestamp","ISO8601"]}
}
if [type] == "commad" { #这是一条别的日志,下面就是grok 解析日志的写法。日志长这样:2016-06-17 08:42:59 ## root@/dev/pts/1 ---> 121.33.26.18 51101 120.26.13.18 22 ## snmpnetstat -V
grok { match => {"message" => "%{NGINXERR_DATE:log_timestamp} %{NOTSPACE:xx} %{USERNAME:user}@%{NOTSPACE:tty} %{NOTSPACE:xxx} %{IPV4:chient_ip} %{NUMBER:client_port} %{IPV4:server_ip} %{NUMBER:server_port} %{NOTSPACE:xxxx} %{GREEDYDATA:command}"}
remove_field => ['xx']
remove_field => ['xxx']
remove_field => ['xxxx']
remove_field => ['message'] }
date { match => ["log_timestamp" , "yyyy-MM-dd HH:mm:ss"] }
}
if [type] == "win_event" { #在input模块那里,已用多行插件处理了。这里当成一行写grok就好。
grok {
match => {"message" => "%{NGINXERR_DATE:winlog_timestamp} %{NOTSPACE:win_hostname} %{NOTSPACE:Level} %{NUMBER:event_id} %{GREEDYDATA:event}" }
remove_field => ['message']
}
date {
match => ["winlog_timestamp" , "yyyy-MM-dd HH:mm:ss"]
}
}
# 下面这些呢,因为kibana显示问题,想看的直观些,于是在这里做个替换。存进es里时,就直接这中文啦。kibana展示,自然出是中文
if [host] == "10.168.24.70" { mutate { replace => { "host" => "精武门" } } }
if [host] == "10.117.16.241" { mutate { replace => { "host" => "nginx_1" } } }
if [host] == "10.117.9.162" { mutate { replace => { "host" => "nginx_2" } } }
if [host] == "10.51.8.234" { mutate { replace => { "host" => "监控" } } }
if [host] == "10.47.69.198" { mutate { replace => { "host" => "APP" } } }
if [win_hostname] == "iZ23syf95oaZ" { mutate { replace => { "win_hostname" => "数据库" } } }
if [win_hostname] == "iZ234bmxy7wZ" { mutate { replace => { "win_hostname" => "网站" } } }
if [win_hostname] == "iZ233n40vi4Z" { mutate { replace => { "win_hostname" => "资讯" } } }
if [win_hostname] == "iZ23z5w0bj3Z" { mutate { replace => { "win_hostname" => "DataCenter" } } }
}
# 这个没啥好说的吧。我就一个索引名。默认完了。
output {
elasticsearch { hosts => "127.0.0.1:9200" }
}
logstash 配置文件实例的更多相关文章
- 【原创】大叔经验分享(82)logstash一个实例运行多个配置文件
logstash一个实例运行多个配置文件,将所有配置文件放到以下目录即可 /usr/share/logstash/pipeline 但是默认行为不是每个配置文件独立运行,而是作为一个整体,每个inpu ...
- logstash配置文件
1. 安装 logstash 安装过程很简单,直接参照官方文档: https://www.elastic.co/guide/en/logstash/current/installing-logsta ...
- 【拆分版】 Docker-compose构建Logstash多实例,基于7.1.0
[拆分版]Docker-compose构建Logstash多实例 写在最前 说起Logstash,这个组件并没有什么集群的概念,与其说是集群,不如说是各自去收集日志分析过滤存储到Elasticsear ...
- Logstash配置文件详情
logstash 配置文件编写详解 说明 它一个有jruby语言编写的运行在java虚拟机上的具有收集分析转发数据流功能的工具能集中处理各种类型的数据能标准化不通模式和格式的数据能快速的扩展自定义日志 ...
- Logstash配置文件介绍
Logstash配置文件介绍 Logstash配置文件有两种,分别是pipeline配置文件和setting配置文件. Pipeline配置文件主要定义logstash使用的插件以及每个插件的设置,定 ...
- logstash快速入门 (这篇文章很不错 ) | 两种方式往logstash传输数据实例:Apache 日志(从文件获取)、Syslog方式
原文地址:http://www.2cto.com/os/201411/352015.html 原文地址:http://logstash.net/docs/1.4.2/tutorials/getting ...
- logstash配置文件详解
logstash pipeline 包含两个必须的元素:input和output,和一个可选元素:filter. 从input读取事件源,(经过filter解析和处理之后),从output输出到目标 ...
- logstash 配置文件语法
需要一个配置文件 管理输入.过滤器和输出相关的配置.配置文件内容格式如下: # 输入 input { ... } # 过滤器 filter { ... } # 输出 output { ... } 先来 ...
- 【ELK】抓取AWS-ELB日志的logstash配置文件
前言 ELK搭建没有难度,难的是logstash的配置文件,logstash主要分为三个部分,input,filter和output. input,输入源可选的输入源由很多,详情见ELK官网,这里我们 ...
随机推荐
- Semiautomated IMINT Processing Baseline System——翻译
题目 半自动的IMINT(图像情报)处理基准系统 摘要 SAIP ACTD(半自动图像情报处理高级概念技术展示项目)的目的是,通过战略上的传感器采集,使图像成为指挥官掌控整个战场的主要源头.该采集系统 ...
- 我了个大擦-PDO(二)
hi 昨天又213了,虽然有室友3点多才睡觉的客观影响,但是昨晚不想学东西是本质原因.今天搞起.打算3.4天之内,学完PDO和AJAX这两个,还望大家没事儿来骂骂我,免的我又偷懒. 1.PDO 二.P ...
- 文件上传&文件下载
一.单个文件上传 文件上传需要两个jar包: 首先制作一个简单的页面,用于实现文件上传 <h1>单个文件上传</h1> <s:form action="uplo ...
- SQL主外键和子查询
主键 数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键,通过它可强制表的实体完整性.当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键.一个 ...
- java 22 - 21 多线程之多线程的代码实现方式3
JDK5新增了一个Executors工厂类来产生线程池,有如下几个方法 A.public static ExecutorService newCachedThreadPool() B.public s ...
- Memcache基本使用
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像.视频.文件以及数据库检索的结果等.简单的说就是将数据调用到内 ...
- PHP 图片处理PNG颜色丢失
根据需求做一个用户点击测试桃花运的小程序.在开发中需要使用PHP进行开发,原理是将用户的姓名通过php的图片处理写入图片中,此处遇到一巨坑. 就是png图片在调用 imagecolorallocate ...
- Integer.parseInt(String s) 和 Integer.valueOf(String s) 的区别
通过查看java.lang.Integer的源码可以发现, 它们最终调用的都是 /** * Parses the string argument as a signed integer in the ...
- BZOJ 4241 历史研究
Description IOI国历史研究的第一人——JOI教授,最近获得了一份被认为是古代IOI国的住民写下的日记.JOI教授为了通过这份日记来研究古代IOI国的生活,开始着手调查日记中记载的事件. ...
- velocity模板引擎学习(3)-异常处理
按上回继续,前面写过一篇Spring MVC下的异常处理.及Spring MVC下的ajax异常处理,今天看下换成velocity模板引擎后,如何处理异常页面: 一.404错误.500错误 <e ...