ELK系列一:ELK安装配置及nginx日志分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK系列一:ELK安装配置及nginx日志分析相关的知识,希望对你有一定的参考价值。

本文分三个部分介绍了elk、elk安装配置及基于filebeat分析nginx日志的配置。


第一部分:elk介绍

一、什么是elk

ELK 其实并不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ElasticsearchLogstash 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上

4.安装head插件

#cd /usr/share/elasticsearch/
#./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是一个开源的文件收集器,主要用于获取日志文件,并把它们发送到logstashelasticsearch。与libbeat lumberjack一起替代logstash-forwarder

2.Filebeat最初是基于logstash-forwarder源码的日志数据shipperFilebeat安装在服务器上作为代理来监视日志目录或特定的日志文件,要么将日志转发到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.namebrowser.osbrowser.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[email protected]/etc/filebeat/filebeat.template.json

(2)在elasticsearch界面导入

技术分享

5.启动服务

启动logstash服务

启动filebeat服务


本文出自 “linux之路” 博客,请务必保留此出处http://hnr520.blog.51cto.com/4484939/1845863

以上是关于ELK系列一:ELK安装配置及nginx日志分析的主要内容,如果未能解决你的问题,请参考以下文章

71-日志分析系统ELK-Logstash过滤Filesbeat数据及ELK日志采集生产案例

ELK系列二:kibana操作及nginx日志分析图表创建

centos6.5下安装配置ELK及收集nginx日志

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

ELK测试

企业日志分析ELK(Logstash+Elasticsearch+Kibana)介绍及搭建