ELK环境搭建

来源:互联网 发布:vb清除窗体内容 编辑:程序博客网 时间:2024/06/06 02:02
线上地址:http://kibana.apuscn.com/
编辑此区域

什么是ELK

ELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用,而且又都先后归于 Elastic.co 公司名下,故有此简称。

  • Elasticsearch 开源的搜索引擎,基于lucene,负责数据的索引和存储

  • Logstash 日志采集器,负责日志的采集和格式化。(可以被替代,例如fluentd,kafka等)

  • Kibana 一个基于浏览器页面的Elasticsearch前端展示工具,负责数据的可视化

编辑此区域

ELK系统的搭建

使用版本:

  • ElasticSearch 2.2

  • Logstash 2.2

  • Kibana 4.4

要求:JDK 1.7以上

其他:解压后即可使用,简单方便

ElasticSearch的配置

  • shards:主分片与复制分片 (数据的重要性,查询qps)

  • node:系统的可靠性

默认5主分片,1复制片

node起两组

编辑此区域

ELK系统的使用

编辑此区域

日志采集

logstash配置文件的结构

# This is a comment. You should use comments to describe# parts of your configuration.input {  ...}filter {  ...}output {  ...}

Inputs,Outputs,Filters构成了Logstash的核心配置项。Logstash通过这3项的配置,建立一条事件处理的管道。

各个配置项下的的配置都是以插件的形式存在,这也为logstash提供了强大的扩展能力。

编辑此区域

input

input的机制是让日志数据进入logstash。比如下面常用的:

  • file: 以文件来读取日志数据,像linux的tail -0a命令。

  • syslog:监听514端口的系统日志消息,并根据RFC3164格式解析。

  • redis: 采用redis来读取。

  • kafka: 从kafka消息队列中读取

常用的file配置举例:

input {  file {    path => "/var/log/messages"    type => "syslog"  }  file {    path => "/var/log/apache/access.log"    type => "apache"  }}
编辑此区域

filter

filter通常使用是介入logstash的链中处理数据。它的处理是管道化的,根据配置的顺序进行处理。一些常用的filter:

  • grok: 几乎可以解析任何文本的数据,它能把数据格式化成你需要的查询格式。系统提供了120种正则,很多都是你需要的。

  • mutate: 你可以使用它重命名,删除,替换和修改field。

  • geoip: 增加有关ip地理位置的信息

  • json: 解析json格式的数据

grok语法

https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

grok 里写标准的正则,像下面这样(类似perl):\s+(?<request_time>\d+(?:\.\d+)?)\s+grok使用的正则语法oniguruma:https://github.com/kkos/oniguruma/blob/master/doc/RE内置匹配样式的使用:%{SYNTAX:SEMANTIC}

内置的匹配样式

https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

编辑此区域

output

输出时logstash的最后处理阶段了。一个事件可以通过多个输出来处理,但是一旦所有的输出都完成,这事件将运行结束。

  • elasticsearch: 如果你打算把你的数据保存在一个高效、便捷、容易的地方,elasticsearch是不错的选择。

  • file: 保存入文件

  • stdout: 标准输出

编辑此区域

线上配置示例

input {                                                                                                                                             file {    type => "offerinfo_wf"        path => "/mnt/logs/api/offerinfo/offerinfo.log.wf*"    exclude => "*.monitor.old"        close_older => 3600    }       file {    type => "radar_wf"        path => "/mnt/logs/api/radar/radarwf.*"    exclude => ["*.monitor.old", "*.gz"]        close_older => 3600    }   }filter {    if [type] == "offerinfo_wf" {        grok {        match => { "message" => "%{WORD:level}: %{TIMESTAMP_ISO8601:timestamp} \[%{DATA:errorfile}:%{NUMBER:errorline}\] errno\[%{NUMBER:errno}\] ip\[%{IP:ip}\] logId\[%{NUMBER:log_id}\] uri\[%{DATA:uri}\] %{GREEDYDATA:loginfo}"}        remove_field => ["message"]        }       }elseif [type] == "radar_wf" {        grok {        match => { "message" => "\[%{WORD:level}\] \[%{TIMESTAMP_ISO8601:timestamp}\] \[log_id:%{NUMBER:log_id},%{DATA:log_message}\] \|%{DATA:log_data}\|%{GREEDYDATA:baseinfo}"}        remove_field => ["message"]        }           json {        source => baseinfo        remove_field => ["baseinfo"]        }     }}output {    elasticsearch {        hosts => "172.31.4.209:9200"        index => "logstash-%{type}-%{+YYYY.MM.dd}"        document_type => "%{type}"    }}
编辑此区域

kibana入门¶

编辑附件

2Zo3bPa3.png 查看 (90.6 KB) 郑 铭兴, 2016-03-08 14:12

新建文件