zoukankan      html  css  js  c++  java
  • ELK日志分析

    1. 为什么用到ELK

      一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获取自己想要的信息。但是规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

      一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

    一个完整的集中式日志系统,需要包含以下几个主要特点:

    收集--能够采集多种来源的日志数据

    传输--能够稳定的把日志数据传输到中央系统

    存储--如何存储日志数据

    分析--可以支持UI分析

    警告--能够提供错误报告,监控机制 ELK 提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

    2. ELK简介

    ELK 是三个开源软件的缩写,分别表示:Elasticsearch、Logstash、Kibana,它们都是都是开源软件。新增了一个FileBeat,他是一个轻量级的日志收集处理工具(Agent),FileBeat占用资源少,适合于在各个服务器上收集日志后传输给Logstash,官方也推荐此工具。

    Elasticsearch 是个开源分布式搜索引擎,提供收集、分析、存储数据三大功能。它的特点有:分布式、零配置、自动发现、索引自动分片、索引副本机制、restful 风格接口、多数据源、自动搜索负载等。

    Logstash 主要是用来日志的收集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s 架构,客户(client)端安装在需要收集日志的主机上,server 端负责将收集到的各节点日志进行过滤、修改等操作再一起并发到 Elassticseaarch 上去。

    Kibana 也是一个开源和免费的工具,Kibana 可以成为Logstash 和Elasticsearch 提供的日志分析友好的web界面,可以帮助汇总、分析和搜索重要数据日志。

    FileBeat 隶属于 Beats。目前Beats 包含四种工具:

    Packetbeat (搜集网络流量数据)

    Topbeat(搜集系统、进程和文件系统级别的CPU 和内存使用情况等数据)

    FileBeat(搜集文件数据)

    Winlogbeat(搜集windows 事件日志数据)

     3. 实验部署

    本次部署的是filebeats(客户端),logstash+elasticsearch+kibana(服务端)组成的架构。

     业务请求到达nginx-server 机器上nginx,nginx 响应请求,并在access.log 文件中在增加访问记录;FileBeat 搜集数据的日志,通过Logstash 的5044 端口上传日志;Logstash 将日志信息通过本机的9200 端口传入到elasticsearch;搜集日志的用户通过浏览器访问 Kibana,服务器端口是5601;Kibana 通过9200 端口访问 Elasticsearch;

     实验环境:

    本次部署的是单点ELK 用了两台机器(Centos7)

    ELK 服务端:192.168.80.130

    Nginx 客户端:192.168.80.132

    3.1 准备工作

    配置网络yum源

    [root@localhost /etc/yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
    [root@localhost /etc/yum.repos.d]# wget http://mirrors.aliyun.com/repo/epel-7.repo

    关闭SELinux

    [root@localhost ~]# vim /etc/sysconfig/selinux 
    
    SELINUX=disabled

     开放防火墙端口

    firewall-cmd --zone=public --add-port=9200/tcp
    firewall-cmd --zone=public --add-port=9200/tcp --permanent
    firewall-cmd --zone=public --add-port=5601/tcp
    firewall-cmd --zone=public --add-port=5601/tcp --permanent
    firewall-cmd --zone=public --add-port=5044/tcp
    firewall-cmd --zone=public --add-port=5044/tcp --permanent

    3.2 下载并安装软件包

    [root@localhost ~]# mkdir /elk
    [root@localhost ~]# cd /elk/
    [root@localhost /elk]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
    [root@localhost /elk]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz
    [root@localhost /elk]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz

    3.3 安装JDK

    [root@localhost ~]# yum -y install java-1.8*

    3.4 配置elasticsearch

    1)新建 elasticsearch 用户并启动(使用elasticsearch 普通用户启动)

    [root@localhost /usr/local]# useradd elasticsearch
    [root@localhost /usr/local]# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-6.2.3/
    [root@localhost /usr/local]# su - elasticsearch
    [elasticsearch@localhost ~]$ cd /usr/local/elasticsearch-6.2.3/
    [elasticsearch@localhost ~]$ ./bin/elasticsearch -d

    2)查看进程是否正常启动(等待一会)

    [elasticsearch@localhost ~]$ netstat -antp

    3)若启动出错可查看日志

    [elasticsearch@localhost ~]$ cat /usr/local/elasticsearch-6.2.3/logs/elasticsearch.log

    4)测试是否可以正常访问

    [root@localhost /usr/local]# curl localhost:9200
    {
      "name" : "ezNB3lt",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "CDnRSJwDRbOLwOMEX5U0MA",
      "version" : {
        "number" : "6.2.3",
        "build_hash" : "c59ff00",
        "build_date" : "2018-03-13T10:06:29.741383Z",
        "build_snapshot" : false,
        "lucene_version" : "7.2.1",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }

    3.5 配置Logstash

    Logstash 收集nginx 日志使用 grok 过滤插件解析日志。grok 作为一个 Logstash 的过滤插件,支持根据模式解析文本日志行,拆成字段。

    1)logstash 中 grok 的正则匹配

    [root@localhost /usr/local/logstash-6.2.3]# vim vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns 
    #在最后添加以下内容
    #nginx
    WZ ([^ ]*)
    NGINXACCESS %{IP:remote_ip} - - [%{HTTPDATE:timestamp}] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}

    2)创建 logstash 配置文件

    [root@localhost /usr/local/logstash-6.2.3]# vim /usr/local/logstash-6.2.3/default.conf 
    input {
        beats {
            port => "5044"
        }
    }
    #数据过滤
    filter {
        grok {
            match => { "message" => "%{NGINXACCESS}" }
        }
        geoip {
            #nginx客户端ip
            source => "192.168.80.132"
        }
    }
    #输出配置为本机的9200端口,这是elasticsearch 服务的监听端口
    output {
        elasticsearch {
            hosts => ["127.0.0.1:9200"]
        }
    }

    3)进入到/usr/local/logstash-6.2.3 目录下,并执行下列命令

    后台启动logstash:nohup bin/logstash -f default.conf &
    查看启动日志:tail -f nohup.out
    查看端口是否启动:netstat -antp |grep 5044

    3.6 配置 Kibana

    1) 打开Kibana 配置文件 /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml,找到下面这行并修改

    vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
    #server.host: "localhost"
    修改为
    server.host: "192.168.80.130"
    这样其他电脑就能用浏览器访问Kibana 的服务

    2)进入Kibana 的目录:cd /usr/local/kibana-6.2.3-linux-x86_64/

    执行启动命令:nohup bin/kibana &
    查看启动日志:tail -f nohup.out
    查看端口是否启动:netstat -napt|grep 5601

    3)测试:

    在浏览器访问 192.168.80.130:5601

    至此,ELK 部署完成

    3.7 nginx 客户端配置

    1)安装nginx

    yum -y install nginx

    2)下载filebeat并解压到/usr/local/

    [root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.3-linux-x86_64.tar.gz
    [root@localhost ~]# tar -zxvf filebeat-6.2.3-linux-x86_64.tar.gz -C /usr/local/

    3)vim /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml,找到如下内容,修改

    enabled: false            #修改为true
    /var/log/*.log            #修改为/var/log/nginx/*.log
    #output.elasticsearch:    #将此行注释掉
    #hosts: ["localhost:9200"]    #将此行注释掉
    output.logstash:    #此行取消注释
    hosts: ["192.168.80.130:5044"]    #此行取消注释并修改IP地址为ELK服务器地址

    4)切换到/usr/local/filebeat-6.2.3-linux-x86_64 目录

    cd /usr/local/filebeat-6.2.3-linux-x86_64/
    后台启动:nohup ./filebeat -e -c filebeat.yml &
    查看日志:tail -f nohup.out

    5)通过浏览器多访问几次nginx服务,这样可以多制造一些访问日志,访问地址:https://192.168.80.132

    6)访问 Kibana:https://192.168.80.130:5601,点击左上角的Discover,就可以看到访问日志已经被ELk收集,然后按照以下步骤完成设置

      a. 输入logstash-*,点击"Next step"

      b. 选择time filter,再点击"Create index pattern"

      c. 然后自行创建日志内容查询规则

     
  • 相关阅读:
    CodeForces Gym 100935G Board Game DFS
    CodeForces 493D Vasya and Chess 简单博弈
    CodeForces Gym 100935D Enormous Carpet 快速幂取模
    CodeForces Gym 100935E Pairs
    CodeForces Gym 100935C OCR (水
    CodeForces Gym 100935B Weird Cryptography
    HDU-敌兵布阵
    HDU-Minimum Inversion Number(最小逆序数)
    七月馒头
    非常可乐
  • 原文地址:https://www.cnblogs.com/sswind/p/12061168.html
Copyright © 2011-2022 走看看