zoukankan      html  css  js  c++  java
  • 快速了解ELK日志分析系统

    摘要

    顾名思义ELK是由Elasticsearch,Logstash,Kibana三大组件构成的一个基于web页面的日志分析工具。

    日志分析是运维工程师解决系统故障,发现问题的主要手段。日志包含多种类型,包括程序日志,系统日志以及安全日志等。通过对日志分析,预发故障的发生,又可以在故障发生时,寻找到蛛丝马迹,快速定位故障点。及时解决。

    组件结构:

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

    一、ELK日志分析系统简介

    1.1、日志服务器

    1.1.1、提高安全性

    1.1.2、集中存放日志

    1.1.3、缺陷

    对日志的分析困难

    1.2、ELK日志分析系统

    1.2.1、Elasticsearch

    1.2.2、Logstash

    1.2.3、Kibana

    1.3、日志处理步骤

    1.3.1、将日志进行集中化管理

    1.3.2、将日志格式化(Logstash)并输出到(Elasticsearch)

    1.3.3、对格式化后的数据进行索引和存储(Elasticsearch)

    1.3.4、前端数据的展示(Kibana)

    二、ELK组件介绍

    2.1、ELasticsearch的概述

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

    2.2、Elasticsearch核心概念

    2.2.1、接近实时

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

    2.2.2、集群

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

    2.2.3、节点

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

    2.2.4、索引

    • 索引(库)→类型(表)→文档(记录)

    2.2.5、分片和副本

    • 在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
    • 每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。
    • 在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。
      默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

    2.3、Logstash介绍

    2.3.1、Logstash介绍

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

    2.3.2、Logstash主要组件

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

    2.4、Kibana介绍

    2.4.1、Kibana介绍

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

    2.4.2、Kibana主要功能

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

    三、ELK日志问及那系部署

    3.1、环境说明

    部署两台Elasticsearch做集群,node1做ELK日志分析系统

    apache

    20.0.0.30

    httpd

    Logstash

    node1

    20.0.0.10

    Elasticsearch

    Kinaba

    node2

    20.0.0.20

    Elasticsearch

    3.2、Elasticsearch配置(下面的操作都需要在node1、node2上配置)

    3.2.1、安装密钥及elasticsearch源

     1 [root@node1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
     2 [root@node1 ~]# cd /etc/yum.repos.d/
     3 [root@node1 yum.repos.d]# vi elasticsearch.repo
     4 [elasticsearch-2.x]
     5 name=Elasticsearch repository for 2.x packages
     6 baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
     7 gpgcheck=1
     8 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
     9 enable=1
    10 
    11 [root@node1 ~]# yum list       #查看yum清单
    12 [root@node1 ~]# yum install elasticsearch -y    #安装elasticsearch
    13 [root@node1 ~]# yum install java -y      #安装Java
    14 [root@node1 ~]# java -version           #查看Java版本
    15 openjdk version "1.8.0_131"
    16 OpenJDK Runtime Environment (build 1.8.0_131-b12)
    17 OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

    3.2.2、修改配置文件

     1 [root@node1 yum.repos.d]# vi /etc/elasticsearch/elasticsearch.yml 
     2 17行 集群名称
     3 cluster.name: elastic
     4 
     5 23行 节点名称
     6 node.name: linux-node1
     7 
     8 33行 工作目录
     9 path.data: /data/es-data
    10 path.logs: /var/log/elasticsearch/
    11 
    12 43行 防止交换swap分区
    13 bootstrap.memory_lock: true
    14 
    15 54行 监听网络
    16 network.host: 0.0.0.0
    17 
    18 58行 端口
    19 http.port: 9200

    3.2.3、创建目录及开启服务

    1 [root@node1 yum.repos.d]# mkdir -p /data/es-data
    2 [root@node1 yum.repos.d]# chown -R elasticsearch:elasticsearch /data/es-data
    3 [root@node1 yum.repos.d]# systemctl start elasticsearch.service 
    4 [root@node1 yum.repos.d]# netstat -anpt | grep 9200
    5 tcp6       0      0 :::9200                 :::*                    LISTEN      54134/java          

    3.2.4、测试

    1 http://20.0.0.10:9200

     1 [root@node1 yum.repos.d]# curl -i -XGET 'http://20.0.0.20:9200/_count?pretty' -d '{
     2 > "query": {
     3 >     "match_all": {}
     4 > }
     5 > }'
     6 HTTP/1.1 200 OK       #输出项
     7 Content-Type: application/json; charset=UTF-8
     8 Content-Length: 95
     9 
    10 {
    11   "count" : 0,
    12   "_shards" : {
    13     "total" : 0,
    14     "successful" : 0,
    15     "failed" : 0
    16   }
    17 }
    18 
    19 [root@node2 yum.repos.d]# curl -i -XGET 'http://20.0.0.10:9200/_count?pretty' -d '{
    20 > "query": {
    21 >     "match_all": {}
    22 > }
    23 > }'
    24 HTTP/1.1 200 OK      #输出项
    25 Content-Type: application/json; charset=UTF-8
    26 Content-Length: 95
    27 
    28 {
    29   "count" : 0,
    30   "_shards" : {
    31     "total" : 0,
    32     "successful" : 0,
    33     "failed" : 0
    34   }
    35 }

    3.2.5、安装Elasticsearch插件

    1 [root@node1 yum.repos.d]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

    3.2.6、测试

    1 http://20.0.0.10:9200/_plugin/head/

    3.2.7、符合查询

    • 提交请求

    • 查询

    •  删除后再查询

     

    3.2.8、elasticsearch集群部署

    1 [root@node1 yum.repos.d]# vi /etc/elasticsearch/elasticsearch.yml
    2 69行 单播列表自动发现机制
    3 discovery.zen.ping.unicast.hosts: ["20.0.0.10", "20.0.0.20"]
    4 
    5 重启服务
    6 [root@node1 yum.repos.d]# systemctl restart elasticsearch.service

    3.2.9、测试

    1 http://20.0.0.10:9200/_plugin/head/

    3.2.10、node-01和node-02日志提示不让锁内存

    1 [root@node1 elasticsearch]# less /var/log/elasticsearch/elastic.log
    2 ......
    3 [2020-11-18 10:36:42,959][WARN ][bootstrap                ] These can be adjusted by modifying /etc/security/limits.conf, for example: 
    4         # allow user 'elasticsearch' mlockall
    5         elasticsearch soft memlock unlimited
    6         elasticsearch hard memlock unlimited
    1 修改配置文件
    2 [root@node1 elasticsearch]# vi /etc/security/limits.conf 
    3 //末尾插入
    4 # allow user 'elasticsearch' mlockall
    5 elasticsearch soft memlock unlimited
    6 elasticsearch hard memlock unlimited
    7 
    8 [root@node1 elasticsearch]# systemctl stop elasticsearch.service 
    9 [root@node1 elasticsearch]# systemctl start elasticsearch.service 

    3.2.11、安装监控组件

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

    3.2.12、测试

     

    3.3、Logstash部署(apache上部署)

    3.3.1、安装httpd并开启服务

    1 [root@apache ~]# yum -y install httpd 
    2 [root@apache ~]# systemctl start httpd
    3 [root@apache ~]# netstat -anpt | grep httpd
    4 tcp6       0      0 :::80                   :::*                    LISTEN      15620/httpd         
    5 [root@apache ~]# echo '<h1>this is web!</h1>' > /var/www/html/index.html
    6 [root@apache ~]# curl http://localhost
    7 <h1>this is web!</h1>

    3.3.2、安装密钥及Logstash源

     1 [root@node1 elasticsearch]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
     2 [root@node1 elasticsearch]# vi /etc/yum.repos.d/logstash.repo
     3 [logstash-2.1]
     4 name=Logstash repository for 2.1.x packages
     5 baseurl=http://packages.elastic.co/logstash/2.1/centos
     6 gpgcheck=1
     7 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
     8 enable=1
     9 
    10 安装Logstash
    11 [root@node1 elasticsearch]# yum install logstash -y

     3.3.3、安装java环境,没有自带安装使用yum -y install java安装

    1 [root@apache ~]# yum -y install java
    2 [root@apache ~]# java -version
    3 openjdk version "1.8.0_131"
    4 OpenJDK Runtime Environment (build 1.8.0_131-b12)
    5 OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
    6
    [root@apache bin]# ln -s /opt/logstash/bin/logstash /usr/local/bin/

    3.3.4、logstash(apache)与elasticsearch(node)功能是否正常,做对接测试

    1 [root@apache bin]# logstash -e 'input { stdin{} } output { stdout{} }'
    2 Settings: Default filter workers: 1
    3 Logstash startup completed
    4 www.baidu.com                       #随便输入几个网址
    5 2020-11-18T07:53:59.480Z apache www.baidu.com
    6 www.163.com  
    7 2020-11-18T07:54:12.187Z apache www.163.com
    8 www.aliyun.com     
    9 2020-11-18T07:54:36.980Z apache www.aliyun.com
    1 logstash命令选项解释:
    2 -f:指定logstash的配置文件,根据配置文件配置logstash
    3 -e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
    4 -t:测试配置文件是否正确,然后退出
    5 #输入采用标准输入,输出采用标准输出

     3.3.5、使用rubydebug显示详细输出,codec为一种编解码器

     1 [root@apache bin]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
     2 Settings: Default filter workers: 1
     3 Logstash startup completed
     4 www.baidu.com
     5 {
     6        "message" => "www.baidu.com",
     7       "@version" => "1",
     8     "@timestamp" => "2020-11-18T08:40:57.598Z",
     9           "host" => "apache"
    10 }

    3.3.6、使用logstash将信息输出给elasticsearch

    1 [root@apache bin]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["20.0.0.10:9200"] } }'
    2 Settings: Default filter workers: 1
    3 Logstash startup completed
    4 abc123      #输入内容
    5 tom456
    6 123jerry

    3.3.7、打开浏览器输入http://20.0.0.10:9200/_plugin/head/,查看索引信息,显示新的数据信息说明输出到elasticsearch成功

     3.3.8、在apache主机中做对接配置,logstash收集系统日志

     1 logstash配置文件主要由三部分组成:input、output、filter
     2 [root@apache bin]# chmod o+r /var/log/messages   #允许其他用户访问
     3 [root@apache bin]#  ll /var/log/messages
     4 -rw----r--. 1 root root 250721 11月 18 16:40 /var/log/message
     5 
     6 [root@apache ~]# vi /etc/logstash/conf.d/system.conf
     7 input {                    #logstash输入:从/var/log/messages输入,类型为system,起始位                     置为从头开始
     8         file {
     9           path => "/var/log/messages"
    10           type => "system"
    11           start_position => "beginning"
    12         }
    13       }
    14 
    15 output {                #logstash输出:输出给elasticsearch(以IP地址指定位置)
    16         elasticsearch {
    17         hosts => ["20.0.0.10:9200"]
    18         index => "system-%{+YYY.MM.dd}"
    19         }
    20       }
    21 
    22 [root@apache ~]# systemctl restart logstash.service

    3.3.9、打开浏览器输入http://20.0.0.10:9200/_plugin/dead/,查看索引信息,显示新的索引信息代表logstash搜集到的日志信息成功输出给elasticsearch

    3.4、在node1主机安装kibana

    3.4.1、在node1主机安装kibana

     1 上传kibana-4.3.1-linux-x64.tar.gz到/root下
     2 [root@node1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz 
     3 [root@node1 ~]# mv kibana-4.3.1-linux-x64 kibana
     4 [root@node1 ~]# mv kibana /usr/local/
     5 [root@node1 ~]# cd /usr/local/kibana/
     6 [root@node1 kibana]# vi config/kibana.yml 
     7 
     8 //2行 kibana打开的端口
     9 server.port: 5601     
    10 
    11 //5行 kibana侦听的地址
    12 server.host: "0.0.0.0"
    13 
    14 
    15 //12行 和elasticsearch建立联系
    16 elasticsearch.url: "http://20.0.0.10:9200"
    17 
    18 //20行 在elasticsearch中添加.kibana索引
    19 kibana.index: ".kibana"
    20 
    21 [root@node1 kibana]# yum -y install screen
    22 
    23 启动kibana
    24 [root@node1 kibana]# /usr/local/kibana/bin/kibana
    25   log   [17:53:46.904] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
    26   log   [17:53:46.933] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
    27   log   [17:53:46.944] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
    28   log   [17:53:46.951] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
    29   log   [17:53:46.955] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
    30   log   [17:53:46.958] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
    31   log   [17:53:46.966] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
    32   log   [17:53:46.969] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
    33   log   [17:53:46.978] [info][listening] Server running at http://0.0.0.0:5601
    34   log   [17:53:51.976] [info][status][plugin:elasticsearch] Status changed from yellow to yellow - No existing Kibana index found
    35   log   [17:53:54.602] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready

    3.4.2、浏览器中登录20.0.0.10:5601,首次登录提示创建一个索引名字:
    填入system-*,即对接系统日志文件名

    3.4.3、同时也能看到刚才在kibana.yml中添加的在elasticsearch中添加.kibana索引配置生效了(用于验证kibana和elasticsearch是否成功连接)

    3.4.4、添加logstash配置,收集apache服务的访问日志和错误日志中的数据

     1 [root@apache ~]# cd /etc/logstash/conf.d/
     2 [root@apache conf.d]# vi apache_log.conf
     3 input {
     4         file {
     5           path => "/etc/httpd/logs/access_log"
     6           type => "access"
     7           start_position => "beginning"
     8         }
     9 
    10         file {
    11           path => "/etc/httpd/logs/error_log"
    12           type => "error"
    13           start_position => "beginning"
    14         }
    15    }
    16 output {
    17         if [type] == "access" {
    18           elasticsearch {
    19             hosts => ["20.0.0.10:9200"]
    20             index => "apache_access-%{+YYY.MM.dd}"
    21           }
    22         }
    23         if [type] == "error" {
    24           elasticsearch {
    25             hosts => ["20.0.0.10:9200"]
    26             index => "apache_error-%{+YYY.MM.dd}"
    27           }
    28         }
    29     }
    30 
    31 [root@apache conf.d]# logstash -f apache_log.conf    #指定logstash的配置文件,根据apache_log.conf配置logstash(-f可以不重启加载)

    3.4.5、浏览器访问http://20.0.0.10:9200/_plugin/head/,查看apache日志文件的索引是否建立成功

    总结

    ELK日志分析系统是一款非常强大的日志分析工具,能够帮助运维工程师更快更准确的定位到想要的日志,特别是kibana可视化工具,功能强大,使用起来非常人性化

  • 相关阅读:
    matplotlib
    python 面向对象(进阶篇)转载武沛齐
    Python 面向对象(初级篇)
    jupter nootbok 快捷键、NumPy模块、Pandas模块初识
    爬虫系列之mongodb
    python迟邦定
    爬虫之selenium模块
    爬虫数据解析的三方式
    爬虫之requests模块
    315题
  • 原文地址:https://www.cnblogs.com/xuhao0705/p/13997766.html
Copyright © 2011-2022 走看看