Centos7部署ELK日志分析系统

ELK日志分析平台

一、ELK 日志分析概述

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

1.ELK 组件

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

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

2.ELK 工作原理

在这里插入图片描述
Logstash 收集 AppServer 产生的 Log,并存放到 Elasticsearch 群集中,而 Kibana 则从 ES 群集中查询数据生成图表,再返回 Browser。简单来说,进行日志处理分析,一般需要经过以下几个步骤:

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

3.Elasticsearch 介绍

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

1)Elasticsearch 基础核心概念

  • 接近实时(NRT):ElasticSearch 是一个搜索速度接近实时的搜索平台,相应速度非常快,从索引一个文档直接到这个文档能够被搜索到只有一个轻微的延迟(通常是1s)。
  • 群集(cluster):在一个或多个节点上存放用户数据,并一起提供索引和搜索功能。通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。
  • 节点(node):是指一台单一的服务器,多个节点组织为一个群集,每个节点都存储数据并参与群集的索引和搜索功能。默认情况,每个节点都已经加入 Elasticsearch 群集。如果群集中有多个节点,它们将会自动组建一个名为 Elasticsearch 的群集。
  • 索引(index):类似于关系型数据库中的"库"。当索引一个文档后,就可以使用 Elasticsearch 搜索到该文档,在 index 下面包含存储数据的类型(Type),Type 类似于关系型数据 库中的"表",用来存放具体数据,而 Type 下面包含文档(Document),文档相当于关 系型数据库的"记录",一个文档是一个可被索引的基础信息单元。
  • 分片和副本(shards & replicas):Elasticsearch 将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定,且创建索引后不能更改。

分片的两个最主要原因:

  1. 水平分割扩展,增大存储量。
  2. 分布式并行跨分片操作,提高性能和吞吐量。

副本的两个最主要原因:

  1. 高可用性,以应对分片或节点故障。出于这个原因,分片副本要在不同节点上。
  2. 提高 IO 性能,增大吞吐量,搜索可以并行在所有副本执行
  • Elasticsearch 将索引分片复制一份或多份,称为副本。副本是索引 的另一个备份,用于数据冗余以及负载分担。默认情况下 Elasticsearch 自动对索引请求进行负载分担。

4.Logstash 介绍

Logstash 由 JRuby 语言编写,运行在 Java 虚拟机(JVM)上,常用于日志处理。Logstash 只做三件事情:数据输入、数据加工(如过滤,改写等) 以及数据输出。
在这里插入图片描述

1)LogStash 主要组件

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

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

5.Kibana 介绍

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

1)Kibana 主要功能

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

二、部署 ELK 群集

1.准备工作

主机名 操作系统 IP地址 内存 主要软件
node1 Centos7 192.168.1.200 3G elasticsearch,elasticsearch-head,kibana
node2 Centos7 192.168.1.210 3G elasticsearch,logstash

部署 ELK 需要使用以下软件包:
https://pan.baidu.com/s/1ut2CT1KBu37W9BPTGN-RBA
提取码:k625
node1,node2操作步骤一致

[root@localhost ~]# hostnamectl set-hostname node1	#node2 主机将 node1 换成node2 
[root@localhost ~]# bash
[root@node1 ~]# cat <<END >> /etc/hosts
192.168.1.200 node1
192.168.1.210 node2
END
[root@node1 ~]# java -version	#查看java版本,如果不显示,通过 yum -y install java 来进行安装
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

2.安装 Elasticsearch 软件

node1,node2操作步骤一致

[root@node1 ~]# ls
anaconda-ks.cfg          elasticsearch-head.tar.gz  node-v8.2.1.tar.gz
elasticsearch-5.5.0.rpm  kibana-5.5.1-x86_64.rpm
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm

在这里插入图片描述

1)加载系统服务

[root@node1 ~]# systemctl daemon-reload				#重新加载系统服务
[root@node1 ~]# systemctl enable elasticsearch		#给elasticsearch设置开机自启

在这里插入图片描述

2)更改 Elasticsearch 主配置文件

[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak	#先备份主配置文件
[root@node1 elasticsearch]# vim elasticsearch.yml 
17 cluster.name: my-application			#群集名称
23 node.name: node1						#节点服务器名称,node2要改成node2 
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						#监听端口
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]		#群集发现通过单播实现

3)创建数据存放路径并授权

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

4)启动 Elasticsearch 并查看是否成功开启

[root@node1 elasticsearch]# systemctl start elasticsearch		#开启elasticsearch服务
[root@node1 elasticsearch]# netstat -anpt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      15971/java

该服务启动较慢,若开启服务一分钟后端口还没开启,请检查刚才配置文件,Java版本(Centos7.7不兼容)
在这里插入图片描述

5)查看节点信息

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

3.安装 Elasticsearch-head 插件

只在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	#编译,配置,安装
安装时间较长,大概需要40分钟

2)安装 phantomjs

[root@node1 ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/src/
[root@node1 ~]# cp /usr/src/phantomjs-2.1.1-linux-x86_64/bin/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 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
在最后一行添加:
http.cors.enabled: true			  #开启跨域访问支持,默认为false
http.cors.allow-origin: "*"		  #跨域访问允许的域名地址(所有)

5)启动服务

[root@node1 elasticsearch-head]# npm start &
[1] 61394
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/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 -antp | egrep "9100|9200"	 #查看服务是否启动
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      61404/grunt
tcp6       0      0 :::9200                 :::*                    LISTEN      61334/java

在这里插入图片描述

6)使用浏览器访问测试

在这里插入图片描述

7)插入索引,并访问测试

索引名:index-demo 类型:test

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

在这里插入图片描述
访问测试:
在这里插入图片描述

