ELK日志分析系统及实验部署

ELK简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

在这里插入图片描述

ELK的用途

传统意义上,ELK是作为替代Splunk的一个开源解决方案。Splunk 是日志分析领域的领导者。日志分析并不仅仅包括系统产生的错误日志,异常,也包括业务逻辑,或者任何文本类的分析。而基于日志的分析,能够在其上产生非常多的解决方案,譬如:

1.问题排查。我们常说,运维和开发这一辈子无非就是和问题在战斗,所以这个说起来很朴实的四个字,其实是沉甸甸的。很多公司其实不缺钱,就要稳定,而要稳定,就要运维和开发能够快速的定位问题,甚至防微杜渐,把问题杀死在摇篮里。日志分析技术显然问题排查的基石。基于日志做问题排查,还有一个很帅的技术,叫全链路追踪,比如阿里的eagleeye 或者Google的dapper,也算是日志分析技术里的一种。
2.监控和预警。 日志,监控,预警是相辅相成的。基于日志的监控,预警使得运维有自己的机械战队,大大节省人力以及延长运维的寿命。
3.关联事件。多个数据源产生的日志进行联动分析,通过某种分析算法,就能够解决生活中各个问题。比如金融里的风险欺诈等。这个可以可以应用到无数领域了,取决于你的想象力。
4.数据分析。 这个对于数据分析师,还有算法工程师都是有所裨益的。

logstash Agent 的作用:

它是负责数据收集,相当于管道符号传递给Elastic Search 去处理

Elastic Search 的作用:

它是负责把传递过来的数据进行存储

Kibana 的作用:

拉取Elastic Search的数据,然后以饼状图排版的形式在Browser

日志的处理步骤

将日志进行集中化管理

  • 将日志格式化(Logstash)并输出到ELasticsearch
  • 对格式化后的数据进行索引和存储(ELasticsearch)
  • 前端数据的展示(kibana)

ELasticsearch 的概述

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

ELasticsearch 核心概念

  • 接近实时

  • 集群

  • 节点

  • 索引
    ♦ 索引 (库)——》类型(表)——》文档 (记录)

  • 分片和副本

Logstash介绍

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

LogStash主要组件

  • Shipper
  • Indexer
  • Broker
  • Search and Storage
  • Web Interface

Kibana 介绍

Kibana 介绍

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

Kibana主要功能

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

案例拓扑

在这里插入图片描述

主机操作系统主机名/IP地址主要软件
服务器CentOS 7.4Node1/20.0.0.32Elasticsearch
服务器CentOS 7.4Node2/20.0.0.33Elasticsearch
服务器CentOS 7.4Node2/20.0.0.31apache、Logstash
服务器CentOS 7.4Node2/20.0.0.34kibana

一、部署Elasticsearch群集节点

1、安装Elasticsearch软件

注:两个节点配置,除了主机名和节点号,其余配置完全相同。

1.1)给两台节点设置主机名,并做主机映射(只列举其中一台)

[root@promote ~]# hostnamectl set-hostname node1
[root@promote ~]# bash
[root@node1 ~]# vi /etc/hosts
20.0.0.32 node1
20.0.0.33 node2

1.2)查看Java环境,需要java支持(四台机都查看)

[root@node1 ~]# 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)

1.3)两节点安装Elasticsearch相关软件包

[root@node1 ~]# ls   ##查看rpm包
……  elasticsearch-5.5.0.rpm 
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm   ##rpm安装
[root@node1 ~]# systemctl daemon-reload    ##重载系统参数
[root@node1 ~]# systemctl enable elasticsearch.service   ##开机自启

1.4)修改ES配置文件

[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml-bak  ##带属性备份配置文件
[root@node1 elasticsearch]# vim 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  
                      ##内存加固,true表示允许将溢出的内存保存到swap缓存中,false则表示不允许
'55行//'  network.host: 0.0.0.0       ##监听地址,写任意网段
'59行//'  http.port: 9200  ##开启9200端口
'68行//'  discovery.zen.ping.unicast.hosts: ["node1", "node2"]  ##群集内部通讯使用的是非广播包的形式,”[ ]”内写节点名称
[root@node1 elasticsearch]# grep -v "^#" /etc/elasticsearch/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"]

1.5)创建数据目录,并改变属性,启动Elasticsearch

[root@node1 ~]# mkdir -p /data/elk_data   ##创建数据存放目录
[root@node1 ~]# id elasticsearch  ##安装时,系统自动创建了elasticsearch用户,可以使用id命令查看 
          
