zoukankan      html  css  js  c++  java
  • ELK 日志系统

    一、为什么要用到 ELK

    一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。 但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、 如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中 式日志收集系统,将所有节点上的日志统一收集,管理,访问。 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时, 大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

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

    • 收集-能够采集多种来源的日志数据
    • 传输-能够稳定的把日志数据传输到中央系统
    • 存储-如何存储日志数据
    • 分析-可以支持 UI 分析
    • 警告-能够提供错误报告,

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

    二、ELK 介绍

    ELK 是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。现在还有一个 FileBeat,它是一个轻量级的日志收集处理工具,Filebeat 占用资源少,适合于在各个服务 器上搜集日志后传输给 Logstash。

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

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

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

    • Filebeat 隶属于 Beats,Beats 包含四种工具:

      • Packetbeat(搜集网络流量数据)
      • Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
      • Filebeat(搜集文件数据)
      • Winlogbeat(搜集 Windows 事件日志数据)

    三、ELK系统搭建

        当有访问到达 Nginx 时; Nginx 响应请求,并在 access.log 文件中增加访问记录; FileBeat 搜集新增的日志,通过 LogStash 的 5044 端口上传日志;LogStash 将日志信息通过本机的 9200 端口传入到 ElasticSerach; 搜索日志的用户通过浏览器访问 Kibana,服务器端口是 5601;Kibana 通过 9200 端口访问 ElasticSerach;

    1、环境准备
    1.1、机器准备

    两台机器,版本为centos7.6
    ip 分别为:

    • 100.100.100.101
    • 100.100.100.104
    [root@localhost ~]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    
    1.2、环境配置(使用以下脚本,自动配置环境)
    #!/bin/bash
    str=`cat /etc/redhat-release |awk '{print $4}'|awk -F '.' '{print $1}'`
    version=0
    mkdir /etc/yum.repos.d/bak &>/dev/null
    mv /etc/yum.repos.d/* /etc/yum.repos.d/bak/ &>/dev/null
    if [ $str == 7 ];then
        version=7
    else
        version=6
    fi
    echo $version
    if [ $version -eq  7 ];then
        #关闭防火墙及开机自启
        systemctl stop firewalld
        systemctl disable firewalld
        #关闭selinux
        setenforce 0
        sed -i 7s/enforcing/disabled/g /etc/selinux/config
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
        #配置yum源
        wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    elif [ $version -eq 6 ];then
        #关闭防火墙及开机自启
        iptables -F
        service iptables stop
        chkconfig iptables off
        #关闭selinux
        setenforce 0
        sed -i 7s/enforcing/disabled/g /etc/selinux/config
        #配置yum源
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
        wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    else
        echo "please check your /etc/redhat-release file "
    fi
    yum clean all
    yum makecache
    
    1.3、下载软件包
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
    wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.tar.gz
    wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.3-linux-x86_64.tar.gz 
    
    1.4、安装 jdk
    [root@localhost ~]#yum -y install java-1.8*
    

    elk 服务器 如下

    2、安装 elasticsearch
    2.1、配置 elasticsearch
    [root@localhost ha]# useradd elasticsearch
    [root@localhost ha]# tar -zxvf elasticsearch-6.2.3.tar.gz  -C /usr/local/
    [root@localhost ha]# chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-6.2.3/
    [root@localhost ha]# su - elasticsearch
    [elasticsearch@localhost ~]$ cd /usr/local/elasticsearch-6.2.3/
    [elasticsearch@localhost elasticsearch-6.2.3]$ ./bin/elasticsearch -d
    
    2.2、测试是否能够访问
    [root@localhost ~]# curl localhost:9200 
    {
      "name" : "QLie7kD",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "5DVCMtU-R3iY7crfiaE6gA",
      "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、安装 logstash

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

    3.1、logstash 中 grok 的正则匹配
    [root@localhost ha]# tar -zxvf logstash-6.2.3.tar.gz -C /usr/local/
    [root@localhost ha]# vim /usr/local/logstash-6.2.3/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
    #添加如下配置 
    WZ ([^ ]*) NGINXACCESS %{IP:remote_ip} - - [%{HTTPDATE:timestamp}] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} %{QS:referer} %{QS:agent} %{QS:xforward}
    
    3.2 创建 logstash 配置文件
    [root@localhost ha]# vim /usr/local/logstash-6.2.3/default.conf 
    input {
        beats {       
            port => "5044"    
              } 
        } 
    filter {    
        grok {        
            match => { "message" => "%{NGINXACCESS}" }    
            }    
        geoip {       
    source => "100.100.100.101"
        } 
            } 
    output {
        elasticsearch {        
            hosts => ["127.0.0.1:9200"]    
        } 
    }
    
    3.3、启动
    [root@localhost ha]# cd /usr/local/logstash-6.2.3/
    [root@localhost logstash-6.2.3]# nohup bin/logstash -f default.conf &
    # 测试是否启动成功
    查看启动日志:tailf nohup.out 
    查看端口是否启动:netstat -napt|grep 5044
    
    4、配置 kibana
    4.1 修改配置文件
    [root@localhost ha]# tar -zxvf kibana-6.2.3-linux-x86_64.tar.gz -C /usr/local/
    [root@localhost ha]# vim /usr/local/kibana-6.2.3-linux-x86_64/config/kibana.yml
    server.host: "100.100.100.104"
    
    4.2、启动
    [root@localhost ha]# cd /usr/local/kibana-6.2.3-linux-x86_64/
    [root@localhost kibana-6.2.3-linux-x86_64]# nohup bin/kibana & 
    查看启动日志:[root@localhost kibana-6.2.3-linux-x86_64]# tail -f nohup.out 
    查看端口是否启动:[root@localhost kibana-6.2.3-linux-x86_64]# netstat -napt|grep 5601
    
    4.3、访问测试
    http://100.100.100.104:5601/
    

    nginx 服务器

    1、安装 nginx
    [root@localhost ~]# yum install nginx -y
    
    2、安装 filebeat
    [root@localhost ~]# tar -zxvf filebeat-6.2.3-linux-x86_64.tar.gz  -C /usr/local/
    
    2.1修改配置文件
    /usr/local/filebeat-6.2.3-linux-x86_64/filebeat.yml
    enable:false     #修改为 true 
    paths:/var/log/*.log   #修改为/var/log/nginx/*.log 
    #output.elasticsearch:   #将此行注释掉 
    #hosts: ["localhost:9200"]  #将此行注释掉 
    output.logstash:    #取消此行注释 
    hosts: ["100.100.100.104:5044"] #取消此行注释并修改 IP 地址为 ELK 服务器地址 
    
    2.2 启动
    [root@localhost ~]# cd /usr/local/filebeat-6.2.3-linux-x86_64/
    nohup ./filebeat -e -c filebeat.yml & 
    [1]+  运行中               nohup ./filebeat -e -c filebeat.yml &
    

    5、浏览器查看日志

    1、访问web界面
    http://100.100.100.104:5601
    

    2、因为我们使用logstash,所以输入 logstash-*,点击”Next step”

    3、选择 Time Filter,再点击“Create index pattern

    4、然后可自行创建日志内容查询规则

  • 相关阅读:
    Neko's loop HDU-6444(网络赛1007)
    Parameters
    SETLOCAL
    RD / RMDIR Command
    devenv 命令用法
    Cannot determine the location of the VS Common Tools folder.
    'DEVENV' is not recognized as an internal or external command,
    How to change Visual Studio default environment setting
    error signing assembly unknown error
    What is the Xcopy Command?:
  • 原文地址:https://www.cnblogs.com/hjnzs/p/12191466.html
Copyright © 2011-2022 走看看