企业日志分析ELK搭建流程(超详细)

一、ELK简介

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

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

组件结构:

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

日志服务器
提高安全性、集中存放日志
缺陷:对日志分析困难

ELK日志分析系统的日志处理步骤

在这里插入图片描述

  • 将日志进行集中化管理
  • 将日志格式化(logstash)
  • 对格式化后的数据进行索引和存储(elasticsearch)
  • 前端数据的展示(Kibana)
  • 用户通过自己的设备访问Kibana页面查看

二、ELK组件介绍

2.1 ELasticsearch的概述

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

2.2 Elasticsearch核心概念

  • 接近实时

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

  • 集群

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

  • 节点

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

  • 索引

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

  • 分片和副本

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

每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。

在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。
默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

2.3 Logstash介绍

  • Logstash介绍

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

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

2.4 Kibana介绍

  • Kibana介绍

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

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

三、案例部署

3.1 案例环境

在这里插入图片描述

主机名IP地址主要软件
apache10.0.0.70Apache-httpd、Logstash
node-110.0.0.71Elasticsearch、Kibana
node-210.0.0.72Elasticsearch

3. 2 案例操作

3.2.1 部署Elasticsearch

node-1、node-2

# 安装密钥及elasticsearch源
[root@node-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
[root@node-1 ~]# cd /etc/yum.repos.d/
[root@node-1 yum.repos.d]# vi elasticsearch.repo

[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

[root@node-1 ~]# yum list       # 查看yum清单
[root@node-1 ~]# yum install elasticsearch -y    # 安装elasticsearch
[root@node-1 ~]# yum install java -y      # 安装Java
[root@node-1 yum.repos.d]# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)

# 修改配置文件
[root@node-1 yum.repos.d]# vi /etc/elasticsearch/elasticsearch.yml 
17: cluster.name: elk-cluster  	# 集群名称
23: node.name: node-1  ## 当前节点名
33: path.data: /data/elk-data   	# 数据存储的位置(目录不存在,需要创建)
37: path.logs: /var/log/elasticsearch/  	# 日志文件存放的位置
43: bootstrap.memory_lock: false 
 	# true:允许内存中的数据交还给SWAP,flase:不允许内存中的数据交还给SWAP。
 选择false,因为swap分区实在硬盘上建立的,如果内存不够,数据溢出,分到硬盘上的话,会影响速度
54: network.host: 0.0.0.0   	# 监听地址,0.0.0.0表示所有网段
58: http.port: 9200   	# ES端口号,外部通信的端口号   PS:9300是集群内部通信端口
67: discovery.zen.ping.unicast.hosts: ["node-1", "node-2"]   	# 群集中包含的节点名,也可以用IP地址

# 添加映射
[root@node-1 ~]# vi /etc/hosts
10.0.0.71       node-1
10.0.0.72       node-2
                        

# 创建目录及开启服务
[root@node-1 ~]# mkdir -p /data/elk-data		# 创建数据存放目录
[root@node-1 ~]# id elasticsearch		# ES的程序用户,安装的时候自动创建的用户
uid=998(elasticsearch) gid=996(elasticsearch) groups=996(elasticsearch)
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk-data/		# 授权,交给用户 elasticsearch去管理
[root@node1 elasticsearch]# systemctl start elasticsearch.service   # 开启服务
[root@node1 elasticsearch]# netstat -anpt | grep 9200   # 过滤9200端口(外部访问集群端口)
tcp6       0      0 :::9200                 :::*                    LISTEN      2288/java

测试

网页测试,访问此端口,可查看节点信息
在这里插入图片描述

群集健康状态检查

在这里插入图片描述

群集属性状态 ,可以看到群集内部通信端口9300

在这里插入图片描述

安装Elasticsearch-head插件,可视化工具,更方便查看集群信息,并管理集群

[root@node-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

测试

在这里插入图片描述

两种方法和ES进行交互

  1. JAVA API
  2. RESTful API (通过json格式交互)

创建一个索引信息,创建索引为index-demo,类型为test,可以看到成功创建,这里的数据会被存储到ES集群中

[root@node-1 ~]#  curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"jack","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "created" : true
}

刷新一下,可以看到存储的分片处理与备份,暂时不存在节点间的主备关系。加粗的是主文件的,细框的是备份文件,不论哪个节点宕机,存储都不会丢失,很安全,一个节点有五个分片,两个节点共10个分片

在这里插入图片描述

利用组件的复合查询进行索引的创建、查询、删除
创建索引index-demo2

  • 提交请求

在这里插入图片描述

  • 查询

在这里插入图片描述

  • 删除

在这里插入图片描述

解决node-01和node-02日志提示不让锁内存

[root@node-1 ~]# vi /etc/security/limits.conf
//末尾插入
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
systemctl stop elasticsearch.service
[root@node-1 ~]# systemctl restart elasticsearch

安装监控组件

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

测试

在这里插入图片描述

3.2.2 部署Apache、Logstash

# 安装httpd并开启服务
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# netstat -anpt | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      2427/httpd 

# 安装Logstash源,java环境
[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 repository for 2.1.x packages
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/

logstash(Apache)与elasticsearch (node)功能是否正常,做对接测试
logstash字段描述解释:

-f:指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
-t:测试配置文件是否正确,然后退出
#输入采用标准输入,输出采用标准输出
# 定义输入和输出流,类似管道,并验证输入输出
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com		# 输入
Settings: Default filter workers: 1
Logstash startup completed
2020-11-22T10:00:44.035Z apache www.baidu.com	# 输出
www.sohu.com
2020-11-22T10:00:49.930Z apache www.sohu.com

# 验证输出格式化,使用 rubydebug 显示详细信息输出,code为一种编解码
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
www.baidu.com		# 输入
Settings: Default filter workers: 1
Logstash startup completed
{		#输出
       "message" => "www.baidu.com",
      "@version" => "1",
    "@timestamp" => "2020-11-22T10:29:14.957Z",
          "host" => "apache"
}
sohu  
{
       "message" => "sohu",
      "@version" => "1",
    "@timestamp" => "2020-11-22T10:30:15.771Z",
          "host" => "apache"
}

使用logstash将信息写入elasticsearch 输入 输出 对接
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["10.0.0.71:9200"] } }'
Settings: Default filter workers: 1
Logstash startup completed
123123
qwe123
ben
www.baidu.com

写入ES和同时生成文本
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["10.0.0.71:9200"] } stdout { codec => rubydebug } }'
Settings: Default filter workers: 1
Logstash startup completed
abc123
{
       "message" => "abc123",
      "@version" => "1",
    "@timestamp" => "2020-11-22T10:55:26.379Z",
          "host" => "apache"
}