uid=990(elasticsearch) gid=985(elasticsearch) groups=985(elasticsearch)
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data  ##改变属性
[root@node1 elasticsearch]# systemctl start elasticsearch  ##启动elasticsearch服务
[root@node1 elasticsearch]# netstat -anupt |grep 9200   ##启动较慢,可能要等几秒
tcp6       0      0 :::9200                 :::*                    LISTEN      38188/java  

2、进行ES访问测试(安装head图像化展示插件前)

2.1)查看节点信息

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

3、节点安装elasticsearch-head插件,图形化展示

3.1)首先安装node组件依赖包

[root@node1 elasticsearch]# yum -y install gcc gcc-c++ make
[root@node2 ~]# ls
 node-v8.2.1.tar.gz  
……省略部分
[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 && make install   ##编译安装,建议使用-j,否则较慢

3.2)安装phantomjs前端框架

[root@node1 ~]# ls
……省略部分
  phantomjs-2.1.1-linux-x86_64.tar.bz2 
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/bin/   ##/bin目录下有执行脚本
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/

3.3)安装elasticsearch-head,数据的可视化工具

[root@node1 ~]# ls
……省略部分
 elasticsearch-head.tar.gz 
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install  ##npm是一种前端工具

3.4)修改ES配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enable: true     ##在末尾插入这两行,自动开启
http.cors.allow-origin: "*"     ##允许任意域名访问
[root@node1 ~]# systemctl restart elasticsearch.service

3.5)启动elasticsearch-head可视化工具 elasticsearch-head是java开发的,需要npm方式启动

[root@node1 ~]# cd /root/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &   ##使用npm后台启动
[root@node1 elasticsearch-head]# netstat -lnuapt |grep 9100  ##查看端口状态
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      84888/grunt 

4、访问elasticsearch测试(可视化展示数据)

注:外部直接访问ES的端口是9200,访问ES-head的端口是9100,登入ES-head后再访问9200端口,看访问可视化数据

在这里插入图片描述

使用下面命令插入数据测试

[root@node2 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'  
                                        ##插入数据测试

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

二、部署Logstash日志采集器

1.安装logstash软件,并启动

[root@logstash ~]# ls   ##查看相关软件包
……省略部分
 logstash-5.5.1.rpm
[root@logstash ~]# rpm -ivh logstash-5.5.1.rpm ##安装Logstash软件包
[root@logstash ~]# rpm -qc logstash   ##查看logstash配置文件位置
/etc/logstash/jvm.options
/etc/logstash/logstash.yml
/etc/logstash/startup.options
[root@logstash ~]# systemctl start logstash.service   ##开启logstash日志收集器
[root@logstash ~]# systemctl enable logstash.service   ##开机自启
[root@logstash ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/  ##建立软连接

2.利用logstash命令输入数据,测试ES接收情况

logstash (Apache)与elasticsearch (node)功能是否正常,做对接测试Logstash这个命令测试
字段描述解释:
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
-t:测试配置文件是否正确,然后退出
标准输出中加入”codec=>rubydebug”字段,可以转换输出格式,转换成详细格式

2.1)试验logstash命令

[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{} }'   ##会进入一个交互模式
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
####上面的报错是因为没有开启java的log4j日志没开启,不影响本实验
……省略部分
12:02:00.759 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
12:02:00.936 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}  ##提供了9600端口
www.kgc.com        ##输入信息
2020-10-29T04:02:14.709Z logstash www.kgc.com   ##这里会自动输出你输入的内容

[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
    ####标准输出中加入”codec=>rubydebug”字段,可以转换输出格式,转换成详细格式 ,由此可以看出Logstash具有格式转换功能
……省略部分
12:15:54.510 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
12:15:54.642 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.51xit.com    ##输入信息后,下方输出详细数据   
{
    "@timestamp" => 2020-10-29T04:18:32.295Z,
      "@version" => "1",
          "host" => "logstash",
       "message" => "www.51xit.com"
}

2.2)将logstash的信息输出到Elasticsearch(ES)中

[root@logstash ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.10:9200"] } }'
 ……省略部分
13:23:21.475 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
13:23:21.568 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
    ##提示成功开启了logstash的接口,接下来就可以输入数据到ES中显示了
www.baidu.com   ##插入数据

2.3)访问ES验证对接情况Elasticsearch 20.0.0.33:9100(在生产环境中一般都是访问Keepalived的VIP地址)

在这里插入图片描述

Logstash配置文件主要有三个部分组成,input、output、filter(过滤器)组成
Logstash收集的日志信息被设置标签(type),filter再利用标签进行分类。

3.利用Logstash收集系统日志测试ES对接状况

3.1)配置logstash采集系统日志的配置文件

[root@logstash ~]# chmod o+r /var/log/messages   ##授予系统日志给其他用户读取的权限
[root@logstash ~]# cd /etc/logstash/conf.d/   ##进入/etc/logstash/conf.d/下创建配置文件
[root@logstash conf.d]# vi system.conf   ##编写配置,可以编写多个,每个采集一大类日志,配置文件名称自定义,但是必须要以 .conf 结尾
input {
        file{           ##输入点是文件
        path => "/var/log/messages"     ##采集的文件位置
        type => "system"        ##设置标签
        start_position => "beginning"     ##采集开始位置,从开头开始
        }
}

output {
        elasticsearch{        ## 输出点是ES
        hosts => ["20.0.0.32:9200"]   ##ES的主机地址及端口,生产环境用的是VIP地址,而不是单个节点地址
        index => "system-%{+YYYY.MM.dd}"     ##ES索引的形式,‘-年月日’的形式
        }
}

3.2)检查配置并重启logstash服务

[root@logstash conf.d]# logstash -f /etc/logstash/conf.d/system.conf -t  ##检查配置文件是否真确
……省略部分 
Configuration OK   ##配置OK,没问题
13:57:43.260 [LogStash::Runner] INFO  logstash.runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
[root@logstash conf.d]# systemctl restart logstash.service   ##重启Logstash

3.3)访问ES验证20.0.0.32:9100

在这里插入图片描述

4.安装Apache服务,供logstash采集日志

4.1)安装Apache

[root@logstash ~]# yum -y install httpd
[root@logstash ~]# cd /etc/logstash/conf.d
[root@logstash ~]# systemctl start httpd.service    ##启动Apache服务
[root@logstash ~]# ls /var/log/httpd/    ##查看日志目录,有两个日志文件
access_log  error_log

4.2)访问Apache测试
在这里插入图片描述

4.3)配置Apache日志采集配置

[root@logstash conf.d]# vim Apache-log.conf  ##编写Apache日志收集的配置
input {
        file{
        path => "/var/log/httpd/access_log"
        type => "access"
        start_position => "beginning"
        }

        file{
        path => "/var/log/httpd/error_log"
        type => "error"
        start_position => "beginning"
        }
}

output {
        if [type] == "access" {      ##判断匹配access标签
         elasticsearch{
         hosts => ["192.168.10.10:9200"]
         index => "Apache_access-%{+YYYY.MM.dd}"
         }
        }
        
        if [type] == "error" {      ##判断匹配error标签
         elasticsearch{
         hosts => ["192.168.10.10:9200"]
         index => "Apache_error-%{+YYYY.MM.dd}"
         }
        }
}
[root@logstash ~]# logstash -f /etc/logstash/conf.d/Apache-log.conf -t    ##检查配置
……省略部分
Configuration OK    ##配置OK没问题
14:41:31.909 [LogStash::Runner] INFO  logstash.runner - Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash
[root@logstash ~]# logstash -f /etc/logstash/conf.d/Apache-log.conf   ##重启配置

4.4)访问ES 20.0.0.32:9100 验证
在这里插入图片描述
**

三、部署Kibana(因为是实验环境,就直接装在node1节点上了)

1.安装Kibana

[root@node1 ~]# cd /usr/local/src/   ##Kibana的rpm包直接放在了src/目录下
[root@node1 src]# ls   ##查看软件包
kibana-5.5.1-x86_64.rpm
[root@node1 src]# rpm -ihv kibana-5.5.1-x86_64.rpm  ##直接安装

2.配置Kibana配置文件

[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp -p kibana.yml kibana.yml.bak   ##保留属性备份配置文件
[root@node1 kibana]# vim kibana.yml
2 行//  server.port: 5601   ##开启5601端口
7 行//  server.host: "0.0.0.0"   ##设置监听主机地址为0.0.0.0,任意地址
21行//  elasticsearch.url: "http://192.168.10.10:9200"   ##指定ES的访问地址,真是环境为VIP地址
30行//  kibana.index: ".kibana"    ##开启Kibana索引
[root@node1 kibana]# systemctl restart kibana.service   ##重启Kibana服务

3.访问Kibana 20.0.0.34:5601

0#pic_center)
F,t_70#pic_center)
Gk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODE5MTAzOQ==,size_16,color_FFFFFF,t_70#pic_center)
dow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODE5MTAzOQ==,size_16,color_FFFFFF,t_70#pic_center)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值