1.基本概念
ELK:Elasticsearch + Logstash + Kibana
ELK官网:https://www.elastic.co/
ELK作用:数据采集分析展示一体化
Logstash的角色:数据采集
Elasticsearch的角色:数据存储分析
Kibana的角色:展示
2.安装
(a)logstash运行依赖jre,jre的安装可参考:ubuntu安装jre
(b)下载地址:https://www.elastic.co/,点击右上角downloads
(c)我选择的版本是logstash-2.2.2.tar.gz
(d)解压:tar -xzvf logstash-2.2.2.tar.gz
(e)解压即可用,执行程序在bin目录下面
3.启动参数
(a)启动参数查看 ./logstash -h
(b) -f :指定配置路径
(c) -t :测试配置
(d) -l :指定日志路径,否则输出到标准输出
(e)启动举例:
nohup ./logstash -f ../conf/logstach.conf -l ../log/logstash.log &
4.最简单的启动,启动完成后在屏幕输入"hello logstash",输出信息将会在标准输出格式化输出
./logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
5.配置
官方文档:https://www.elastic.co/guide/en/logstash/current/index.html
(a)logstash的配置主要由三块组成input、filter、output
(b)input :数据输入
(c)filter :数据预处理
(d)output :输出控制
6.插件
官方文档:https://www.elastic.co/guide/en/logstash/current/index.html
主要是参考官方文档的input、filter、output插件说明
7.配置举例
(a)需求:有多个路径的日志文件需要采集,需要对日志文件进行不同的解析,然后进行不同的处理,假设日志如下:
1457494295.865 200 GET /djgxZGNkYWJiZmE1MTNmZTE2MjBhNTY1MzlkMjAxYjY4MTIwMDIzMjkw HTTP/1.1 0.347 - 110.82.103.27 [ 09/Mar/2016:11:31:35 +0800 ] 0.347 godmusic.bs2dl.yy.com 758388 127 127.0.0.1:9999
(b)利用grok插件进行解析,grok插件有个模拟地址,http://grokdebug.herokuapp.com/
(c)数据输出到elasticsearch
(d)配置如下:logstash.conf
-
input {
-
file {
-
type => "udaccesslog"
-
path => "/data/ud_log/access.log"
-
}
-
file {
-
type => "routeraccesslog"
-
path => "/data/router_log/access.log"
-
}
-
}
-
filter {
-
if [type] == "udaccesslog" {
-
grok {
-
match => { "message" => "%{NUMBER:msec:float} %{NUMBER:status:int} %{WORD:method} %{URIPATHPARAM:request} (HTTP/%{NUMBER:http_version}) %{NUMBER:duration:float} (?:(?:%{URI:referrer}|-)|%{QS:referrer}) %{IP:clientip} (\[ %{HTTPDATE:timestamp} \]) %{NUMBER:upstream_duration:float} %{IPORHOST:domain} %{NUMBER:bytes_sent:int} %{NUMBER:request_length:int} %{IP:upstream_addr}\:%{NUMBER:upstream_port:int}" }
-
remove_field => [ "@version", "http_version", "msec", "host" ]
-
add_field => {
-
machine => "123.456.789"
-
zoneid => "8080"
-
}
-
}
-
mutate {
-
convert => {
-
"zoneid" => "integer"
-
}
-
}
-
}
-
if [type] == "routeraccesslog" {
-
-
}
-
}
-
output {
-
if [type] == "udaccesslog" {
-
elasticsearch {
-
hosts => ["123.456.787:9200", "123.456.788:9200", "123.456.789:9200"]
-
index => "udnginx-%{+YYYY.MM.dd}"
-
workers => 2
-
}
-
}
-
if [type] == "routeraccesslog" {
-
stdout { codec => rubydebug }
-
}
-
}
(e)配置的一些细节理解
file:默认从文件末尾读取,会记录读取的offset
index:可以理解成数据库database,可以按日期动态生成,这样方便按照日期管理数据
type:可以理解成数据库的table
grok:解析数据插件
mutate:可以改变值的类型的插件
(f)logstash的host不允许修改,所以建议用machine字段代替
(g)需留意logstash的资源使用率
小结:细节很多,主要看官网的配置文档
End;