测试

在这里插入图片描述

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

[root@apache ~]# chmod o+r /var/log/messages		# 增加可读的权限
[root@apache ~]# vi /etc/logstash/conf.d/system.conf
input {                    #logstash输入:从/var/log/messages输入,类型为system,起始位                     置为从头开始
        file {
          path => "/var/log/messages"
          type => "system"
          start_position => "beginning"
        }
      }

output {                #logstash输出:输出给elasticsearch(以IP地址指定位置)
        elasticsearch {
        hosts => ["10.0.0.71:9200"]
        index => "system-%{+YYY.MM.dd}"
        }
      }

[root@apache ~]# systemctl restart logstash.service


刷新网页,查看索引数据,成功输出了系统日志

在这里插入图片描述

3.2.3 在node-1节点安装kibana

# 解压缩kibana安装包
[root@node-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz 
[root@node-1 ~]# mv kibana-4.3.1-linux-x64 /usr/local/kibana

# 修改配置文件
[root@node-1 ~]# vi /usr/local/kibana/config/kibana.yml 
# 2行 kibana打开的端口
server.port: 5601

# 5行 kibana侦听的地址
server.host: "0.0.0.0"


# 12行 和elasticsearch建立联系
elasticsearch.url: "http://10.0.0.71:9200"

# 20行 在elasticsearch中添加.kibana索引
kibana.index: ".kibana"

[root@node-1 ~]# yum -y install screen
[root@node-1 ~]# /usr/local/kibana/bin/kibana 
  log   [19:22:44.457] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
  log   [19:22:44.501] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [19:22:44.519] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
  log   [19:22:44.529] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
  log   [19:22:44.536] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
  log   [19:22:44.550] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
  log   [19:22:44.555] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
  log   [19:22:44.561] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
  log   [19:22:44.578] [info][listening] Server running at http://0.0.0.0:5601
  • 对接system系统日志

访问10.0.0.71:5601,kibana,创建system的索引图表,对接了system的系统日志

在这里插入图片描述

  • 对接Apache日志
[root@apache ~]# vi /etc/logstash/conf.d/apache_log.conf
input {			# 输入Apache日志
        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 {		# 输出到ES
        if [type] == "access" {
          elasticsearch {
            hosts => ["10.0.0.71:9200"]
            index => "apache_access-%{+YYY.MM.dd}"
          }
        }
        if [type] == "error" {
          elasticsearch {
            hosts => ["10.0.0.71:9200"]
            index => "apache_error-%{+YYY.MM.dd}"
          }
        }
    }

[root@apache ~]# logstash -f /etc/logstash/conf.d/apache_log.conf 

刷新ES网页,查看索引,建议先访问apache页面,否则可能刷新不出来

在这里插入图片描述

在kibana创建Apache索引图表

在这里插入图片描述

在这里插入图片描述

总结

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值