设为首页 加入收藏

TOP

ELKStack学习笔记-logstash的安装(一)
2015-11-21 01:41:56 来源: 作者: 【 】 浏览:0
Tags:ELKStack 学习 笔记 -logstash 安装
前言:
?
最近因为工作需要正在研究ELK,为了避免时间一长把ELK的相关知识都忘掉。还是决心费点事,把学习时遇到的详细问题和进展都记录下来。方便自己后续查找资料。如果你也是ELK的初学者,强烈建议先看官方的文档。本文也是针对官方文档做的摘录。所以可能并不全面。仅作为一个ELK的入门者的学习笔记
?
安装前的准备:
?
确认java版本,本机安装的版本为1.8.0_45-B14.关于JDK的安装这里不在赘述。
?
安装logstash:
?
首先 下载logstash包,这里选择了版本1.5.4.
然而执行./logstash agent时报没有指定conf的配置文件。
在百度里搜索了一些ELK的安装文档,但说的都不太明白,故还是决定找官方文档来入门。官方文档地址见参考文献。
我们先按照官方文档写一个简单配置文件例子,做一下测试。以下为一个处理apachelog的logstash配置文件。我们暂时称为例子1.
?
#设置输入源,这里是从标准输入中读取。
input { stdin { } }
#设置使用的filter。
filter {
  grok {
    #message默认使用了apachelog的模板
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    #指明了时间格式
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}
#定义输出管道,这里一个是输出到本机的elasticSearch中,一个是输出到标准输出中。
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

?

?
?将以上内容保存为logstash.conf.然后运行
?
bin/logstash -f logstash.conf
待启动完毕,在控制台上输入以下文本进行测试
?
127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0"
回车后我们能看到以下输出。
?Bingo,貌似logstash已经起作用了,它把我们的输入文本,给切分为多个字段了。而且每个字段的命名都比较准确。猜测应该是我们配置了message的模板为"%{COMBINEDAPACHELOG}",而测试的文本也是一个apache的log日志中的一条。
?
按照官方文档来解释,起作用的是我们配置的“grok”的过滤器。grok按照每种log的格式预先定义了多种模板,只需使用时选定下你的日志适用的grok即可。更多的grok 模板可以从github上去获取。
?
?可以看到解析后的字段中出现了2处timestamp,一处带着@符号,另一处则是log中解析出来的时间。
?
OK,第一个例子已经结束。我们已经能看到logstash是如何处理日志文件的思路了。
?
下面我们在用一个更复杂些的例子来做下说明。这个例子中我们要实际解析一个apache的日志文件了。首先把配置文件贴上来。
?
input {
  file {
    #这里写的是linux下的绝对路径。用户可以根据自己机器情况来修改目录。这次我们过滤以_log为后缀的文件。
    path => "/Users/work/tmp/*_log"
    start_position => "beginning"
  }
}

filter {
  #条件判断语句,如果路径中有access。
  if [path] =~ "access" {
    # 增加一个type为apache_access字段的标签。
    mutate { replace => { "type" => "apache_access" } }
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG}" }
    }
date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
  #如果路径中有error,则认为是处理error日志
  }else if [path] =~ "error" {
    mutate { replace => { type => "apache_error" } }
  } else {
    mutate { replace => { type => "random_logs" } }
  }
}

output {
  elasticsearch {
    host => localhost
  }
  stdout { codec => rubydebug }
}

?

?
我们把以上文件命名为logstash-apache.conf.然后使用新配置文件启动logstash。启动完毕后,我们在配置中的路径下粘贴一个以_log为后缀的log文件。文件内容如下:
?
71.141.244.242 - kurt [18/May/2011:01:48:10 -0700] "GET /admin HTTP/1.1" 301 566 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"
134.39.72.245 - - [18/May/2011:12:40:18 -0700] "GET /favicon.ico HTTP/1.1" 200 1189 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; .NET4.0C; .NET4.0E)"
98.83.179.51 - - [18/May/2011:19:35:08 -0700] "GET /css/main.css HTTP/1.1" 200 1837 "http://www.safesand.com/information.htm" "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"
?
你会看到控制台上有输出。
?为什么输入3条日志,但仅输出2条解析后的日志,少了一条去哪里了?
?
以上就是一个以条件判断进行日志处理的例子。条件判断语句会非常有用,比如你可以判断下log中的status字段是否是500,如果为500,可以直接发送到nagios中去报警了,非常酷,是不是。如果你需要此功能,参考以下配置,只需要在output中配置就可以了。
?
output {
  if [type] == "apache" {
    i
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇EHR提取数据员工流失率分析 下一篇错误代码: 1050 Table 'emp&..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: