精华内容
下载资源
问答
  • 官网地址:...ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。 Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结
  • 本文档记录了个人在centos7环境下搭建ELK日志分析系统的步骤及遇到的问题、处理记录。明细罗列了本次搭建的系统环境和软件版本,操作系统为centos7.6,elk对应版本为7.9.3, redis版本为6.0.6。受限于更明细的环境差别...
  • ELK日志分析系统

    2018-04-30 09:54:55
    进行日志处理分析,一般需要经过一下几步: (1)将日志进行集中化管理 (2)将日志格式化(Logstash)并输出到Elasticsearch (3)对格式化后的数据进行索引和存储(Elasticsearch) (4)前端数据的展示(Kibana)
  • elk日志分析系统

    2017-02-16 00:06:33
  • ELK日志分析系统详解

    2020-11-29 04:43:17
    ELK日志分析系统详解一、ELK日志分析系统简介日志服务器日志分析系统日志处理步骤二、Elasticsearch介绍Elasticsearch概述Elasticsearch核心概念三、Logstash介绍Logstash介绍LogStash主要组件四、Kibana介绍Kibana...

    一、ELK日志分析系统简介

    ELK 是elastic公司提供的一套完整的日志收集以及展示的解决方案。是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana ,
    它们都是开源软件。

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

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

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

    日志服务器

    • 提高安全性
    • 集中存放日志
    • 缺陷:对日志的分析困难

    日志分析系统

    • Elasticsearch
    • Logstash
    • Kibana

    日志处理步骤

    • 1.将日志进行集中化管理
    • 2.将日志格式化(Logstash)并输出到Elasticsearch
    • 3.对格式化后的数据进行索引和存储(Elasticsearch)
    • 4.前端数据的展示(Kibana)

    二、Elasticsearch介绍

    Elasticsearch概述

    • 提供了一个分布式多用户能力的全文搜索引擎

    Elasticsearch核心概念

    • 接近实时
    • 集群
    • 节点
    • 索引
    • 分片和副本

    三、Logstash介绍

    Logstash介绍

    • 一款强大的数据处理工具
    • 可实现数据传输、格式处理、格式化输出
    • 数据输入、数据加工(如过滤,改写等)以及数据输出

    LogStash主要组件

    • Shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
    • Indexer:日志存储者,负责接收日志并写入到本地文件
    • Broker:日志hub,负责连接多个shipper和多个indexer
    • Search and Storage:允许对事件进行搜索和存储
    • Web Interface:基于web的展示界面

    四、Kibana介绍

    Kibana介绍

    • 一个针对Elasticsearch的开源分析及可视化平台
    • 搜索、查看存储在Elasticsearch索引中的数据
    • 通过各种图表进行高级数据分析及展示

    Kibana主要功能

    • Elasticsearch无缝之集成
    • 整合数据,复杂数据分析
    • 让更多团队成员受益
    • 接口灵活,分享更容易
    • 配置简单,可视化多数据源
    • 简单数据导出

    五、部署ELK日志分析系统

    案例拓扑:在这里插入图片描述

    需求描述:

    • 配置ELK日志分析群集
    • 使用Logstash收集日志
    • 使用Kibana查看分析日志

    部署Elasticsearch(同时在elc-1、elk-2部署)

    安装密钥及elasticsearch源
    
    [root@elk-1 ~]# vi /etc/hosts
    //添加  
    192.168.254.10 elk-1
    192.168.254.11 elk-2
    
    [root@elk-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
    [root@elk-1 ~]# cd /etc/yum.repos.d/
    
    [root@elk-1 yum.repos.d]# vi elasticsearch.repo 
    //添加
    [elasticsearch-2.x]
    name=elasticsearch
    baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
    gpgcheck=1
    gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
    enable=1
     
                                                                                            
    [root@elk-1 ~]# yum list               //查看yum清单      
    
    [root@elk-1 ~]# yum -y install elasticsearch java       //安装elasticsearch java
    
    [root@elk-1 ~]# java -version      //查看java版本信息
    
    openjdk version "1.8.0_131"
    OpenJDK Runtime Environment (build 1.8.0_131-b12)
    OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
    
     修改配置文件
     [root@elk-1 ~]# vi /etc/elasticsearch/elasticsearch.yml
     cluster.name: elastic    //17行 集群名称
     node.name:node1     //23行 节点名称
     path.data: /data/es-data  //33行 工作目录
     path.logs: /var/log/elasticsearch/      //37行 日志目录
     bootstrap.memory_lock: true      //防止交换swap分区
     http.port: 9200            //开启端口         
    创建目录及开启服务
    [root@elk-1 ~]# mkdir -p /data/es-data
    [root@elk-1 ~]# chown -R elasticsearch:elasticsearch /data/es-data
    [root@elk-1 ~]# systemctl start elasticsearch
    [root@elk-1 ~]# netstat -anpt | grep 9200
    tcp6       0      0 :::9200                 :::*                    LISTEN      13919/java          
    tcp6       0      0 192.168.254.10:9200     192.168.254.10:56960    ESTABLISHED 13919/java       

    网页测试

    在这里插入图片描述

    在这里插入图片描述

    //创建索引
    [root@elk-1 ~]# curl -i -XGET 'http://192.168.254.10:9200/_count?pretty' -d '{
      "query": {
           "match_all": {}
       }
       }'
    
    //输出内容
    HTTP/1.1 200 OK
    Content-Type: application/json; charset=UTF-8
    Content-Length: 95
    
    {
      "count" : 3,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
      }
    }
    安装Elasticsearch插件
    [root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

    测试

      http://192.168.254.10:9200/_plugin/head/
    

    在这里插入图片描述

    elasticsearch集群部署

    [root@elk-1 ~]#  vi /etc/elasticsearch/elasticsearch.yml
    discovery.zen.ping.unicast.hosts: ["192.168.254.10", "192.168.254.11"]      //添加elk-1、elk-2 IP
    
    重启服务
    [root@elk-1 ~]# systemctl restart elasticsearch.service 

    测试

     http://192.168.254.10:9200/_plugin/head/
    

    在这里插入图片描述

    查看日志

    [root@elc-1 ~]# less /var/log/elasticsearch/elastic.log 
    

    在这里插入图片描述
    发现无法分配内存

    修改配置文件
    [root@elc-1 ~]# vi /etc/security/limits.conf 
    // Shift+g跳到最后一行 o 添加
    
    elasticsearch soft memlock unlimited          # memlock参数指定用户可以锁定其地址空间的内存量
    elasticsearch hard memlock unlimited

    关于Memlock

         [root@elk-1 ~]# systemctl restart elasticsearch.service 
    

    安装监控组件

    [root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf

    测试

    在这里插入图片描述
    在这里插入图片描述

    Logstash部署 (在apache上)

    安装httpd并开启服务
    [root@apache ~]# yum -y install httpd
    [root@apache ~]# systemctl start httpd
    [root@apache ~]# netstat - anpt | grep httpdtcp6       0      0 :::80                   :::*                    LISTEN      57520/httpd         
    [root@apache html]# echo '<h1>ky06</h1>' > /var/www/html/index.html
    [root@apache html]# curl http://192.168.254.12<h1>ky06</h1>
    
    [root@apache ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
    [root@apache ~]# vi /etc/yum.repos.d/logstash.repo
    
    [logstash-2.1]
     name=Logstash 
     baseurl=http://packages.elastic.co/logstash/2.1/centos
     gpgcheck=1
     gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
     enable=1
    
    [root@apache ~]# yum -y install logstash java
    [root@apache ~]# ln -s /opt/logstash/bin/logstash /usr/local/bin/
    [root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
    www.baidu.coSettings: Default filter workers: 2
    Logstash startup completed
    www.baidu.com                             # 输入
    2020-11-24T11:17:51.412Z apache www.baidu.cowww.baidu.com
    www.hao123.com                        # 输入
    2020-11-24T11:18:20.206Z apache www.hao123.com

    logstash命令选项解释:
    -f:指定logstash的配置文件,根据配置文件配置logstash
    -e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
    -t:测试配置文件是否正确,然后退出
    #输入采用标准输入,输出采用标准输出

    [root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
    www.baidu.com                    # 输入
    Settings: Default filter workers: 2
    Logstash startup completed
    {
           "message" => "www.baidu.com",
          "@version" => "1",
        "@timestamp" => "2020-11-24T11:28:53.599Z",
              "host" => "apache"
    }
    [root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.254.10:9200"] } }'
    Settings: Default filter workers: 2
    Logstash startup completed
    ghw111
    abc222 
    333ddd

    查看索引信息在这里插入图片描述

    [root@apache ~]# chmod o+r /var/log/messages		# 增加可读的权限
    [root@apache ~]# vi /etc/logstash/conf.d/system.conf
    input {
           file {
              path => "/var/log/messages"
              type => "system"
              start_position => "beginning"
            }
          }
    
    output {
            elasticsearch {
            hosts => ["192.168.254.10:9200"]
            index => "system-%{+YYY.MM.dd}"
            }
          }

    在这里插入图片描述

    
    [root@elk-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz
    [root@elk-1 ~]# vim kibana-4.3.1-linux-x64/config/kibana.yml
    //2行 
    server.port: 5601
    
    //5行
    server.host: "0.0.0.0"
    
    
    //12行 ES地址
    elasticsearch.url: "http://192.168.254.10:9200"
    
    //20行
    kibana.index: ".kibana"
    
    yum install screen -y
    
    
    [root@elk-1 ~]# kibana-4.3.1-linux-x64/bin/kibana  ###启动监听
      
    展开全文
  • 超详细 ELK 日志分析系统

    千次阅读 2021-01-07 10:53:45
    文章目录一、ELK日志分析系统简介1:ELK日志分析系统组成2:日志处理步骤二:三款软件简介1:Elasticsearch(1)Elasticsearch的概述(2)Elasticsearch核心概念2:Logstash(1)Logstash介绍(2)Logstash的主要...

    文章目录

    一、ELK日志分析系统简介

    ELK日志分析系统是Logstash、Elastcsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示

    1:ELK日志分析系统组成

    • elasticsearch (es) :通过搭建群集;存储日志数据,索引日志数据
    • logstash :收集日志,收集到了后给es存储
    • kibana :视图形式展现日志信息,更加人性化

    2:日志处理步骤

    1. 将日志进行集中化管理
    2. 将日志格式化(Logstash)并输出到Elasticsearch
    3. 对格式化后的数据进行索引和存储(Elasticsearch)
    4. 前端数据的展示(Kibana)

    二:三款软件简介

    1:Elasticsearch

    (1)Elasticsearch的概述

    • 提供了一个分布式多用户能力的全文搜索引擎

    (2)Elasticsearch核心概念

    (1)接近实时(NRT)

    • elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)

    (2)集群(cluster)

    • 一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。
    • —个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
    • es具有集群机制,节点通过集群名称加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识(自己的名称)

    (3)节点(node)

    • 节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。
    • 节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。

    (4)索引 (type)

    • 在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类!分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

    • 类型相对于关系型数据库的表 ——》索引(库)-》类型(表)-》文档(记录)

    (6)文档(document)

    • 一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以SON
      (Javascript Object Notation))格式来表示,而JSON是一个到处存在的互联网数据交互格式。
    • 在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。
    • 文档相对于关系型数据库的列。

    (7)分片和副本(shards & replicas)

    • 在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

    分片的两个最主要原因

    • a.水平分割扩展,增大存储量

    • b.分布式并行跨分片操作,提高性能和吞吐量

    分布式分片的机制和搜索请求的文档如何汇总完全是有elasticsearch控制的,这些对用户而言是透明的。

    网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。为此,elasticsearch让我们将索引分片复制一份或多份,称之为分片副本或副本。

    副本也有两个最主要原因

    • a.高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。

    • b.×××能,增大吞吐量,搜索可以并行在所有副本上执行。

    2:Logstash

    (1)Logstash介绍

    • —款强大的数据处理工具
    • 可实现数据传输、格式处理、格式化输出
    • 数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)

    (2)Logstash的主要组件

    • shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
    • indexer:日志存储者,负责接收日志并写入到本地文件
    • broker:日志hub,负责连接多个shipper和多个indexer
    • search and storage:允许对事件进行搜索和存储
    • web interface:基于wWeb的展示界面

    3:Kibana

    (1)Kibana介绍

    • 一个针对Elasticsearch的开源分析及可视化平台
    • 搜索、查看存储在Elasticsearch索引中的数据
    • 通过各种图表进行高级数据分析及展示

    (2)Kibana主要功能

    • Elasticsearch无缝之集成
    • 整合数据,复杂数据分析
    • 让更多团队成员受益
    • 接口灵活,分享更容易
    • 配置简单,可视化多数据源
    • 简单数据导出

    三:ELK日志分析系统部署

    1:拓扑图

    在这里插入图片描述

    2:实验环境

    3:部署步骤

    node1 节点配置

    3.1、3台服务器关闭防火墙

    [root@apache ~]# systemctl stop firewalld
    [root@apache ~]# setenforce 0

    3.2、3台服务器域名映射

    [root@apache ~]# vi /etc/hosts
    20.0.0.10   apache
    20.0.0.11   node1
    20.0.0.12   node2

    3.3、部署elasticsearch软件

    (1)安装elasticsearch-rpm包

    [root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm 

    (2)加载系统服务

    [root@node1 ~]# systemctl daemon-reload                            # 守护进程重载,重新识别
    [root@node1 ~]# systemctl enable elasticsearch.service             # 开机自启动 

    3.4、更改elasticsearch主配置文件

    (1)拷贝文件备份

    [root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

    (2)修改配置文件

    [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml
    cluster.name: my-elk-cluster                          # 17 集群名字
    node.name: node1                                      # 23 节点名字
    path.data: /data/elk_data                             # 33 数据存放路径,退出后需要单独创建
    path.logs: /var/log/elasticsearch                     # 37 日志存放路径
    bootstrap.memory_lock: false                          # 43 不在启动的时候锁定内存
    network.host: 0.0.0.0                                 # 55 提供服务绑定的IP地址,0.0.0.0代表所有地址
    http.port: 9200                                       # 59 侦听端口为9200
    discovery.zen.ping.unicast.hosts: ["node1", "node2"]  # 68 集群发现通过单播实现

    (3)过滤查看修改的配置

    [root@node1 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
    cluster.name: my-elk-cluster
    node.name: node1
    path.data: /data/elk_data
    path.logs: /var/log/elasticsearch
    bootstrap.memory_lock: false
    network.host: 0.0.0.0
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["node1", "node2"]

    3.5、创建数据存放路径并授权

    [root@node1 ~]# mkdir -p /data/elk_data
    [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/ 

    3.6、启动elasticsearch是否成功开启

    [root@node1 ~]# systemctl start elasticsearch.service     # 启动慢
    [root@node1 ~]# netstat -anpt | grep 9200
    tcp6       0      0 :::9200                 :::*                    LISTEN      54502/java     

    3.7、查看节点信息,用谷歌浏览器查看

    在这里插入图片描述

    node2 节点配置

    1:与 node1 节点操作相同,只需更改 elasticsearch主配置文件的节点名字为 node2

    2:过滤查看修改的配置

    [root@node2 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
    cluster.name: my-elk-cluster
    node.name: node2
    path.data: /data/elk_data
    path.logs: /var/log/elasticsearch
    bootstrap.memory_lock: false
    network.host: 0.0.0.0
    http.port: 9200
    discovery.zen.ping.unicast.hosts: ["node1", "node2"]

    3:查看节点信息,用谷歌浏览器查看
    在这里插入图片描述

    3.7、集群检查健康和状态

    (1)检查群集健康情况

    在这里插入图片描述
    (2)检查群集状态信息

    在这里插入图片描述

    3.8、安装elasticsearch-head插件

    上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群

    node1 节点与 node2 节点操作相同

    3.8.1、编译安装 node
    • 解压缩
    [root@node1 ~]# tar zxvf node-v8.2.1.tar.gz
    • 配置编译安装
    [root@node1 node-v8.2.1]# ./configure
    [root@node1 node-v8.2.1]# make && make install
    3.8.2、安装phantomjs 前端框架
    • 解压缩
    [root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
    • 拷贝文件
    [root@node1 ~]# cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
    3.8.3、安装 elasticsearch-head 数据可视化工具
    • 解压缩
    [root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
    • 安装
    [root@node1 ~]# cd elasticsearch-head/
    [root@node1 elasticsearch-head]# npm install

    3.9、修改 elasticsearch 主配置文件

    [root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml            # 配置文件末尾添加
    http.cors.enabled: true                                # 开启跨域访问支持,默认为false
    http.cors.allow-origin: "*"                            # 跨域访问允许的域名地址    
    3.9.1、重新启动服务
    [root@node1 ~]# systemctl restart elasticsearch.service

    4.0、启动 elasticsearch-head 服务

    4.0.1、启动服务
    [root@node1 ~]# cd elasticsearch-head/
    [root@node1 elasticsearch-head]# npm run start &        # 切换到后台启动
    [1] 101339
    [root@node1 elasticsearch-head]# 
    > elasticsearch-head@0.0.0 start /root/elasticsearch-head
    > grunt server
    
    Running "connect:server" (connect) task
    Waiting forever...
    Started connect web server on http://localhost:9100
    4.0.2、查看状态
    [root@node1 ~]# netstat -anpt | grep 9100
    tcp        0      0 0.0.0.0:9100            0.0.0.0:*            LISTEN      101349/grunt        
    [root@node1 ~]# netstat -anpt | grep 9200
    tcp6       0      0 :::9200                 :::*                 LISTEN      101608/java

    4.1、谷歌浏览器登录查看

    4.1.1、登录前端框架

    在这里插入图片描述

    4.2、新建索引

    4.2.1、谷歌浏览器新建索引

    在这里插入图片描述

    4.2.2、node1 节点创建索引
    • 创建
    [root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"lisi","mesg":"hello world"}'
    • 完成
    {
      "_index" : "index-demo",             # 索引名称
      "_type" : "test",                    # 索引类型
      "_id" : "1",
      "_version" : 1,
      "result" : "created",                # 创建
      "_shards" : {
        "total" : 2,                       # 总量
        "successful" : 2,
        "failed" : 0
      },
      "created" : true
    }
    4.2.3、进入谷歌浏览器刷新

    在这里插入图片描述

    4.3、apache 服务器配置

    4.3.1、安装 apache 服务
    [root@apache ~]# yum -y install httpd
    4.3.2、开启 apache 服务
    [root@apache ~]# systemctl start httpd

    4.4、检查 java 环境

    [root@apache ~]# java -version
    openjdk version "1.8.0_131"
    OpenJDK Runtime Environment (build 1.8.0_131-b12)
    OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

    4.5、安装 logstash

    4.5.4、解压缩
    [root@apache ~]# rpm -ivh logstash-5.5.1.rpm 
    4.5.2、启动服务
    [root@apache ~]# systemctl start logstash.service 
    [root@apache ~]# systemctl enable logstash.service 
    4.5.3、建立 logstash 软连接
    [root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

    4.6、输入采用标准输入,输出采用标准输出

    [root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }' 
                      省略
    09:02:20.499 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
    
    www.baidu.com           # 输入
    2021-01-07T01:04:14.008Z apache www.baidu.com      # 输出

    4.7、使用rubydebug显示详细输出

    [root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
              省略
    The stdin plugin is now waiting for input:
    09:10:19.822 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
    
    www.baidu.com                                     # 输入
    {
        "@timestamp" => 2021-01-07T01:11:16.829Z,     # 详细输出
          "@version" => "1",
              "host" => "apache",
           "message" => "www.baidu.com"
    }          

    4.8、使用logstash将信息写入elasticsearch中

    4.8.1、写入
    [root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>["20.0.0.11:9200"] } }'
                省略
    The stdin plugin is now waiting for input:
    09:15:23.436 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}            
    4.8.2、输入
    www.baidu.com
    www.sina.com
    www.google.com
    4.8.3、谷歌浏览器对接查看

    在这里插入图片描述
    在这里插入图片描述

    4.9、apache 服务器收集系统日志

    4.9.1、对日志文件授权

    (1)查看日志文件

    [root@apache ~]# ll /var/log | grep messages
    -rw-------  1 root         root   218981 17 09:33 messages

    (2)授权

    [root@apache ~]# chmod o+r /var/log/messages
    [root@apache ~]# ll /var/log | grep messages
    -rw----r--  1 root         root   241485 17 09:37 messages

    4.9.2、创建配置文件,系统日志收集

    4.9.1、创建配置文件
    [root@apache ~]# vi /etc/logstash/conf.d/system.conf
    input {
           file{
           path => "/var/log/messages"
           type => "system"
           start_position => "beginning"
           }
         }
    output {
           elasticsearch {
           hosts => ["20.0.0.11:9200"]
           index => "system-%{+YYYY.MM.dd}"
           }
         }
    4.9.2、重启服务
    [root@apache ~]# systemctl restart logstash.service 
    4.9.3、谷歌浏览器查看索引

    在这里插入图片描述
    在这里插入图片描述

    5.0、在node1 节点安装 kibana

    5.0.1、安装并修改配置文件
    [root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 
    [root@node1 ~]# vi /etc/kibana/kibana.yml 
    server.port: 5601                                # 2 kibana 打开的端口
    server.host: "0.0.0.0"                           # 7 kibana 侦听的地址
    elasticsearch.url: "http://20.0.0.11:9200"       # 21 和elasticsearch 建立联系
    kibana.index: ".kibana"                          # 30 在elasticsearch中添加.kibana索引 
    5.0.2、开启 kibana 服务
    [root@node1 ~]# systemctl start kibana.service 
    [root@node1 ~]# systemctl enable kibana.service

    5.1、谷歌浏览器登录 kibana 展示页面

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5.2、在 apache 服务器创建 apache 日志配置

    [root@apache ~]# cd /etc/logstash/conf.d/
    [root@apache conf.d]# vi apache_log.conf
    input {
         file{
           path => "/etc/httpd/logs/access_log"
           type => "access"
           start_position => "beginning"
           }
         file{
           path => "/etc/httpd/logs/error_log"
           type => "error"
           start_position => "beginning"
           }
    }
    output {
         if [type] == "access" {
         elasticsearch {
           hosts => ["20.0.0.11:9200"]
           index => "apache_access-%{+YYYY.MM.dd}"
           }
         }
         if [type] == "error" {
         elasticsearch {
         hosts => ["20.0.0.11:9200"]
         index => "apache_error-%{+YYYY.MM.dd}"
          }
         }
    }
    5.2.1、指定 apache_log.conf 配置文件收集日志
    [root@apache conf.d]# logstash -f apache_log.conf
          省略
    10:22:49.702 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
    10:22:49.744 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9601}      
    5.2.2、查看日志
    [root@apache ~]# ls /etc/httpd/logs/
    access_log  error_log
    5.2.3、谷歌浏览器查看

    在这里插入图片描述

    5.3、创建 apache 的 access 和 error 日志索引

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    总结

    工作原理

    在需要收集日志的所有服务上部署logstash,其中logstash agent ( logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到 logstash indexer ,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch ,可以用Elasticsearch进行自定义搜索,通过Kibana来结合自定义搜索进行页面展示。

    展开全文
  • 搭建ELK日志分析系统详解

    千次阅读 2019-09-27 21:34:47
    日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析,既可以做到未雨绸缪、预防故障的发生,又可以在故障发生时,寻找蛛丝马迹、...

    日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析,既可以做到未雨绸缪、预防故障的发生,又可以在故障发生时,寻找蛛丝马迹、快速定位故障点。管理员也可以通过体制了解到服务器的软件信息、硬件信息、服务器负荷以及安全性相关的信息,如服务器是否被攻击、磁盘空间是否即将耗尽、内存是否严重不足等。通过这些分析,管理员可以及时采取措施。通常情况下,每台服务器或者客户端都会产生日志,相对而言,服务器日志更加重要,因为它存放着企业的重要数据,同时作为服务器提供者,一旦出现问题,将影响所有客户端的使用。一些大型的机房或者数据中心一般不会给服务器配置显示设备,而逐台远程登录设备查看日志,需要每次系统认证成功后执行,且效率低下。

    普遍的做法就是日志的集中管理,既将所有服务器的日志集中发送到到日志服务器中,如开源的Syslog。好处是可以集中查看所有服务器的日志,减轻了工作量,从安全性的角度来看,这种集中日志管理可以有效查询以及跟踪服务器日志被攻击的行为,因为黑客入侵的一瞬间,一些安全日志已经被发送到日志服务器。比如银行的监控系统,窃贼一旦发现监控设备,及时立即破坏这些设备也于事无补,因为监控画面早已经发送至监控服务器器中。采用集中化管理日志,也存在一些不足,如针对日志的分析以及查找将变得十分困难,对日志的逐条检查虽然可以获取有价值的信息,但是工作量十分庞大,像Apache这样的Web网站每天都有可能产生上万条日志。Linux虽然提供了文字编辑类的工具命令(如grep、awk、wc等),可以快速定位已知关键字的日志内容,却无法快速定位未知错误日志。当面对更高要求的查询、排序、统计以及数据分析时,加之庞大的机器数量。这些工具难免力不从心。开源实时日志分析系统——ELK应运而生。

    ELK主要由三个开源工具组成:

    • Elasticsearch:是个开源分布实时分析搜索引擎,建立在全文搜索引擎库Apache Lucens基础上,同时隐藏了Apache Luces的复杂性。Elasticsearch将所有的功能打包成一个独立的服务,并提供了一个简单的RESTful API接口,它具有分布式、零配置、自动发现、索引自动分片、索引副本机制、RESTful风格接口、多数据源、自动搜索负载等特点;
    • Logstash:是一个完全开源的工具,主要用于日志收集,同时可以对数据处理,并输出到Elasticsearch;
    • Kibana:也是一个开源和免费的工具,Kibana可以为Logstash和Elasticsearch提供图形化的日志分析Web界面,可以汇总、分析和搜索重要数据日志;

    ELK的工作原理,如图:
    在这里插入图片描述
    大致意思就是:Logstash收集APPServer产生的Log,并存放到Elasticsearch群集中,而Kibana则从群集中查询数据生成图表,在返回给Browser。

    简单来说,进行日志处理分析,一般需要经过以下几个步骤:
    (1)将日志进行集中化管理;
    (2)将日志格式化(Logstash)并输出到Elasticsearch;
    (3)对格式化后的数据进行索引和存储(Elasticsearch);
    (4)前端数据的展示(Kibana);

    下面开始详细介绍构建ELK日志分析系统的三个工具:

    1.Elasticsearch概述

    Elasticsearch是一个基于Lucene的搜索服务器,它稳定、可靠、快速,而且具有比较好的水平扩展能力、为分布式环境设计、在云计算中被广泛应用。Elasticsearch提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口。通过该接口,用户可以通过浏览器和Elasticsearch通信。Elasticsearch使用Java开发的,并作为Apache许可条款下的开放源码分布。Wikipedia、Stack、Overflow、GitHub等基于Elasticsearch来构建搜索引擎,所以具有实时搜索、稳定、可靠、快速、安装使用方便等特点。

    Elasticsearch的基础核心概念:

    • 接近实时(NRT):Elasticsearch是一个搜索速度接近实时的搜索凭条,相应速度非常快,从搜索一个文档直到这个文档能够被搜索到只有一个轻微的延迟(一般情况下是1s);
    • 群集(cluster):群集就是由一个或多个节点组织在一起,在所有的节点上存放用户数据,并一起提供索引和搜索功能,通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。每个群集都有一个标示的名称,默认是Elasticsearch,每个节点是居于群集名字加入到其群集中的,一个群集可以只有一个节点,为了具备更好的容错性,通常配置多个节点,在配置群集时,建议配置为群集模式;
    • 节点(node):是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。和群集一样,节点也是通过名字来标识的,默认情况下,在节点启动时会随机分配字符名,也可自定义。通过指定群集名称,节点可以加入到群集中。默认情况下,每个节点都可以加入Elasticsearch群集。如果群集中有多个节点,它们将会自动组建一个名为Elasticsearch的群集;
    • 索引(Index):类似于关系型数据库的中的“库”。当索引一个文档后,就可以使用Elasticsearch搜索到该文档,也可以简单地将索引理解为存储数据的地方,可以方便地进行全文索引。在index下面包含存储数据库的类型(Type),TYPE类似于关系型数据库中的“表”,用来存放具体数据,而Type下面包含文档(Document),文档相当Yui关系型数据库的“记录”,一个文档是一个可被索引的基础信息单元;
    • 分片和副本:Elasticsearch将索引分为若干部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定,且创建索引后不能更改;
      分片的两个最主要的原因:
      (1)水平分割扩展,增大存储量;
      (2)分布式并行跨分片操作,提高性能和吞吐量;

    一个合格的数据存储方案要求无论何种故障(如节点不可用)下数据都可用,并且具有较高的存储效率。为此,Elasticsearch将索引分片复制一份或多份,称为副本。副本是索引的另一个备份,用于数据冗余以及负载分担。默认情况下Elasticsearch自动对索引请求进行负载分担。

    总之,索引可以将分为若干个分片。这些分片也可以被复制0次(没有复制)或多次,当有副本存在是,作为复制源的分片称为主分片,而作为复制目标的分片称为复制分片。分片和副本的数量可以在索引创建时指定。在索引创建后,可以改变副本的数量,但是不能改变分片的数量。默认情况,Elasticsearch中的每个索引被分片为5个主分片和1个副本。在两个节点的场景下,每个索引都将会有5个主分片和另外5个副本分片,每个索引总共就有10个分片。

    2.Logstash概述

    Logstash有JRuby语言编写,运行在Java虚拟机(JVM)上,是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能,常用于日志处理。Logstash可配置单一的代理端,与其他开源软件结合,实现不同的功能。

    Logstash的理念很简单,它只做三件事:数据输入、数据加工(如过滤、改写等)以及数据输出。通过组合输入和输出,可以实现锁种需求。Logstash处理日志时,典型的部署架构图如下:
    在这里插入图片描述
    Logstash的主要组件:

    • Shipper:日志收集者。负责监控本地日志文件的变化,及时收集最新的日志文件内容。通常,远程代理端(agent)只需要运行这个组件即可;
    • Indexer:日志存储者。负责接收日志并写入到本地文件;
    • Broker:日志Hub。负责连接多个Shipper和Indexer;
    • Search and Stronage:允许对事件进行搜索和存储;
    • Web Interface:基于Web的展示界面;

    正是由于以上组件在Logstash架构中可独立部署,才提供了更好的群集扩展性。

    Logstash使用管道方式进行日志的搜集处理和输出,优点类似Linux系统的管道命令,将前一个流程的处理结构发送到后一个流程继续处理。在Logstash中,包括了三个阶段,分别是输入(input)、处理(Filter,非必需)和输出(output),三者的关系如图:
    在这里插入图片描述
    流程图中,整个流程为Input收集数据,Filter处理数据、Output输出数据。每个阶段也可以指定多种方式,如输出既可以输出到Elasticsearch中,也可以指定到stdout在控制台打印。这种插件式的组织方式,时的Logstash的扩展和定制非常方便。

    3.Kibana概述

    Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要设计用来和Elasticsearch一起工作,可以搜索、查看存储在Elasticsearch索引中的数据,并通过各种图表进行高级数据分析和展示。Kibana可以让数据看起来一目了然。它的操作十分简单,基于浏览器的用户界面可以让用户在任何位置都可以实时浏览。Kibana可以快速创建仪表板实时显示查询动态。Kibana使用非常简单,只需添加索引就可以检测Elasticsearch环境。

    Kibana的主要功能:

    • Elasticsearch无缝之集成:Kibana架构是为了Elasticsearch定制的,可以将任何(结构化和非结构化)数据加入Elasticsearch索引。Kibana还充分李永乐Elasticsearch强大的搜索和分析功能;
    • 整合数据:Kibana可以让海量数量变得更容易理解,根据数据内容可以创建形象的柱形图、折线图、散点图、直方图、饼图和地图等,以便用户查看;
    • 复杂数据分析:Kibana提升了Elasticsearch的分析能力,能够更加智能地分析数据,执行数据转换并且根据要求对数据切割分块;
    • 让更多团队成员受益:强大的数据库可视化接口让各业务岗位都能够从数据集合受益;
    • 接口灵活,分享更容易:使用Kibana可以更加方便地创建、保存、分享数据,并将可视化数据快速交流;
    • 配置简单:Kibana的配置和启用非常简单,用户体验非常友好。Kibana自带Web服务器,可以快速启动运行;
    • 可视化多数据源:Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats多第三方技术的数据整合到Elasticsearch,支持的第三方技术包括Apache、Flume、Fluentd等;
    • 简单数据导出:Kibana可以方便地导出感兴趣的数据,与其他数据集合并融合后快速建模分析,发现新结果;

    下面通过一个小型的拓补实验图,来了解一下ELK三个工具之间的对应关系,实验拓补图如下:
    在这里插入图片描述
    实验需要实现的功能有:
    (1)配置ELK日志分析群集;
    (2)使用Logstash收集日志;
    (3)使用Kibana查看分析日志;

    一、环境准备

    建议两台node服务器的内存不能小于4G!
    时间必须一致,否则会出现意想不到的错误!

    两个ELK节点的配置几乎一致,操作如下:

    [root@localhost ~]# vim /etc/hosts
    //修改hosts文件,配置域名解析,填写以下内容
                           ………………      //省略部分内容
    192.168.1.1 node1
    192.168.1.2 node2
    [root@localhost ~]# vim /etc/hostname 
    //编写配置主机名的文件,修改其中的内容为:
    node1
    //节点1叫node1,node2叫node2
    [root@localhost ~]# vim /etc/sysconfig/selinux 
    //编写SELinux配置文件,,修改其中内容为:
    SELINUX=disable
    [root@localhost ~]# systemctl disable firewalld
     //设置防火墙开机自行关闭
    [root@localhost ~]# java -version
    openjdk version "1.8.0_102"
    OpenJDK Runtime Environment (build 1.8.0_102-b14)
    OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
     //检查Java环境
    [root@localhost ~]# reboot
     //重新启动系统
    

    两台机器基本环境配置完成之后,接下来才开始真正的部署ELK日志分析系统!

    关于部署ELK所需的所有软件都在网盘链接:https://pan.baidu.com/s/1PeJk6KhiNiMpZeksUH1fJQ
    提取码:14ez
    建议先在windows本地进行解压,否则压缩方式Linux系统不便进行解压缩!

    二、部署Elasticsearch软件

    在node1和node2节点上都要部署Elasticsearch,下面以node1为例,node2配置与node1相同!

    (1)安装Elasticsearch软件

    Elasticsearch软件可以通过RPM安装、YUM安装或者源码安装,生产环境中用户可以根据实际情况进行安装方式的选择,本章采用RPM方式进行安装。

    [root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm .
    [root@node1 ~]# systemctl daemon-reload
    [root@node1 ~]# systemctl enable elasticsearch.service 
    //启用超级守护进程,设置服务为开机自启动
    [root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
    //编写服务的配置文件,修改以下内容
                        ………………………………………………                         //省略部分内容,修改以下内容即可
    cluster.name: my-application                                     //定义群集名称
    node.name: node1                                                    //定义节点名称
    path.data: /data/elk_data                                          //数据存放位置
    path.logs: /var/log/elasticsearch                               //日志存放位置
    bootstrap.memory_lock: false                                    //在启动时不锁定内存
    network.host: 0.0.0.0                                               //提供服务绑定的IP地址,0.0.0.0代表所有地址
    http.port: 9200                                                        //服务监听端口为9200
    discovery.zen.ping.unicast.hosts: ["node1", "node2"]                //群集发现通过单播的方式
    [root@node1 ~]# mkdir -p /data/elk_data
    [root@node1 ~]# chown -R elasticsearch:elasticsearch /data/elk_data/
    //创建数据存放路径并授权
    [root@node1 ~]# systemctl start elasticsearch.service 
    //服务较大,耐心等待直到9200端口被监听即可!
    [root@node1 ~]# netstat -anpt | grep 9200
    tcp6       0      0 :::9200                 :::*                    LISTEN      3192/java    
    

    访问测试,测试效果如图:
    在这里插入图片描述
    同样的方式搭建node2,然后测试群集效果,效果图如下:
    在这里插入图片描述
    在这里插入图片描述
    通过以上方式查看群集的状态对用户并不友好,可以安装Elasticsearch—head插件,可以更方便地管理群集!

    (2)安装Elasticsearch—head插件

    Elasticsearch在5.0版本后,Elasticsearch—head插件需要作为独立服务进行安装,需要使用npm命令,那么在安装插件之前,需要安装node和phantomjs。其中,前者基于Chrome V8 引擎的JavaScript运行环境,而phantomjs是一个基于webkit的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以!

    实验环境,这些插件只在node1上进行安装,实际根据需要而定!

    1.编译安装node,时间较长,耐心等待

    [root@node1 ~]# tar zxf node-v8.2.1.tar.gz -C /usr/src
    //注意:解压后的目录不能有中文路径
    [root@node1 ~]# cd /usr/src/node-v8.2.1/
    [root@node1 node-v8.2.1]# ./configure && make && make install 
    //编译安装node
    

    2.安装phantomjs

    [root@node1 ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/
    [root@node1 ~]# cd /usr/src/phantomjs-2.1.1-linux-x86_64/bin/
    [root@node1 bin]# cp phantomjs /usr/local/bin
    

    3.安装Elasticsearch—head

    [root@node1 ~]# tar zxf elasticsearch-head.tar.gz -C /usr/src
    [root@node1 ~]# cd /usr/src/elasticsearch-head/
    [root@node1 elasticsearch-head]# npm install
    

    4.修改Elasticsearch主配置文件

    [root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml 
                            ………………                      //省略部分内容,填写以下两行内容
    http.cors.enabled: true                                //开启跨域访问支持
    http.cors.allow-origin: "*"                            //跨域访问允许的域名地址
    [root@node1 ~]# systemctl restart elasticsearch
    //重启服务
    

    5.启动Elasticsearch—head插件

    启动插件时,必须在解压后的Elasticsearch—head目录下启动服务,进程会读取该目录下的Gruntfile.js文件,否则将会启动失败;Elasticsearch—head监听的端口默认是9100,通过该端口来判断服务器是否正常启动。

    [root@node1 ~]# cd /usr/src/elasticsearch-head/
    [root@node1 elasticsearch-head]# npm run start &
    //前台启动,一旦关闭中断,服务也将随之关闭
    [root@node1 ~]# netstat -anpt | grep 9200
    tcp6       0      0 :::9200                 :::*                    LISTEN      90295/java          
    [root@node1 ~]# netstat -anpt | grep 9100
    tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      90413/grunt 
    //判断Elasticsearch服务和Elasticsearch-head插件服务启动成功
    

    通过Elasticsearch—head查看Elasticsearch服务信息,如图:
    在这里插入图片描述
    接下来,通过命令插入一个测试索引,命令如下:

    [root@node1 ~]# curl  -XPUT  'localhost:9200/index-demo/test/1?pretty&pretty'  \
    > -H 'Content-Type: application/json' -d \
    > '{"user":"zhangsan","mesg":"hello world"}'
    
    

    再次刷新浏览器进行查看,如图:
    在这里插入图片描述
    在这里插入图片描述

    三、安装Kibana

    (1)在node1上配置安装Kibana

    [root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 
    [root@node1 ~]# systemctl enable kibana
    //安装Kibana,并配置为开机自启动
    

    (2)编辑Kibana配置文件

    [root@node1 ~]# vim /etc/kibana/kibana.yml 
                               ………………     //省略部分内容,修改以下内容
    server.port: 5601
    server.host: "0.0.0.0"
    elasticsearch.url: "http://192.168.1.1:9200"
    kibana.index: ".kibana"
    

    (3)启动服务

    [root@node1 ~]# systemctl start kibana
    [root@node1 ~]# netstat -anpt | grep 5601
    tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      90791/node  
    //kibana服务默认监听端口是5601
    

    (4)访问测试

    在这里插入图片描述
    在这里插入图片描述
    其实到这里,功能已经可以实现了,当时为了有更好的效果,建议搭建一台Web服务器并安装Logstash!

    四、安装Logstash

    Logstash是部署在需要监控其日志的应用服务器上!

    (1)在Apache服务器上安装Logstash

    [root@localhost ~]# systemctl stop firewalld
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# yum -y install httpd
    [root@localhost ~]# systemctl start httpd
    //安装httpd服务,并启动
    [root@localhost ~]# rpm -ivh logstash-5.5.1.rpm 
    [root@localhost ~]# systemctl start logstash
    

    (2)编写Logstash服务的配置文件

    Logstash配置文件有三部分组成:input、output、filter(根据需要),因此标准的格式为:

    input  {...}
    filter {...}
    output {...}
    

    在每个部分中,也可以指定多个访问方式。例如:若要指定两个日志来源文件,则格式如下:

    input {
    file { path =>"/var/log/messages" type =>"syslog"}
    file { path =>"/var/log/apache/access.log" type =>"apache"}
    }
    

    编写logstash配置文件apache_log.conf

    [root@localhost ~]#  vim  /etc/logstash/conf.d/apache_log.conf
    //必须在这个目录下,叫什么文件名无所谓,内容如下:
    
    input {
     file{
                    path => "/etc/httpd/logs/access_log"
                    type => "access"
                    start_position => "beginning"
     }
            file{
                    path => "/etc/httpd/logs/error_log"
                    type => "error"
                    start_position => "beginning"
     }
    }
    output {
            if [type] == "access" {
                    elasticsearch {
                            hosts => ["192.168.1.1:9200"]
                            index => "apache_access-%{+YYYY.MM.dd}"
                            }
       }
            if [type] == "error" {
                    elasticsearch {
                            hosts => ["192.168.1.1:9200"]
                            index => "apache_error-%{+YYYY.MM.dd}"
                            }
       }
      }
    

    为了让Apache服务器产生一些日志文件,建议找个PC多访问几次apache!

    [root@localhost ~]# systemctl restart logstash
    [root@localhost ~]# /usr/share/logstash/bin/logstash  -f /etc/logstash/conf.d/apache_log.conf
    //重启服务,并指定配置文件
    

    访问测试,首先访问9100端口,等待索引文件生成后,再访问5601端口!如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    如果出现这种情况,如图:
    在这里插入图片描述
    在这里插入图片描述
    但是还是建议时间最好同步,否则不明白日志产生的时间,从而做出错误的决定!!!

    同理添加错误日志及系统日志都是一样的方法!
    如果是检测Apache的系统日志,Apache服务器上的配置文件就应该这样写!

    [root@localhost ~]# chmod o+r /var/log/messages
    //首先授权
    [root@localhost ~]# vim /etc/logstash/conf.d/system.conf
    input {
            file{
                    path => "/var/log/messages"
                    type => "system"
                    start_position => "beginning"
            }
     }
    output {
            elasticsearch {
            hosts => ["192.168.1.1:9200"]
            index => "system-%{+YYYY.MM.dd}"
       }
     }
    

    node1服务器即可检测到它的日志信息!!!这里就不多说了!

    ———————— 本文至此结束,感谢阅读 ————————

    展开全文
  • ELK日志分析系统的原理与介绍 为什么用到ELK: 一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、...

    ELK日志分析系统的原理与介绍

    为什么用到ELK:

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

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

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

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

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

    ELK简介:

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

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

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

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

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

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

    官方文档:

    Filebeat:

    https://www.elastic.co/cn/products/beats/filebeat
    https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html

    Logstash:
    https://www.elastic.co/cn/products/logstash
    https://www.elastic.co/guide/en/logstash/5.6/index.html

    Kibana:

    https://www.elastic.co/cn/products/kibana

    https://www.elastic.co/guide/en/kibana/5.5/index.html

    Elasticsearch:
    https://www.elastic.co/cn/products/elasticsearch
    https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html

    elasticsearch中文社区:
    https://elasticsearch.cn/

     

    ELK架构图:

    架构图一:

    这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

    此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。

    架构图二:

    此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

    架构图三:

    此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

    Filebeat工作原理:

    Filebeat由两个主要组件组成:prospectors 和 harvesters。这两个组件协同工作将文件变动发送到指定的输出中。

    Harvester(收割机):负责读取单个文件内容。每个文件会启动一个Harvester,每个Harvester会逐行读取各个文件,并将文件内容发送到制定输出中。Harvester负责打开和关闭文件,意味在Harvester运行的时候,文件描述符处于打开状态,如果文件在收集中被重命名或者被删除,Filebeat会继续读取此文件。所以在Harvester关闭之前,磁盘不会被释放。默认情况filebeat会保持文件打开的状态,直到达到close_inactive(如果此选项开启,filebeat会在指定时间内将不再更新的文件句柄关闭,时间从harvester读取最后一行的时间开始计时。若文件句柄被关闭后,文件发生变化,则会启动一个新的harvester。关闭文件句柄的时间不取决于文件的修改时间,若此参数配置不当,则可能发生日志不实时的情况,由scan_frequency参数决定,默认10s。Harvester使用内部时间戳来记录文件最后被收集的时间。例如:设置5m,则在Harvester读取文件的最后一行之后,开始倒计时5分钟,若5分钟内文件无变化,则关闭文件句柄。默认5m)。

    Prospector(勘测者):负责管理Harvester并找到所有读取源。

    1

    2

    3

    4

    filebeat.prospectors:

    - input_type: log

      paths:

        - /apps/logs/*/info.log

    Prospector会找到/apps/logs/*目录下的所有info.log文件,并为每个文件启动一个Harvester。Prospector会检查每个文件,看Harvester是否已经启动,是否需要启动,或者文件是否可以忽略。若Harvester关闭,只有在文件大小发生变化的时候Prospector才会执行检查。只能检测本地的文件。

    Filebeat如何记录文件状态:

    将文件状态记录在文件中(默认在/var/lib/filebeat/registry)。此状态可以记住Harvester收集文件的偏移量。若连接不上输出设备,如ES等,filebeat会记录发送前的最后一行,并再可以连接的时候继续发送。Filebeat在运行的时候,Prospector状态会被记录在内存中。Filebeat重启的时候,利用registry记录的状态来进行重建,用来还原到重启之前的状态。每个Prospector会为每个找到的文件记录一个状态,对于每个文件,Filebeat存储唯一标识符以检测文件是否先前被收集。

    Filebeat如何保证事件至少被输出一次:

    Filebeat之所以能保证事件至少被传递到配置的输出一次,没有数据丢失,是因为filebeat将每个事件的传递状态保存在文件中。在未得到输出方确认时,filebeat会尝试一直发送,直到得到回应。若filebeat在传输过程中被关闭,则不会再关闭之前确认所有时事件。任何在filebeat关闭之前为确认的时间,都会在filebeat重启之后重新发送。这可确保至少发送一次,但有可能会重复。可通过设置shutdown_timeout 参数来设置关闭之前的等待事件回应的时间(默认禁用)。

     

    Logstash工作原理:

    Logstash事件处理有三个阶段:inputs → filters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

     

    Input:输入数据到logstash。

    一些常用的输入为:

    file:从文件系统的文件中读取,类似于tail -f命令

    syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析

    redis:从redis service中读取

    beats:从filebeat中读取

    Filters:数据中间处理,对数据进行操作。

    一些常用的过滤器为:

    grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。内置120多个解析语法。

    官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
    grok在线调试:https://grokdebug.herokuapp.com/

    mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。

    drop:丢弃一部分events不进行处理。

    clone:拷贝 event,这个过程中也可以添加或移除字段。

    geoip:添加地理信息(为前台kibana图形化展示使用)

    Outputs:outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

    一些常见的outputs为:

    elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

    file:将event数据保存到文件中。

    graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。

    Codecs:codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

    一些常见的codecs:

    json:使用json格式对数据进行编码/解码。

    multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息。

    展开全文
  • ELK日志分析系统中的elasticsearch,提供最新版本5.4.2
  • ELK日志分析系统搭建

    2018-05-01 15:54:31
    ELK(Elasticsearch、Logstash和Kibana) 日志分析 系统搭建
  • ELK一、ELK日志分析系统简介二、ELK 的工作原理三、ELK部署3.1 配置elasticsearch环境(node1、node2)安装elasticsearch-head插件3.2 Logstash部署 (apache节点)3.3 部署kibana(node1) ELK平台是一套完整的日志...
  • ELK 日志分析系统部署

    千次阅读 2019-08-08 11:09:40
    ELK 日志分析系统 组件简介 0、beats :日志收集客户端 1、Logstash:日志收集服务端 2、Elasticsearch :日志搜索引擎持久化 3、Kinaba :数据分析工具 Beats可以直接(或者通过Logstash)将数据发送到Elastic...
  • 通过这三个组件,构建一个统一的日志管理系统,用来收集分布式部署系统中分散在不同设备上的日志,方便后续进行日志分析。   其中,Elasticsearch是一个实时的分布式搜索和分析引擎,建立在全文搜索引擎Apache ...
  • springboot配置ELK日志分析系统环境配置下载组件配置Elasticsearch配置Kibana配置Logstashspringboot服务测试 环境配置 下载组件 下载组件官网https://www.elastic.co/cn/downloads 配置Elasticsearch 修改配置...
  • ELK日志分析系统简介 日志服务器 提高安全性 集中存放日志 缺陷 对日志的分析困难 ELK日志分析系统 Elasticsearch Logstash Kibana 日志处理步骤 将日志进行集中化管理 将日志格式化(Logstash)并输出到Elastic...
  • ELK安装步骤 简单介绍 ElasticSearch:用于存储日志信息。 Logstash:用于收集、处理和转发日志信息。 Kibana:提供可搜索的Web可视化界面。 准备工作安装JDK Elasticsearch7 自带jdk11,如果没有安装jdk, es7使用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,072
精华内容 8,028
关键字:

elk日志分析系统