ELK日志管理之——logstash配置语法
Logstash 设计了自己的 DSL —— 有点像 Puppet 的 DSL,或许因为都是用 Ruby 语言写的吧 —— 包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。
一、基本语法组成
logstash.conf配置文件里至少需要有input和output两个部分构成
input {
#输入
}
filter {
#过滤匹配
}
output {
#输出
}
1、input配置
1.1、file{}(文件读取)
监听文件变化,记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位(也就是时间戳)
input {
file {
path => ["/var/log/access.log", "/var/log/message"] #监听文件路径
type => "system_log" #定义事件类型
start_position => "beginning" #检查时间戳
}
}
参数说明:
exclude :排除掉不想被监听的文件
stat_interval :logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
start_position :logstash 默认是从结束位置开始读取文件数据,也就是说 logstash 进程会以类似 tail -f 的形式运行。如果你是要导入原有数据,把这个设定改成 “beginning”,logstash 进程就按时间戳记录的地方开始读取,如果没有时间戳则从头开始读取,有点类似cat,但是读到最后一行不会终止,而是继续变成 tail -f。
1.2、codec(定义编码类型)
优化建议:直接输入预定义好的 JSON 数据,这样就可以省略掉 filter/grok 配置,从而减轻过滤器 logstash 的 CPU 负载消耗;具体操作如下:
1.2.1、修改nginx配置文件,添加如下
logformat json '{"@timestamp":"$time_iso8601",'
'"@version":"1",'
'"host":"$server_addr",'
'"client":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,' #$request_time没有双引号表明该值为int类型
'"domain":"$host",'
'"url":"$uri",'
'"status":"$status"}';
access_log /var/log/nginx/access.log_json json;
1.2.2、重启 nginx 应用,然后修改input/file 区段配置成下面这样
input {
file {
path => "/var/log/nginx/access.log_json""
codec => "json"
}
}
2、filter过滤器配置
2.1、data(时间处理)
用来转换日志记录中的时间字符串,变成LogStash::Timestamp 对象,然后转存到 @timestamp 字段里。
注意:因为在稍后的 outputs/elasticsearch 中index常用的 %{+YYYY.MM.dd} 这种写法必须读取 @timestamp数据,所以一定不要直接删掉这个字段保留自己的时间字段,而是应该用 filters/date 转换后删除自己的字段!至于elasticsearch 中index使用 %{+YYYY.MM.dd}这种写法的原因后面会说明。
filter {
grok {
match => ["message", "%{HTTPDATE:logdate}"]
}
date {
match => ["logdate", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
2.2、grok (正则匹配)
filter {
grok {
match => [ "message", "\s+(?<status>\d+?)\s+" ] #跟python的正则有点差别
}
}
优化建议:如果把 “message” 里所有的信息都 grok 到不同的字段了,数据实质上就相当于是重复存储了两份。所以可以用 remove_field 参数来删除掉 message 字段,或者用 overwrite 参数来重写默认的 message 字段,只保留最重要的部分。
filter {
grok {
patterns_dir => "/path/to/your/own/patterns"
match => {
"message" => "%{SYSLOGBASE} %{DATA:message}"
}
overwrite => ["message"]
}
}
filter {
grok {
match => ["message", "%{HTTPDATE:logdate}"]
remove_field => ["logdate"]
}
}
2.3、GeoIP (地址查询归类)
GeoIP 是最常见的免费 IP 地址归类查询库,同时也有收费版可以采购。GeoIP 库可以根据 IP 地址提供对应的地域信息,包括国别,省市,经纬度等,对于可视化地图和区域统计非常有用。
filter {
geoip {
source => "clientip"
database => "/etc/logstash/GeoLiteCity.dat" #需去官网下载ip库放到本地
}
}
filter {
geoip {
source => "message" #如果能联网可查询在线ip库
}
}
注:geoip 插件的 “source” 字段可以是任一处理后的字段,比如 “clientip”,但是字段内容却需要小心!geoip 库内只存有公共网络上的 IP 信息,查询不到结果的,会直接返回 null,而 logstash 的 geoip 插件对 null 结果的处理是:不生成对应的 geoip.字段。
所以在测试时,如果使用了诸如 127.0.0.1, 172.16.0.1, 182.168.0.1, 10.0.0.1 等内网地址,会发现没有对应输出!
GeoIP 库数据较多,如果不需要这么多内容,可以通过 fields 选项指定自己所需要的。下例为全部可选内容
filter {
geoip {
fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]
}
}
ELK日志管理之——logstash配置语法的更多相关文章
- ELK日志管理之——logstash部署
1.yum源配置 [root@localhost ~]# cat > /etc/yum.repos.d/logstash.repo <<EOF [logstash-1.5] name ...
- elk 日志分析系统Logstash+ElasticSearch+Kibana4
elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...
- Spring Boot从入门到精通(八)日志管理实现和配置信息分析
Spring Boot对日志的处理,与平时我们处理日志的方式完全一致,它为Java Util Logging.Log4J2和Logback提供了默认配置.对于每种日志都预先配置使用控制台输出和可选的文 ...
- ELK日志管理搭建
目录: 一.介绍 二.安装JDK 三.安装Elasticsearch 四.安装Kibana 五.安装Nginx 六.安装Logstash 七.安装Logstash-forwarder 八.测试 系统环 ...
- 小白都会超详细--ELK日志管理平台搭建教程
目录 一.介绍 二.安装JDK 三.安装Elasticsearch 四.安装Logstash 五.安装Kibana 六.Kibana简单使用 系统环境:CentOS Linux release 7.4 ...
- commons-logging和Log4j 日志管理/log4j.properties配置详解
commons-logging和Log4j 日志管理 (zz) 什么要用日志(Log)? 这个……就不必说了吧. 为什么不用System.out.println()? 功能太弱:不易于控制.如果暂时不 ...
- Spring Boot 2 中的默认日志管理与 Logback 配置详解
Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的.在Spring Boot生态中,为Java Util Logging .Log4J2 和Logb ...
- ELK 学习笔记之 Logstash基本语法
Logstash基本语法: 处理输入的input 处理过滤的filter 处理输出的output 区域 数据类型 条件判断 字段引用 区域: Logstash中,是用{}来定义区域 区域内,可以定义插 ...
- ELK日志管理
ELK一般由三部分组成:logstash(日志格式化) + elasticsearch(检索) + Kibana(前台报表展示) 官网地址:https://www.elastic.co/ 本人在这用的 ...
随机推荐
- IOS 本地通知推送消息
在现在的移动设备中,好多应用性的APP都用到了推送服务,但是有好多推送的内容,比如有的只是单纯的进行推送一个闹钟类型的,起了提醒作 用,有的则是推送的实质性的内容,这就分为推送的内容来区别用什么推送, ...
- 进击的docker 一 : Docker 简介
Docker简介 1.什么是docker 1.1.docker 起源 开源项目 诞生2013年初 GO语言开发实现 遵从了Apache2.0协议 项目代码在GitHub维护 1.2.docker目标 ...
- codis安装手册
本文属原创,转载请注明此信息:http://www.cnblogs.com/robinjava77/p/5465150.html (Robin) codis交流群 240361424 感谢群里各位群 ...
- 一个input标签搞定含内外描边及阴影的按钮~
自从怀孕以来,我就变得很是轻松,偶尔写一两个页面,或者偶尔调试一个两个bug,或者偶尔给做JS的同事打打下手,修改个bug什么......一个习惯于忙碌的工作的人,这一闲下来,感觉还真TM很不舒服-怎 ...
- MongoDB(七)MongoDb数据结构
首先,向数据库插入一条bjson数据 首先是定义文档,然后使用admin用户名密码登录,进入test数据库,向test数据库中插入此文档("表名称和表中的记录") 插入结果,查看m ...
- Java设计模式--模板方法模式
定义: 模板模式是一种行为设计模式,使用了JAVA的继承机制,在抽象类中定义一个模板方法,该方法引用了若干个抽象方法(由子类实现)或具体方法(子类可以覆盖重写).它的实现思路是,创建一个桩方法,并且定 ...
- 在linux下写一只优雅的爬虫---优雅的获取沈航所有学生的个人信息
一:ubuntu下安装python集成环境pycharm以及免费激活 安装 首先去下载最新的pycharm 2016.2.3,进行安装.可以直接在官网下载.选择自己所对应的版本 PyCharm 的激活 ...
- Ubuntu 12.04搭建l2tp服务器记录。
1. 安装openswan apt-get install openswan 2.打开 /etc/ipsec.conf 文件,做如下配置: 其中,virtual_privat这里包含的网络地址允许配置 ...
- [HTML]JS全屏代码
video全屏参考:https://www.thecssninja.com/javascript/fullscreen <!doctype html> <html> <h ...
- Convert HTML to Text(转载)
原文地址:http://www.blackbeltcoder.com/Articles/strings/convert-html-to-text Download Source Code Intro ...