ELK企业级日志分析系统解析

一、ELK日志分析系统简介

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

1.1、ELK日志分析系统

组成

ELK日志分析系统(传统)是Elasticsearch+Logstash+Kibana

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

也可以使用EFK:包含es数据库+Logstash+kafka+redis缓存数据库+Kibana

1.2、日志处理步骤

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

二、软件概念介绍

2.1、Elasticsearch介绍

1、Elasticsearch的概述

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

2、Elasticsearch的基本核心概念

接近实时:索引文档时有轻微的延迟
集群:es具有集群机制,节点通过集群名称加入集群中,节点具有唯一标识
节点:存储数据并参与集群的索引和搜索功能
索引:相当于关系型数据库的库,是相似文档的集合
分片和副本:
(1)分片机制:提升索引效率,提高存储量
(2)副本:高可用性(解决单点故障),增大吞吐量

2.2、Logstash介绍

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

Logstash的主要组件

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

2.3、Kibana介绍

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

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

三、ELK日志分析系统部署

3.1、案例拓扑

在这里插入图片描述

主机名IP地址主要软件
apache192.168.40.11httpd、logstash
node1192.168.40.12Elasticsearch、Kibana
node2192.168.40.13Elasticsearch
[root@localhost ~]# hostnamectl set-hostname node1	#修改主机名
[root@localhost ~]# su

[root@node1 ~]# vim /etc/hosts   #添加本地解析,识别集群主机名
192.168.40.12 node1
192.168.40.13 node2

[root@node1 ~]# java -version	#确认java已安装(Centos7.6自带)
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)

3.2、步骤

3.2.1 部署 es

1.安装elasticsearch-5.5.0.rpm包

