ELK 2 – 配置、实践

ELK中,主要关心logstash的配置,es只是作为存储容器。

logstash

2、rubydebug格式输出

./bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'  

image

3、配置文件 输出到elasticsearch

配置项

input、filter、output

命令

[elk@linux2 elasticsearch-2.3.5]$ ./bin/logstash agent -f my.conf

① my.conf 内容

input {

    file{
        path => "/export/servers/tomcat7/logs/ip.txt"
        start_position => "beginning"
    }
}

output {
    elasticsearch {
        hosts => "192.168.1.204:9200"
        }
    stdout{codec=>rubydebug}
}

#测试时,建议一直保留标准输出,这样可以直观看到变化

读取位置

start_position => "beginning"/"end"  每次从文件什么位置读取。默认为end。
beginning时,会把上次读取位置存在  /root/.sincedb_dbd93513aa1097729e1c1c9ac4b87310 这个文件中。要想每次从头读取,就要删除。

后台启动

 nohup ./bin/logstash agent -f my.conf & 

启动日志存在同级目录nohup.out这个文件里

 


实践一 elk互通

logstash的配置如①

es配置

path.data: /export/servers/elk/elasticsearch-2.3.5/data
path.logs: /export/servers/elk/elasticsearch-2.3.5/logs

network.host: 192.168.1.204
http.port: 9200

kibana配置

server.port: 5601
server.host: "192.168.1.204"

elasticsearch.url: http://192.168.1.204:9200

 

因为在logstash中配置了输出到es,所以要先启动es

ip.txt内容

image

202.99.198.174 - - [25/Aug/2016:14:22:26 +0800] "GET / HTTP/1.1" 200 11217
202.99.198.174 - - [25/Aug/2016:14:22:27 +0800] "GET /tomcat.css HTTP/1.1" 200 5576
202.99.198.174 - - [25/Aug/2016:14:22:27 +0800] "GET /tomcat.png HTTP/1.1" 200 5103

es启动图

上部分信息是启动信息,下面是收到日志信息

image

LS图

同时设置了标准输出,所以窗口也会实时显示日志

image

kibana

image


实践二 自定义字段

准备

1、删除/root/.sincedb_xxx 文件

logstash的配置

grok过滤,指定一些字段

作用:为kibana的图表展示准备字段

建议看官网示例https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

input {

    file{
        path => "/export/servers/tomcat7/logs/ip1.txt"
        start_position => "beginning"
    }
}

filter{

    grok {
        match=>{ "message"=>"%{IP:client} (%{USERNAME:ident}|-) (%{USERNAME:auth}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} (HTTP/%{NUMBER:http_version}|-)\" %{NUMBER:response} %{NUMBER:bytes}" }

    }
}

output {
    elasticsearch {
        hosts => "192.168.1.204:9200"
        }
      stdout{codec=>rubydebug}
}

grok的正则不匹配,就不会出现自定义的字段。kibana的各种图表就没法做了。

正则工具

官方:http://grokdebug.herokuapp.com/(不好访问)

工具:http://tool.lu/regex/

image

image


实践三 制作图表

改filter,其他配置同二。

filter{

    grok {
        match=>{ "message"=>"%{IP:client} (%{USERNAME:ident}|-) (%{USERNAME:auth}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} (HTTP/%{NUMBER:http_version}|-)\" %{NUMBER:response} %{NUMBER:bytes}" }
    }
    geoip {
        source => "client"
    }
}

运行elk,因为加了geoip,kibana首页左边会多很多字段。

image

在图表中生成地理位置信息图

具体操作,参考:

简要:http://my.oschina.net/itblog/blog/547250#OSC_h4_8

丰富:http://www.cnblogs.com/yincheng/p/logstash.html?utm_source=tuicool&utm_medium=referral

image

如果是自定义的index,可能无法制作tile map,参考:Kibana的图形化——Tile Map


实践四 tomcat/logs/project.log

以时间分割日志

2016-08-25 18:03:25
[INFO]-[com.asin.module.industry.member.web.RecommendController.initRecommender()]: 推荐人信息==null

2016-08-25 18:03:25
[ERROR]-[com.asin.module.marketing.bidsale.support.AUpBidSale.update()]: 商家录入数据异常!!!

logstash配置

input {

    stdin{
   
        codec => multiline {
            pattern => "%{DATE} %{TIME}"
            negate => true
            what => "previous"
        }
    }
}

对于日志文件,logstash不是认行,多行可能被放在一个msg里面,叫做一个事件,所以我猜这就是设置codec作用。


实践五 只收集ERROR

input {
   file {
    path => "/export/servers/tomcat7/logs/catalina.out"
    start_position => "beginning"
    codec => multiline {
       pattern => "^20"
       negate => true
       what => "previous"

       charset => "GBK"  #若需要,指定编码
    }
   }
}
filter {
    grok {
        patterns_dir => "/export/servers/elk/logstash-2.3.4/patterns/java"
        match => { "message" => "%{LOGTIME:errtime}\n\[%{LOGLEVEL:level}\]-%{JAVALOGMESSAGE:logmessage}"}
    }
    if [level] != "ERROR" {
          drop {}
    }
}

自定义正则:

LOGTIME 20%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})


后台运行

elasticsearch: ./bin/elasticsearch –d

logstash: nohup ./bin/logstash agent –f my.conf &

kibana: nohup ./bin/kibana &  (退出ssh会话时,不要直接关闭,要输入  exit 命令)

posted @ 2016-08-26 10:02  干货  阅读(493)  评论(0编辑  收藏  举报