logstash配置文件详解
来源:互联网 发布:java多线程入门书籍 编辑:程序博客网 时间:2024/05/29 04:18
Logstash实际应用配置详解
背景
业务目的是能够分析nginx和apache每天产生的日志,对url、ip、rest接口等信息进行监控,并将数据发送到elasticsearch服务。
config
输入
从日志文件中获取信息
file { path => "/home/keepgostudio/demo/logs/test.log" start_position => "beginning"}
过滤
grok
目前是logstash中把非标准化的日志数据转换成标准化并且可搜索数据最好的方式。Logstash默认提供了能分析包括java堆栈日志、apache日志在内的120种形式。点击查看
如没有特别的需求的话,使用默认的apache日志形式就能达到想要的效果,如下。
grok{ match => {"message" => ["%{COMBINEDAPACHELOG}"]} }
但如果想要监控更多的信息,比如url上的参数,那么默认的表达式将没办法满足我们的需求,这时我们就需要自己动手去编写一些符合我们业务需要的表达式,并告诉logstash以某种期望的方式进行数据转换。
首先,在logstash的根目录下创建一个patterns文件夹,这个文件夹默认是没有的。
其次,在patterns文件夹中创建文件test_pattern(这里为了方便所以没有按照pattern的功能对文件进行命名,在实际应用中最好按照功能来对文件命名,至于原因你懂的)。在test_pattern文件中可以按照“名称 正则表达式”这样的格式自定义一些正则表达式,以便在grok中进行使用。
最后,在使用的时候一定要把pattern_dir这个参数带上,否则logstash无法识别你自定义的这些正则表达式。
grok { patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"] match => { "message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"] } remove_field => ["host", "timestamp", "httpversion", "@version"]}
kv
将数据源转换成键值对,并创建相对的field。比如传入“a=111&b=2222&c=3333”,输出的时候,a,b,c会被创建成三个field,这样做的好处是,当需要查询某一个参数的时候可直接查询,而不是把一个字符串搜索出来再做解析。
kv { source => "field_name" field_split => "&?"}
geoip
这个从字面上就能看出他的功能,根据ip查出相应的地理信息,比如城市,省份,国家,经纬度等。这个ip信息是在logstash中的一个数据源中进行搜索查找,而不是进行网络搜索。
geoip { source => "field_name" fields => ["country_name", "region_name", "city_name", "latitude", "longitude"] target => "location"}
drop
drop可以跳过某些不想统计的日志信息,当某条日志信息符合if规则时,该条信息则不会在out中出现,logstash将直接进行下一条日志的解析。
if [field_name] == "value" { drop {}}
输出
logstash输出到elasticsearch时,会随机生成一个id给每一条记录。建议在刚开始接触的时候,可以采用手动输入的方式。这样结合elasticsearch的服务,更容易理解整个实现的流程。
elasticsearch { hosts => ["192.168.1.44:9200"] index => "logstash-test-%{type}-%{host}" }
附录
test.config
input { stdin {}}filter { grok { patterns_dir => ["/home/keepgostudio/download/logstash-5.2.0/patterns"] match => { "message" => ["%{PARAMS_APACHELOG}", "%{NO_PARAMS_APACHELOG}"] } remove_field => ["host", "timestamp", "httpversion", "@version"] } kv { source => "params" field_split => "&?" } geoip { source => "ip" fields => ["country_name", "region_name", "city_name", "latitude", "longitude"] target => "location"}output { elasticsearch { hosts => ["192.168.1.44:9200"] index => "logstash-test-%{type}-%{host}" }}
test_pattern
HTTP_URL \S+(?=\?)HTTP_URL_WITH_PARAMS "(?:%{WORD:method} %{HTTP_URL:url}\?%{NOTSPACE:params}(?: HTTP/%{NUMBER:httpversion}))"HTTP_URL_WITHOUT_PARAMS "(?:%{WORD:method} %{NOTSPACE:url}(?: HTTP/%{NUMBER:httpversion}))"NO_PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITHOUT_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}PARAMS_APACHELOG %{IPV4:ip} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] %{HTTP_URL_WITH_PARAMS} %{NUMBER:response} (?:%{NUMBER:bytes}|-) "%{NOTSPACE:referrer}" %{QS:agent}
- logstash配置文件详解
- logstash配置文件详解
- logstash配置文件
- LogStash 常用配置文件
- logstash配置文件示例
- Logstash使用详解
- Logstash 使用详解
- logstash 配置详解
- logstash多个配置文件启动的问题
- logstash配置文件多输入和多输出
- logstash配置之自动重载配置文件
- Logstash学习20_[logstash-input-file]插件使用详解
- Logstash
- LogStash
- Logstash
- logstash
- logstash
- Logstash
- ruby 语法
- 使用SSL安全连接MySQL数据库
- NC portal关闭当前窗口
- tomcat性能调优和性能监控(visualvm)
- Android Butterknife 使用总结 8.4.0
- logstash配置文件详解
- NO.5 使用逻辑卷管理系统
- thinkphp5 command模式下无法获取配置信息的解决办法
- c++ 标准
- android---RecycleView使用ItemTouchHelper实现拖拽和侧滑删除
- Unity3D_uGUI学习笔记(1)_Canvas简述
- P2341 受欢迎的牛
- python的多线程编程——锁
- EL表达式不起作用