企业级别应用–ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

时间:2020-9-16 作者:admin

文章目录

一、 ELK日志系统简介

日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、Web 访问日志、系统日志以及安全日志等。ELK可以很好地查找以及分析所需要的内容,快速定位是否出现故障,以及哪些机器、哪些服务存在故障。

1.1 ELK的组成

ELK 由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成,其官方网站为 https://www.elastic.co/cn。

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

1.2 日志分析的步骤

Logstash 收集 AppServer 产生的 Log,并存放到 ElasticSearch 群集中,而 Kibana 则 从 ES 群集中查询数据生成图表,再返回给 Browser。

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

1.3 Elasticsearch 介绍

Elasticsearch 提供了一 个分布式多用户能力的全文搜索引擎,基于 RESTful Web 接口。通过该接口,用户可以通 过浏览器与 Elasticsearch 通信。具有实时搜索、稳定、可靠、快速、安装使用方便等特点。

1.3.1 Elasticsearch 的基础核心概念

  • 接近实时(NRT):Elasticsearch 是一个搜索速度接近实时的搜索平台,响应速度非常 快,从开始索引一个文档到这个文档能够被搜索到只有一个轻微的延迟(通常是 1s) 。
  • 群集(cluster) :在一个或多个节点上存放用户数据,并一起提供索引和搜索功能。通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。
  • 节点(node):是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。默认情况,每个节点都已经加入 Elasticsearch 群集。如果群集中有多个 节点,它们将会自动组建一个名为 Elasticsearch 的群集。
  • 索引(index):类似于关系型数据库中的“库”。当索引一个文档后,就可以使用 Elasticsearch 搜索到该文档,在 index 下面包含存储数据的类型(Type),Type 类似于关系型数据 库中的“表”,用来存放具体数据,而 Type 下面包含文档(Document),文档相当于关 系型数据库的“记录”,一个文档是一个可被索引的基础信息单元。
  • 分片和副本(shards & replicas):Elasticsearch 将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定,且创建索引后不能更改。
  • 分片的两个最主要原因如下。
    水平分割扩展,增大存储量。
    分布式并行跨分片操作,提高性能和吞吐量。
  • Elasticsearch 将索引分片复制一份或多份,称为副本。副本是索引 的另一个备份,用于数据冗余以及负载分担。默认情况下 Elasticsearch 自动对索引请求进行负载分担。

1.4 Logstash 介绍

Logstash 由 JRuby 语言编写,运行在 Java 虚拟机(JVM)上,常用于日志处理。Logstash 只做三件事情:数据输入、数据加工(如过滤,改写等) 以及数据输出。
LogStash 的主要组件如下。

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

Logstash 使用管道方式进行日志的搜集处理和输出。有点类似 Linux 系统的管道命令, 将前一个流程的处理结果发送到后一个流程继续处理。在 Logstash 中,包括了三个阶段, 分别是输入(Input )、处理(Filter,非必需)和输出(Output)。

1.5 Kibana 介绍

Kibana可以搜索、查看存储在 Elasticsearch 索引中的数据,并通过各种图表进行高级数据分析及展示,让数据看起来一目了然。

Kibana 的主要功能如下。

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

二、 部署Elasticsearch 群集

部署Elasticsearch 群集至少需要两台服务器

2.1 部署过程

1. 准备环境

修改主机名、hosts文件、关闭防火墙、内核防护

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts    ##在hosts文件中写入下面的解析条目
14.0.0.77 node1
14.0.0.110 node2
[root@node1 ~]# systemctl stop firewalld.service 
[root@node1 ~]# setenforce 0
[root@node1 ~]# java -version    ##查看jdk是否安装
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# su
[root@node2 ~]# vim /etc/hosts
14.0.0.77 node1
14.0.0.110 node2
[root@node2 ~]# systemctl stop firewalld.service 
[root@node2 ~]# setenforce 0

2. 安装Elasticsearch软件

两个节点服务器进行相同的操作,以node1服务器为例

