设为首页 收藏本站
查看: 745|回复: 0

[经验分享] ELK系列一:ELK安装配置及nginx日志分析

[复制链接]

尚未签到

发表于 2018-11-12 12:12:23 | 显示全部楼层 |阅读模式
  本文分三个部分介绍了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
  在浏览器输入以下地址即可看相关页面
DSC0000.png

  二、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/
DSC0001.png

  出现红框中的内容说明能够正常解析
  3.导入索引模板文件
  不导入将只有以下几个字段
DSC0002.png

  模板文件内容
  {
  "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界面导入
DSC0003.png

  5.启动服务
  启动logstash服务
  启动filebeat服务



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-634139-1-1.html 上篇帖子: haproxy+keepalived+nginx(源码) 下篇帖子: nginx proxy_pass中的/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表