zoukankan      html  css  js  c++  java
  • CentOS7 搭建ELK日志分析系统过程

    ELK简介

    ELK是什么?

        elk是三个开源软件的缩写,分别是:Elasticsearch、Logstash、Kibana 。由于Logstash 客户端太占用资源,对服务器的要求比较高,后来FileBeat出现了 ,解决了资源问题,官方也推荐这个工具。

        Elasticsearch:实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能

        Logstash:日志收集,分析,过滤并转化到对应的存储库

        Kibana:一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据

        Filebeat:监控日志文件、转发。 需要收集数据的服务器端需要安装这个

    架构图


    600


    如上图你可以看出来,FileBeat 将数据 通过队列 发给 Logstash ,然后Logstash 在将数据给 Elasticsearch 存储。kibana结合nginx 提供web界面

    环境准备

    软件名称安装的端IP
    elasticsearch管理端服务器192.168.0.1
    Logstash管理端服务器192.168.0.1
    Kibana管理端服务器192.168.0.1
    FileBeat日志端服务器192.168.0.2
    Redis管理端服务器192.168.0.1

    准备工作

    设置官方源

    ## 下载并安装公共签名密钥
    rpm --import  https://artifacts.elastic.co/GPG-KEY-elasticsearch
    
    ## 设置repo内容
    vim    /etc/yum.repos.d/elasticsearch.repo
    
    ## 在repo中添加如下内容
    [elasticsearch-6.x]
    name=Elasticsearch repository for 6.x packages
    baseurl=https://artifacts.elastic.co/packages/6.x/yum
    gpgcheck=1
    gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
    enabled=1
    autorefresh=1
    type=rpm-md

    Java环境安装

    elasticsearch 需要java环境支持,执行如下命令

    ## 安装java 环境
    yum install java -y
    ## 验证是否安装好
    java -version

    Elasticsearch 安装和配置

    安装

    yum -y install elasticsearch
    ##设置为自启动
    systemctl enable elasticsearch

    配置

    配置文件路径:/etc/elasticsearch/elasticsearch.yml

    核心参数

    ## 集群名字
    cluster.name: app-log
    ## 节点名字
    node.name: node-1
    ## 数据存放地址
    path.data: /data1/es/data
    ## 日志文件地址(可不修改)
    path.logs: /var/log/elasticsearch

    命令介绍

    ## 启动
    service elasticsearch {start|restart|reload}
    
    ## 停止
    service elasticsearch stop

    验证

    curl -X GET http://localhost:9200
    
    输出结果如下
    {
      "name" : "node-1",
      "cluster_name" : "app-log",
      "cluster_uuid" : "oVk4kUzKTCOsc2zaViOMXA",
      "version" : {
        "number" : "6.8.13",
        "build_flavor" : "default",
        "build_type" : "rpm",
        "build_hash" : "be13c69",
        "build_date" : "2020-10-16T09:09:46.555371Z",
        "build_snapshot" : false,
        "lucene_version" : "7.7.3",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You Know, for Search"
    }

    Logstash 安装

    安装

    yum -y install logstash
    ## 自启动
    systemctl enable logstash

    配置放在后面讲,和FileBeat一起讲更容易理解

    Kibana 安装和配置

    安装

    yum -y install kibana nginx
    ## 设置自动启
    systemctl enable kibana

    命令介绍

    ## 启动
    service kibana {start|restart|reload}
    
    ## 停止
    service kibana stop

    nginx 配置

    server {
        listen       80;
        server_name  log.corp.jixuejima.cn;
        location / {
            proxy_pass http://localhost:5601;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }

    效果图

    600


    Redis安装和配置

    由于我是用的是阿里云redis服务,这个可以直接用

    FileBeat 安装和配置

    安装

    yum  -y install  filebeat 
    ## 设置自启动
    systemctl enable filebeat

    配置

    配置路径:/etc/filebeat/filebeat.yml

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /xxxx/dispatch.log
      fields:
        log_source: jobs
    
    
    output.redis:
      hosts: ["xxxxxyyyyyzzzz.redis.rds.aliyuncs.com"]
      port: 6379
      db: 2
      timeout: 5
      key: "logstash_list"
    
    
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~


    注解:FileBeat 是转发日志内容到指定的管道对象(这里使用的是阿里云的redis),其中需要注意的是 log_source  这个是我自定义的日志来源,方便后面Logstash进行日志处理。上面的配置就是讲 日志 放到 redis队列中,队列叫做:logstash_list

    命令介绍

    ## 启动
    service filebeat {start|restart|reload}
    
    ## 停止
    service filebeat stop

    Logstash 配置

    配置

    前面说过,关于Logstash的配置放到FileBeat安装之后,这个没有先后顺序,只是方便大家理解 才专门单独放到后面讲解。FileBeat 将 日志放到了redis中。那么Logstash就要从redis中取出数据。

    配置路径:/etc/logstash/conf.d/log.conf

    input {
      redis {
        data_type => "list"
        key => "logstash_list"
        host => "xxxxxyyyyyzzzz.redis.rds.aliyuncs.com"
        port => 6379
        db => 2
      }
    }
    
    filter {
    
        if "cleared" in [message] or "运行时间未到" in [message] or "DEBUG 运行命令" in [message] {
           ### 丢弃
           drop{}
        }
        
        if "yii queue" in [message] and "start" in [message] {
           drop{}
        }
        
        
        if "jobs" == [fields][log_source] {
        
          grok {
                match =>{
                  "message" => "job_id:%{NUMBER:job_id}"
                }
            }
        
        }
        
        
        
        
        mutate {
          remove_field => ["@version","[beat][name]","[beat][hostname]","[beat][version]","[host][architecture]","[host][containerized]","[host][id]","[host][os][codename]","[host][os][family]","[host][os][name]","[host][os][platform]","[host][os][version]","[meta][cloud][provider]","[prospector][type]","[log][file][path]","[input][type]","[meta][cloud][region]","http_version"]
        }
    
    }
    
    output {
    
      if "jobs" == [fields][log_source] {
        elasticsearch {
           hosts => ["localhost:9200"]
           index => "jobs-%{+YYYY.MM.dd}"
        }
      }
    }


    注解:

    • 上面的input配置的和FileBeat同一个Redis配置,说明从Redis获取数据。

    • filter 区域表示过滤处理,上面是根据我自己的业务进行日志丢弃(因为有些日志记录是没有意义的)。根据来源进行 数据匹配 然后单独存储更改值( 如下图,将message字段中的job_id 单独提取作为一个字段 )

    • filter 中的 mutate 配置了删除一些字段,有些字段都一样,存在没意义,减少存储日志量


    600

    • output 配置中 判断来源,然后设置存储在Elasticsearch 中并且索引规则按照定义好的生成(如下图)

    600

    命令介绍

    ## 启动
    service logstash {start|restart|reload}
    
    ## 停止
    service logstash stop

    技巧

    Kibana界面设置成中文?

    配置路径:/etc/kibana/kibana.yml

    ## 改成如下 然后重启Kibana
    i18n.locale: "zh-CN"



    原文地址:CentOS7 搭建ELK日志分析系统过程
    标签:linux   es   elasticsea   kibana   logstash   elk   centos   

    智能推荐

  • 相关阅读:
    java程序员面试笔记宝典 note
    JVM常见面试题
    面试&笔试总结 数据库、网络协议、常识
    面试&笔试总结 Java框架篇
    面试准备&总结-Java基础篇
    JDBC事务管理及SavePoint示例
    JSP的内置对象
    Java中的集合框架
    .NET WEBAPI 添加中英文切换,国际化项目
    搜索引擎入门 (建立一个简单的java Lucene实例)
  • 原文地址:https://www.cnblogs.com/apanly/p/14095424.html
Copyright © 2011-2022 走看看