[root@node1 ~]# cd /opt   ##将软件包拷贝到/opt目录下
rz waiting to receive.
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm    logstash-5.5.1.rpm                    rh
elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
kibana-5.5.1-x86_64.rpm    phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm     ##rpm方式安装elasticsearch软件
警告: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
[root@node1 opt]# systemctl daemon-reload     ##重载系统服务
[root@node1 opt]# 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主配置文件

node1与node2做同样的操作

[root@node1 opt]# cp -p /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak     ##将配置文件做备份,防止错改配置文件
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# vim 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行,集群发现通过单播实现
[root@node1 elasticsearch]# grep -v '^#' 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"]
[root@node1 elasticsearch]# mkdir -p /data/elk_data     ##创建elasticsearch的数据文件存放位置
[root@node1 elasticsearch]# id elasticsearch    ##查看用户
uid=987(elasticsearch) gid=981(elasticsearch) =981(elasticsearch)
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/       ##设置elasticsearch的数据文件存放目录属组、属主为elasticsearch

4. 开启elastisearch,并测试

node1和node2做同样的操作

[root@node1 elasticsearch]# systemctl start elasticsearch.service     ##需要等待一会端口开会开启
[root@node1 elasticsearch]# netstat -ntap | grep 9200   
tcp6       0      0 :::9200                 :::*                    LISTEN      65901/java  

在真机中访问

http://14.0.0.77:9200
http://14.0.0.110:9200

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

http://14.0.0.77:9200/_cluster/health?pretty
http://14.0.0.110:9200/_cluster/health?pretty

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

http://14.0.0.77:9200/_cluster/state?pretty
http://14.0.0.110:9200/_cluster/state?pretty

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

5. 安装node组件(手工编译安装)

软件包之前已经拷贝到/opt目录下了,直接进行解压安装

[root@node1 elasticsearch]# cd /opt
[root@node1 opt]# yum install gcc gcc-c++ -y
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz   ##解压
[root@node1 node-v8.2.1]# ./configure           ##configure配置
[root@node1 node-v8.2.1]# make -j4              ##编译安装,-j4是指四个线程运行,编译速度比较慢,大概20分钟
[root@node1 node-v8.2.1]# make install          ##安装

6. 安装前端框架 phantomjs(手工编译安装)

[root@node1 opt]# tar jvxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/    ##解压
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/     ##将脚本拷贝到指定目录下,便于系统识别

7. 安装elasticsearch-head插件(手工编译安装)

[root@node1 bin]#  cd /opt
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install    ##等待安装

8. 修改elasticsearch主配置文件

[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml     ##在文件末尾写入下面两句
http.cors.enabled: true        ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"    ##跨域访问允许的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service

9. 启动elasticsearch-head 服务器

[root@node1 elasticsearch-head]# pwd
/usr/local/src/elasticsearch-head
[root@node1 elasticsearch-head]# npm run start &    ##开启服务,在后台运行
[1] 112187
[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    ##端口为9100
[root@node1 elasticsearch-head]# netstat -ntap | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112197/grunt  

10. 进行访问

在真机中进行访问

14.0.0.77:9100
14.0.0.110:9100

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

11. 添加数据并查看

[root@node1 elasticsearch-head]# 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
}

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

三、 安装logstash

这里还是再准备两台centos7的虚拟机,一台作为web服务器,安装apache服务,另外一台安装logstash收集apache的日志,并交给elasticsearch进行存储。

3.1 logstash的安装过程

1. web服务器的部署

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
[root@apache ~]# yum install httpd -y
[root@apache ~]# systemctl start httpd

2. 查看JAVA环境

[root@apache ~]# java -version    ##如果没有安装,使用yum install java -y 安装
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

3. 安装logstash

[root@apache ~]# cd /opt
将软件包拷贝到这个目录下
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm    ##安装logstash
警告:logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:logstash-1:5.5.1-1               ################################# [100%]
Using provided startup.options file: /etc/logstash/startup.options
Successfully created system startup script for Logstash
[root@apache opt]# systemctl start logstash.service    ##开启服务
[root@apache opt]# systemctl enable logstash.service   ##设置开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/    ##建立软连接便于系统识别

logstash (Apache)与elasticsearch (node)功能是否正常,可以使用logstash命令做对接测试,常用命令参数如下:

  • -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
  • -e后面跟着字符串该字符串可以被当做logstash的配置(如果是””,则默认使用stdin做为输入、stdout作为输出)
  • -t测试配置文件是否正确,然后退出

4. 测试logstash命令

  • 输入采用标准输入输出采用标准输出—在Apache服务器上
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout {} }'
输入命令后会进入一个输入输出的状态,我们输入什么,就会按照格式给我们输出出来
...
省略掉部分提示信息
2020-09-15T14:28:01.479Z apache 
www.njit.com     ##这里就是自己输入的内容
2020-09-15T14:29:54.032Z apache www.njit.com     ##这是按照格式输出的内容
zhangsan
2020-09-15T14:30:00.274Z apache zhangsan

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

  • 使用rubydebug显示详细输出,codec为一种编解码器
