ELK安装配置及nginx日志分析
一、ELK简介1、组成
ELK是Elasticsearch、Logstash、Kibana三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合使用,而且又都先后归于 Elastic.co 公司名下,故有此简称。
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用。
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
2、工作流程
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
二、ELK安装及配置
1、系统及软件版本介绍:
系统:CentOS6.5_64
elasticsearch:elasticsearch-2.3.5.tar.gz
logstash:logstash-2.3.4.tar.gz
kibana:kibana-4.5.4-linux-x64.tar.gz
redis:redis-2.8.17.tar.gz
JDK:jdk-8u73-linux-x64.tar.gz
2、服务器规划
在两台服务器安装ELK组件
A(需要分析的nginx日志服务器):安装logstash(logstash agent)
B(ELK服务端):安装elasticsearch、logstash(logstash index)、kibana、redis
软件包安装目录:/data/elk
3、创建用户
# groupadd app
# useradd
-g app -d /data/elk elk
4、安装及配置JDK
logstash及elasticsearch需要JDK支持
# su - elk
$
tar zxf jdk-8u73-linux-x64.tar.gz
$ vim .bash_profile (添加及修改如下内容)
JAVA_HOME
=/data/elk/jdk1.8.0_73
PATH
=${JAVA_HOME}/bin:$PATH:$HOME/bin
export PATH JAVA_HOME
$ . .bash_profile
执行java -version命令查看到如下内容表示JDK配置OK。
java version "1.8.0_73"
Java(TM) SE Runtime Environment (build
1.8.0_73-b02)
Java HotSpot(TM)
64-Bit Server VM (build 25.73-b02, mixed mode)
注:以上3-4步在A、B服务器都需要进行操作。
5、A服务器安装及配置logstash(logstash agent)
$ tar zxf logstash-2.3.4.tar.gz
$
mv logstash-2.3.4 logstash
$
mkdir logstash/conf
$ vim logstash
/conf/logstash_agent.conf #手动创建logstash配置文件,添加如下内容
input {
file { type
=> "nginx access log" path
=> ["/app/nginx/logs/access.log"]#nginx日志路径 }
}
output {
redis {
host
=> "123.56.xx.xx" #redis server IP port
=> "6079" #redis server port data_type
=> "list" #redis作为队列服务器,key的类型为list key
=> "logstash:redis" #key的名称,可以自定义 }
}
语法检查:
$ ./logstash -t -f ../conf/logstash_agent.conf
Configuration OK
启动logstash(最好是在B服务器安装好redis后再进行启动):
$ cd logstash/bin
$ nohup .
/logstash -f ../conf/logstash_agent.conf &
$
tail -f nohup.out#查看日志,输出以下内容,表示logstash正常启动
{:timestamp
=>"2016-12-05T11:06:35.407000+0800", :message=>"Pipeline main started"}
注:以下安装及配置内容全部在B服务器上进行
6、安装及配置redis
这个比较简单(过程略,端口使用6079)
启动redis
/data/elk/redis/bin/redis-server /data/elk/redis/conf/redis.conf
7、安装及配置elasticsearch
$ tar zxf elasticsearch-2.3.5.tar.gz
$
mv elasticsearch-2.3.5 elasticsearch
$
mkdir elasticsearch/{logs,data}#创建日志及数据存放目录
$ vim elasticsearch
/config/elasticsearch.yml#修改如下内容
cluster.name: server
node.name: node
-1
path.data:
/data/elk/elasticsearch/data
path.logs:
/data/elk/elasticsearch/logs
network.host:
123.56.xx.xx
http.port:
9200
启动elasticsearch
$ cd elasticsearch/
$ nohup .
/bin/elasticsearch &
通过浏览器访问:
http://123.56.xx.xx:9200/
安装elasticsearch-head插件:
$ cd elasticsearch/bin/
$ .
/plugin install mobz/elasticsearch-head
访问http://123.56.xx.xx:9200/_plugin/head/,可以查看集群状态,集群的内容,执行搜索和普通的rest请求等:
8、安装及配置logstash(logstash index)
$ tar zxf logstash-2.3.4.tar.gz
$
mv logstash-2.3.4 logstash
$
mkdir logstash/conf
$ vim logstash
/conf/logstash_indexer.conf #手动创建logstash配置文件,添加如下内容
input {
redis {
host
=> "123.56.xx.xx" port
=> "6079" data_type
=> "list" key
=> "logstash:redis" type
=> "redis-input" }
}
filter {
grok {
match
=> { "message" => "%{NGINXACCESS}" } }
geoip {
source
=> "clientip" add_tag
=> [ "geoip" ] database
=> "/data/elk/logstash/GeoLiteCity.dat" add_field
=> [ "", "%{}" ] add_field
=> [ "", "%{}"] }
mutate {
convert
=> [ "", "float"] }
date { match
=> [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z" ] remove_field
=> [ "timestamp" ] }
useragent {
source
=> "http_user_agent" target
=> "browser" }
}
output {
elasticsearch {
hosts
=> ["123.56.xx.xx:9200"] }
stdout {codec
=> rubydebug}
}
配置Logstash以使用GeoIP,下载最新的GeoLite城市数据库
$ cd /data/elk/logstash
$ curl
-O "http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz"
$
gzip -d GeoLiteCity.dat.gz
添加geo_point映射
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json
curl -XPUT 'http://123.56.xx.xx:9200/_template/filebeat?pretty' -d@filebeat-index-template.json
定义nginx日志匹配规则
$ mkdir logstash/patterns
$ vim nginx#添加内容如下:
NGUSERNAME [a
-zA-Z\.\@\-\+_%]+
NGUSER
%{NGUSERNAME}
NGINXACCESS
%{IPORHOST:clientip} - %{NOTSPACE:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NOTSPACE:http_x_forwarded_for}
检查配置并启动logstash
$ ./logstash -t -f ../conf/logstash_indexer.conf
Configuration OK
nohup .
/logstash -f ../conf/logstash_indexer.conf &
9、安装及配置kibana
$ tar zxf kibana-4.5.4-linux-x64.tar.gz
$
mv kibana-4.5.4 kibana
$
vi kibana/config/kibana.yml #修改内容如下
elasticsearch.url:
"http://123.56.xx.xx:9200"
启动kibana
$ cd kibana/bin
$ nohup .
/kibana &
访问kibana
浏览器打开http://123.56.xx.xx:5601/
创建索引
使用默认的logstash-*的索引名称,并且是基于时间的,点击“Create”即可。
页:
[1]