本文分三个部分介绍了elk、elk安装配置及基于filebeat分析nginx日志的配置。
第一部分:elk介绍
一、什么是elk
ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用。
二、Elasticsearch
1.Elasticsearch介绍
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,使用 Java 语言编写。目前,最新的版本是 2.3.4。
2.Elasticsearch特点
(1)实时分析
(2)分布式实时文件存储,并将每一个字段都编入索引
(3)文档导向,所有的对象全部是文档
(4)高可用性,易扩展,支持集群(Cluster)、分片和复制(Shards和 Replicas)
(5)接口友好,支持 JSON
三、Logstash
1.Logstash介绍
Logstash 是一个具有实时渠道能力的数据收集引擎。使用 JRuby 语言编写。目前最新的版本是 2.3.4。
2.Logstash特点
(1)几乎可以访问任何数据
(2)可以和多种外部应用结合
(3)支持弹性扩展
3.Logstash它组件
(1)Shipper-发送日志数据
(2)Broker-收集数据,缺省内置 Redis
(3)Indexer-数据写入
四、Kibana
1.Kibana介绍
Kibana 是一款基于 Apache 开源协议,使用JavaScript 语言编写,为 Elasticsearch 提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。目前最新的版本是 4.5,简称Kibana 4。
第二部分:elk安装
从官网下载最新版rpm包安装,系统需要安装jdk1.7以上。
软件包:
elasticsearch-2.3.4.rpm
kibana-4.5.3-1.x86_64.rpm
logstash-2.3.4-1.noarch.rpm
实验环境:
elasticsearch:192.168.115.11
kibana:192.168.115.12
logstash:192.168.115.11
filebeat:192.168.115.13
以上操作系统均为centos7
一、elasticsearch安装
1.软件安装
#rpm -ivh elasticsearch-2.3.4.rpm
安装完主要生成以下文件
/etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/logging.yml /etc/elasticsearch/scripts /etc/init.d/elasticsearch /etc/sysconfig/elasticsearch /usr/share/elasticsearch
2.修改配置服务启动脚本
# cat /etc/sysconfig/elasticsearch 添加JAVA_HOM,否则服务无法正常启动 JAVA_HOME=/usr/local/java
3.修改elasticsearch配置文件
# cat /etc/elasticsearch/elasticsearch.yml index.number_of_replicas: 0 # 默认副本数为1,由于是单机安装默认1个副本造成集群健康状态为yellow,影响后期使用 path.data: /data/elasticsearch/data # 由于采用rpm包安装,需要定义数据保存位置,默认保存在/usr/share/elasticsearch/data下 path.logs: /data/elasticsearch/logs # 修改日志保存位置 network.host: 192.168.115.11 # 修改监听地址,默认将监听在127.0.0.1上 修改数据目录属主属组 chown -R elasticsearch.elasticsearch /data/elasticsearch
4.安装head插件
#cd /usr/share/elasticsearch/bin #./plugin install mobz/elasticsearch-head
5.启动服务
systemctl daemon-reload systemctl enable elasticsearch.service service elasticsearch start
在浏览器输入以下地址即可看相关页面
二、kibana安装
1.软件安装
#rpm -ivh kibana-4.5.3-1.x86_64.rpm
安装完主要生成以下文件
/etc/default/kibana /etc/init.d/kibana /lib/systemd/system/kibana.service
2.修改配置文件
修改连接elasticsearch
#cat /opt/kibana/config/kibana.yml elasticsearch.url:"http://192.168.115.11:9200"
3.启动服务
service kibana start
三、logstash安装
#rpm -ivh logstash-2.3.4-1.noarch.rpm 安装完主要生成以下文件 /etc/init.d/logstash /etc/logrotate.d/logstash /etc/logstash/conf.d /etc/sysconfig/logstash
2.修改服务启动脚本
PATH中要加入java位置否则服务无法启动 # cat /etc/init.d/logstash PATH=/usr/local/java/bin:/sbin:/usr/sbin:/bin:/usr/bin LS_HOME=/data/logstash #cat /etc/sysconfig/logstash JAVA_HOME=/usr/local/java/bin JAVACMD=/usr/local/java/bin/java LS_HOME=/data/logstash
第三部分:基于filebeat分析nginx日志
nginx日志定义格式
log_format access_log
'$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$request_time"' '"$upstream_addr"' '"$upstream_response_time"';
nginx日志内容
124.237.34.129 - - [27/Jul/2016:15:11:09 +0800] GET /gateway/web/home/pastQuestions/getQuestionCount?_q_=1469603400403 HTTP/1.1 "200" 60 "http://med.ihbedu.com/front/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 UBrowser/5.6.14087.9 Safari/537.36" "0.361""172.17.54.22:8080""0.361"
一、filebeat介绍
1.Filebeat是一个开源的文件收集器,主要用于获取日志文件,并把它们发送到logstash或elasticsearch。与libbeat lumberjack一起替代logstash-forwarder。
2.Filebeat最初是基于logstash-forwarder源码的日志数据shipper。Filebeat安装在服务器上作为代理来监视日志目录或特定的日志文件,要么将日志转发到Logstash进行解析,要么直接发送到Elasticsearch进行索引。
二、filebeat安装
1.软件安装
#rpm -ivh filebeat-1.2.3-x86_64.rpm
2.修改filebeat配置
#cat /etc/filebeat/filebeat.yml filebeat: prospectors: - paths: - "/data/nginx_log/*.log" document_type: nginx_access registry_file: /var/lib/filebeat/registry output: logstash: hosts: ["192.168.115.11:5044"]
三、logstash配置
1.创建分析nginx日志配置文件
#cd /etc/logstash/conf.d #vi logstash_server_nginx.conf input { beats { host => "192.168.115.11" port => 5044 type => "logs" } }
filter { if [type] == "nginx_test" { grok { match => { "message" => "%{NGINXACCESS}" } } } if [type] == "nginx_access" { grok { match => { "message" => "%{NGINXACCESS_PRO}" } } date { match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z" ] remove_field => [ "timestamp" ] } geoip { source => "remote_addr" add_tag => [ "geoip" ] } useragent { source => "http_user_agent" target => "browser" } } }
output { if "_grokparsefailure" in [tags] { file { path => "/var/log/logstash/grokparsefailure-%{[type]}-%{+YYYY.MM.dd}.log" } } elasticsearch { hosts => ["192.168.115.11:9200"] sniffing => true manage_template => false index => "%{[@metadata][beat]}-nginx-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" template_overwrite => true } }
配置文件说明:
# geoip IP地址库,可以根据客户端ip,解析对应的地域信息,包括国别、省市、经纬度,用于可视化地图、区域信息统计(公网ip)
# useragent根据http_user_agent信息解析出客户端浏览器类型、操作系统类型、客户端设备(browser.name、browser.os、browser.device)
# date 将日志中产生的时间转换为@timestamp时间,而后删除该字段,在导入旧数据时非常有用,可以按旧数据的时间段产生数据便于按日志中的时间进行图表分析,同时解决数据流程中进过缓冲区,最终处理时间与事件产生的时间偏差问题
例如:nginx的日志时间 01/Aug/2016:17:28:17 +0800 可以写成 "dd/MMM/yyyy:HH:mm:ss Z"
mongodb的日志时间 2016-08-02T20:39:50.405+0800 可以写成 "ISO8601"
2.定义nginx日志匹配规则
cat/opt/logstash/patterns/nginx
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:http_host} %{IPORHOST:clientip} \[%{DATA:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{NUMBER:request_time:float}
NGINXACCESS_PRO %{IPORHOST:remote_addr} - - \[%{HTTPDATE:timestamp}\] %{WORD:method} %{NOTSPACE:request} HTTP/%{NUMBER:httpversion} \"%{NUMBER:status}\" (?:%{NUMBER:body_bytes_sent}|-) %{QS:http_referer} %{QS:http_user_agent} \"%{NUMBER:request_time:float}\"\"(%{URIHOST:upstream_addr}|-)\"\"(%{NUMBER:upstream_response_time:float}|-)\"
注意:匹配规则字段顺序跟日志内容按顺序一一对应,严格区分空格,双引号需要转译
通过grok在线调式地址,测试所写的规则能否解析日志
https://grokdebug.herokuapp.com/
出现红框中的内容说明能够正常解析
3.导入索引模板文件
不导入将只有以下几个字段
模板文件内容
{
"mappings": {
"_default_": {
"_all": {
"enabled": true,
"norms": {
"enabled": false
}
},
"dynamic_templates": [
{
"template1": {
"mapping": {
"doc_values": true,
"ignore_above": 1024,
"index": "not_analyzed",
"type": "{dynamic_type}"
},
"match": "*"
}
}
],
"properties": {
"@timestamp": {
"type": "date"
},
"message": {
"type": "string",
"index": "analyzed"
},
"offset": {
"type": "long",
"doc_values": "true"
},
"geoip" : {
"type" : "object",
"dynamic": true,
"properties" : {
"location" : { "type" : "geo_point" }
}
}
}
}
},
"settings": {
"index.refresh_interval": "5s"
},
"template": "filebeat-*"
}
4.导入方式有两种:
(1)通过curl命令导入
curl -XPUT 'http://192.168.115.11:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json
(2)在elasticsearch界面导入
5.启动服务
启动logstash服务
启动filebeat服务