二、使用 Logstash 收集日志

Logstash 使用管道方式进行日志的搜集处理和输出。
有点类似 linux 系统的管道命令: A | B | C, A执行完了会执行B,然后执行C。
在 Logstash 中,包括了三个阶段:

  • 输入 input --> 处理 filter(不是必须的) --> 输出 output

1.在 node2 上安装 Logstash 软件

[root@node2 ~]# ls
anaconda-ks.cfg  elasticsearch-5.5.0.rpm  logstash-5.5.1.rpm
[root@node2 ~]# rpm -ivh logstash-5.5.1.rpm
[root@node2 ~]# systemctl start logstash		#开启logstash服务
[root@node2 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/		#优化执行路径

在这里插入图片描述

1)Logstash 命令行中常用命令

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

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

[root@node2 ~]# logstash -e 'input { stdin{} } output { stdout{} }'
等待一段时间
................
The stdin plugin is now waiting for input:
04:52:25.988 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {
    
    :port=>9600}
www.baidu.com		 #手动编辑内容(标准输入)
2020-11-13T20:53:22.911Z node2 www.baidu.com	 #标准输出
www.sina.com		 #手动编辑内容 (标准输入)
2020-11-13T20:53:28.280Z node2 www.sina.com		 #标准输出

在这里插入图片描述
使用rubydebug显示详细输出,codec是一种编码器

[root@node2 ~]# logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug }}'
等待一段时间
................
The stdin plugin is now waiting for input:
04:58:04.817 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {
    
    :port=>9600}     
www.baidu.com
{
    
    
    "@timestamp" => 2020-11-13T20:58:32.356Z,
      "@version" => "1",
          "host" => "node2",
       "message" => "www.baidu.com"
}

在这里插入图片描述

2)使用 Logstash 将信息写入到 Elasticsearch 中

[root@node2 ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.1.200:9200"] }}'       
等待一段时间
................
The stdin plugin is now waiting for input:
05:03:41.607 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {
    
    :port=>9600}
www.baidu.com
www.sina.com
www.qq.com

在这里插入图片描述

3)使用浏览器访问测试

在这里插入图片描述

4)编辑 Logstash 配置文件,收集系统日志,输出Elasticsearch 中

[root@node2 ~]# ll /var/log/messages 
-rw-------. 1 root root 351983 11 14 05:08 /var/log/messages
[root@node2 ~]# chmod o+r /var/log/messages 	#给其他用户授权可读权限
[root@node2 ~]# ll /var/log/messages 
-rw----r--. 1 root root 353123 11 14 05:08 /var/log/messages
[root@node2 ~]# vim /etc/logstash/conf.d/system.conf
input {
    
    
        file {
    
    
           path => "/var/log/messages"
           type => "system"
           start_position => "beginning"
        }
}

output {
    
    
        elasticsearch {
    
    
          hosts => ["192.168.1.200:9200"]
          index => "system-%{+YYYY.MM.dd}"
        }
}
[root@node2 ~]# systemctl restart logstash	   #重启logstash服务

在这里插入图片描述

5)使用浏览器访问测试

在这里插入图片描述

三、使用 Kibana 查看分析日志

1.安装 Kibana 软件

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 ~]# systemctl enable kibana			#设置 kibana 开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

在这里插入图片描述

1)配置主配置文件

[root@node1 ~]# vim /etc/kibana/kibana.yml
找到以下配置项,将注释去掉,更改成如下:
2 server.port: 5601			  	 #kibana打开的端口
7 server.host: "0.0.0.0"		 #kibana侦听的地址
21 elasticsearch.url: "http://192.168.1.200:9200"	#和elasticsearch建立联系	
30 kibana.index: ".kibana"		 #在elasticsearch中添加.kibana索引

2)启动 Kibana 服务

[root@node1 ~]# systemctl start kibana
[root@node1 ~]# netstat -anpt | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      61650/node

2.Kibana 控制台

1)浏览器访问测试

在这里插入图片描述

2)点击 Discover 进行查看

在这里插入图片描述

四、部署一台Apache服务器,并监控数据

准备工作:

主机 操作系统 IP地址 主要软件
apache Centos7 192.168.1.1 httpd,logstash

1.安装 Apache 服务

挂光盘,并配置yum源

[root@localhost ~]# hostnamectl set-hostname apace	  #配置主机名
[root@localhost ~]# bash
[root@apace ~]# yum -y install httpd
[root@apace ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@apace ~]# echo "<h1>This is Apache</h1>" > /var/www/html/index.html
[root@apace ~]# systemctl start httpd
[root@apace ~]# curl http://192.168.1.1
<h1>This is Apache</h1>

在这里插入图片描述

2.在 Apache 上安装 Logstash 软件

[root@apace ~]# yum -y install java
[root@apace ~]# java -version
[root@apace ~]# rpm -ivh logstash-5.5.1.rpm
[root@apace ~]# systemctl daemon-reload
[root@apace ~]# systemctl enable logstash
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

在这里插入图片描述

3.编辑 Logstash 配置文件,收集 Apache 日志,输出Elasticsearch 中

[root@apace ~]# 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.200:9200"]
                index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
    
    
          elasticsearch {
    
    
                hosts => ["192.168.1.200:9200"]
                index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
}
[root@apace ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
[root@apace ~]# logstash -f /etc/logstash/conf.d/apache_log.conf 

4.使用浏览器访问测试

1)通过浏览器访问http://192.168.1.200:9100查看索引是否创建

在这里插入图片描述

2)登录 Kibana 添加索引

在这里插入图片描述
然后添加
在这里插入图片描述

3)选择 Discover 进行查看

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46902396/article/details/109677016
今日推荐