logstash(三):过滤器与grok
来源:互联网 发布:迅雷同类软件 编辑:程序博客网 时间:2024/06/10 18:55
在logstash中,配置完输入数据流后,接下来就是对数据进行解析,最简单的方法莫过于使用过滤器(filter)与grok的组合。
在grok中,支持以正则表达式的方式提取所需要的信息,其中,正则表达式又分两种,一种是内置的正则表达式(可以满足我们大部分的要求),一种是自定义的正则表达式,形式分别如下:
# 内置的正则表达式方式,下面的写法表示从输入的消息中提取IP字段,并命名为sip%{IP:sip}# 自定义的正则表达式,开始与终止符分别为(?与?),下面的写法表示获取除,以外的字符,并命名为log_type(?<log_type>[^,]+?)
以一个具体的例子来说明grok用法,假定需要解析的消息内容样本如下:
日志类型:僵尸网络日志, 源IP:192.168.101.251, 源端口:63726, 目的IP:124.127.48.41, 目的端口:1390, 攻击类型:异常流量, 严重级别:低, 系统动作:被记录, URL:-\n
为了快速判断我们的正则表达式是否正确,不妨进行在线测试,地址为(在线测试地址)[http://grokdebug.herokuapp.com/],最后的结果为:
^日志类型:(?<log_type>[^,]+?), 源IP:%{IP:sip}, 源端口:%{NUMBER:sport:int}, 目的IP:%{IP:dip}, 目的端口:%{NUMBER:dport:int}, 攻击类型:(?<att_type>[^,]+?), 严重级别:(?<slevel>[^,]{1,}?), 系统动作:(?<sys_act>[^,]{1,}?), URL:(?<url>.+)$
在上面的表达式中,为了提高正则表达式的解析效率,我们需要进行整行匹配,于是添加了正则表达式的开始与结尾字符“^$”,此外为了便于统计与分析,我们还需要对相关类型进行转换(如将字符串转换为整数),例如我们所需要的端口为整数,表达式为%{NUMBER:dport:int}。需要注意的是,grok也就支持两种数据类型转换,分别为float与int。
完整的logstash配置文件如下所示。
input { # 监听syslog输出端口 syslog { port => "514" }}filter { grok { match => { "message" => [ "^日志类型:(?<log_type>[^,]+?), 源IP:%{IP:sip}, 源端口:%{NUMBER:sport:int}, 目的IP:%{IP:dip}, 目的端口:%{NUMBER:dport:int}, 攻击类型:(?<att_type>[^,]+?), 严重级别:(?<slevel>[^,]{1,}?), 系统动作:(?<sys_act>[^,]{1,}?), URL:(?<url>.+)$", "^日志类型:(?<log_type>[^,]+?), 应用类型:(?<p_type>[^,]+?), 用户名/主机:%{IP:sport}, 上行流量\(KB\):%{NUMBER:sflow:int}, 下行流量\(KB\):%{NUMBER:dflow:int}, 总流量\(KB\):%{NUMBER:all_flow:int}$" ] } } }output { stdout { codec => rubydebug } elasticsearch { # elasticsearch的服务地址 hosts => ["192.168.101.204"] index => "logstash-%{+YYYY.MM.dd}" ssl => false }}
在操作的过程中,相关问题的解决办法:
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536][2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
文件数量限制的解决办法:
# 设置虚拟内存的数量sysctl -w vm.max_map_count=999999# 设置进程可打开的文件数量ulimit -n 999999
无可用连接的错误信息:
[2017-08-08T02:32:08,035][ERROR][logstash.outputs.elasticsearch] Attempted to send a bulk request to elasticsearch, but no there are no living connections in the connection pool.Perhaps Elasticsearch is unreachable or down?{:error_message=>"No Available connections", :class=>"LogStash::Outputs::ElasticSearch::HttpClient::Pool::NoConnectionAvailableError", :will_retry_in_seconds=>32}
解决办法:
1. 仔细检查配置文件的elasticsearch的服务地址;
2. 仔细检查elasticsearch是否开放了跨域设置;
阅读全文
0 0
- logstash(三):过滤器与grok
- Logstash过滤器--grok
- logstash grok
- logstash过滤器filter grok多种日志匹配使用心得
- logstash grok 正则 实例
- logstash之grok过滤
- logstash grok解析
- logstash grok正则调试
- logstash grok 解析Nginx
- logstash + grok 正则语法
- logstash 中正则grok
- logstash grok 多项匹配
- Avoiding GREEDYDATA for logstash'grok
- Custom grok patterns for logstash
- elastic案例:logstash grok正则
- logstash grok之match解析
- logstash 学习三 过滤器插件(Filter)
- Logstash学习5_[logstash/patterns/grok-patterns]Logstash grok 内置正则
- android 中系统日期时间的获取
- VC6到VS2010平台迁移
- JNIEnv对象
- git常用操作总结
- 编程实战二
- logstash(三):过滤器与grok
- 为微信小程序增加mixin扩展
- css3加载自定义字体
- 最常用的PHP正则表达式收集整理
- 设置UITextView,UITextField光标位置
- DataFrame 操作笔记
- Oracle指定某些值排最前或最后
- Linux内核通信之---proc文件系统(详解)
- 安装Greenplum导致oracle rac无法启动的事故