[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
   1:elasticsearch-0:5.5.0-1          ################################# [100%]
###NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
###You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service

2.根据上一步的提示加载elasticsearch服务

[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

3.更改elasticsearch主配置文件

[root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
[root@node1 ~]# grep -v '^#' /etc/elasticsearch/elasticsearch.yml
17行:cluster.name: my-elk-cluster        #集群名字
23行:node.name: node1                    #节点名字
33行:path.data: /data/elk_data           #数据存放路径
37行:path.logs: /var/log/elasticsearch   #日志存放路径
43行:bootstrap.memory_lock: false        #不在启动的时候锁定内存(这样可以让图片等资源加载时使用内存)
55行:network.host: 0.0.0.0               #提供服务绑定的IP地址,0.0.0.0代表所有地址
59行:http.port: 9200                     #监听端口为9200
68行:discovery.zen.ping.unicast.hosts: ["node1", "node2"]    #集群发现通过单播实现,单播的主机名为"node1", "node2"

4.创建数据存放路径并授权

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

5.启动elasticsearch,查看是否成功开启

[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -anpt | grep 9200	#查看服务是否成功开启
tcp6       0      0 :::9200                 :::*                    LISTEN      4356/java

[root@node2 ~]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      43324/java  
grep -v "^#" /etc/elasticsearch/elasticsearch.yml	#反向过滤

在这里插入图片描述
在这里插入图片描述
6.查看节点信息,用真机浏览器打开http://192.168.40.12:9200 ,会显示节点的信息,node2节点同理
在这里插入图片描述
用浏览器打开 http://192.168.40.13:9200
在这里插入图片描述
检测集群的健康情况和状态

(1)检测集群的健康情况
用浏览器打开http://192.168.40.12:9200/_cluster/health?pretty
在这里插入图片描述
(2)检测集群的状态(比健康情况显示的更加详细)
用浏览器打开http://192.168.40.12:9200/_cluster/state?pretty
在这里插入图片描述
7.两个节点安装elasticsearch-head插件(安装插件可以更加人性化的管理集群)

(1)编译安装node组件依赖包
上传node-v8.2.1.tar.gz
[root@node1 ~]# yum -y install gcc gcc-c++ make
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3  #用3个核心数处理,按个人电脑配置而定
[root@node1 node-v8.2.1]# make install

(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)安装elasticsearch-head(数据可视化工具)
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

8.修改elasticsearch.yml主配置文件

[root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@node1 ~]# systemctl restart elasticsearch.service

9.后台启动elasticsearch-head服务

[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &	#后台运行
[1] 48846
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

[root@node1 ~]# netstat -ntap | grep 9100	#检测elasticsearch-head端口是否开启
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      48865/grunt  
[root@node1 ~]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      48796/java          

10.在浏览器上验证

网页中可以通过192.168.40.12:9100来访问到可视化网页
通过连接192.168.40.12:9200 可以连接到群集

在这里插入图片描述
11.回到node节点创建索引,并登录数据化可视网页查看索引信息

通过在索引可以根据自己的要求来新建索引,在概览中可以查看;
在这里插入图片描述
在虚拟机中通过curl可以新建索引

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

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

3.2.2 apache主机中安装logstash并做日志搜集

1.更改主机名

[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su

2.安装apache服务,查看java环境

[root@apache ~]# yum -y install httpd java
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl status httpd

[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)

3.安装logstash,将logstash-5.5.1.rpm上传到/root目录下

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm
[root@apache ~]# systemctl start logstash.service
[root@apache ~]# systemctl enable logstash.service
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/    #建立命令软链接

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

logstash命令选项解释:
-f:指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
-t:测试配置文件是否正确,然后退出
#输入采用标准输入,输出采用标准输出
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
...省略内容
12:02:47.424 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com     #输入几个网站
2021-01-07T04:03:03.744Z apache www.baidu.com
www.text.com
2021-01-07T04:03:15.662Z apache www.text.com

在这里插入图片描述

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

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
...省略内容
11:59:48.800 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
    "@timestamp" => 2021-01-07T04:01:23.423Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

在这里插入图片描述

6.使用logstash将信息输出给elasticsearch

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.40.12:9200"] } }'
...省略内容
23:26:26.165 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com      #输入内容测试
www.text.com

7.打开浏览器输入http://192.168.40.12:9100/,
查看索引信息,显示新的数据信息说明输出到elasticsearch成功
在这里插入图片描述
8.logstash与ES的对接

logstash通过脚本与es对接日志信息

logstash配置文件主要由三部分组成:input、output、filter

[root@apache ~]# chmod o+r /var/log/messages	#允许其他用户访问
[root@apache ~]# ll /var/log/messages 
-rw----r--. 1 root root 615221 1月   7 11:20 /var/log/messages

[root@apache ~]# vim /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 => ["192.168.40.12:9200"]
        index => "system-%{+YYY.MM.dd}"
        }
      }
        
root@apache ~]# systemctl restart logstash.service

9.打开浏览器输入http://192.168.40.12:9100/
查看索引信息,显示新的索引信息代表logstash搜集到的日志信息成功输出给elasticsearch
在这里插入图片描述

3.3.3 安装kibana与apache对接

1.在node1主机安装kibana

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 ~]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
第2行:server.port: 5601           #kibana打开的端口
第7行:server.host: "0.0.0.0"     #kibana侦听的地址
第21行:elasticsearch.url: "http://192.168.40.12:9200"    #和elasticsearch建立联系
第30行:kibana.index: ".kibana"     #在elasticsearch中添加.kibana索引

[root@node1 kibana]# systemctl start kibana.service  #启动kibana服务
[root@node1 kibana]# systemctl enable kibana.service  #开机启动kibana服务
[root@node1 kibana]# netstat -anpt | grep 5610

2.浏览器中登录192.168.40.12:5601,首次登录提示创建一个索引名字:
填入system-*,即对接系统日志文件名
在这里插入图片描述
同时也能看到刚才在kibana.yml中添加的在elasticsearch中添加.kibana索引配置生效了(用于验证kibana和elasticsearch是否成功连接)
在这里插入图片描述

3.kibana对接apache主机的apache 日志文件(访问的、错误的)

[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# touch apache_log.conf
[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 => ["192.168.40.12:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
          elasticsearch {
            hosts => ["192.168.40.12:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
    }
[root@apache conf.d]# logstash -f apache_log.conf
#指定logstash的配置文件,根据apache_log.conf配置logstash(-f可以不重启加载)

4.浏览器访问http://192.168.40.12:9100/,查看apache日志文件的索引是否建立成功

在这里插入图片描述

5.kibana中添加刚才elasticsearch中新建的索引,可以以更加人性化的视图界面查看、分析日志,步骤如下:

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

在这里插入图片描述

在这里插入图片描述


总结

使用场景:双十一,各大电商平台访问量暴增,对应的访问日志暴增,系统维护人员需要对日志进行处理分析,但苦于数量之多…

为了解决大量日志分析困难的问题,可以配置ELK进行集中化管理;
ELK日志分析系统是一款非常强大的日志分析工具,能够帮助运维工程师更快更准确的定位到想要的日志,最后通过kibana,可视化的简便的展示出数据效果,使用起来非常人性化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值