[root@apache opt]# logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }'
...
省略掉部分提示信息
www.njit.com     ##输入信息,以下为输出信息
{
    "@timestamp" => 2020-09-15T14:37:50.914Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.njit.com"
zhangsan       ####输入信息,以下为输出信息
{
    "@timestamp" => 2020-09-15T14:38:18.485Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "zhangsan"
}

5. 使用logstash将信息写入elasticsearch中–输入输出对接

[root@apache opt]# logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["14.0.0.77:9200"] } }'     ##将信息写入elasticsearch中
...
省略部分信息
www.njit.com

在真机上进行查看
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

6. 修改logstash配置文件

Logstash配置文件主要由三部分组成: input、output、filter(根据需要)

[root@apache opt]# cd /var/log/
[root@apache log]# ll | grep messages 
-rw-------. 1 root     root   678003 9  15 22:52 messages   ##权限为管理员读写,需要被其它用户读
[root@apache log]# chmod o+r messages
[root@apache log]# ll | grep messages 
-rw----r--. 1 root     root   685620 9  15 22:54 messages
[root@apache log]# cd /etc/logstash/
[root@apache logstash]# vim logstash.yml    ##配置文件中写明了子配置文件的路径,需要到这个路径下创建文件才能被识别

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

[root@apache log]# vim /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["14.0.0.77:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }
[root@apache logstash]# systemctl restart logstash.service

在真机中访问,产生了新的索引文件
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

三、 kibana部署与使用

3.1 部署kibana

再使用一台新的虚拟机14.0.0.107作为kibana服务器,也可以在node1节点服务器上直接安装

[root@localhost ~]# hostnamectl set-hostname kibana
[root@localhost ~]# su
将软件包拷贝到当前目录下
[root@kibana ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@kibana ~]# cd /etc/kibana/
[root@kibana kibana]# cp kibana.yml kibana.yml.bak
[root@kibana kibana]# vim kibana.yml
server.port: 5601                ##2行,kibana打开的端口
server.host: "0.0.0.0"           ##7行,kibana侦听的地址
elasticsearch.url: "http://14.0.0.77:9200"     ##21行,和elasticsearch建立联系
kibana.index: ".kibana"            ##30行,在elasticsearch中添加.kibana索引
[root@kibana kibana]# systemctl start kibana.service 
[root@kibana kibana]# systemctl enable kibana.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

在真机查看索引
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

3.2 对接apache的日志文件

[root@apache logstash]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim apache_log.conf

        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 => ["14.0.0.77:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        } 
        if [type] == "error" {
        elasticsearch {
          hosts => ["14.0.0.77:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }
[root@apache conf.d]#  /usr/share/logstash/bin/logstash -f apache_log.conf    ##不重启服务,直接加载配置文件

3.3 在kibana中进行创建、查看

在真机中进行查看
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
在kibana中为apache日志创建索引
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
同样的操作创建apache_error
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )
企业级别应用--ELK企业级日志分析系统(ELK 日志分析系统 、配置 Elasticsearch 群集 )

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。