ELK日志分析系统:理论加实验

ELK日志分析系统简介:

日志服务器
●提供安全性

●集中存放日志

●缺陷

  • 对日志的分析困难

●ELK日志分析流程:收集日志,传给ES去存储,Kibana会将收集的日志信息展现出来给管理员去查看
在这里插入图片描述
ELK日志分析系统
●Elasticsearch

●Logstash

●Kibana
日志处理步骤

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

Elasticsearch介绍

Elasticsearch概述

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

Elasticsearch核心概念
●接近实时

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

●集群:多个节点组成

  • 一个集群就是由一个或多个节点组织在一起,他们共同持有整个数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个节点是可以通过选举产生的,并提供跨节点的联合索引和搜索功能。集群有一个唯一性标示的名字,默认是elasticsearch,一个集群可以只有一个节点。强烈建议在配置elasticseach时,配置成集群模式

●节点

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

●索引

  • 一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部就是小写字母的),并且当我们要对对应于这个索引中的文档进行索引,搜索,更新和删除的时候,都要使用
    到这个名字。在一个集群中,如果你想,可以定义任意多的索引

●索引(库)–>类型(表)–>文档(记录)

●分片和副本

Logstash介绍

●一款强大的数据处理工具

●可实现数据传输,格式处理,格式化输出

●数据输入,数据加工(如过滤,改写等)以及数据输出

Logstach主要组件
●Shipper:日志收集者。负责监控本地日志文化的变化,及时把日志文件的最新内容收集起来

●Indexer:日志存储者。负责接收日志并写入到本地文件

●Broker:日志Hub负责连接多个Shipper和多个Indexer

●Search and storage:允许对事件进行搜索和存储

●Web interface:基于web的展示界面

Kibana介绍

Kibana介绍
●一个针对Elasticsearch的开源分析及可视化平台

●搜索,查看存储在Elasticsearch索引中的数据

●通过各种图表进行高级数据分析及展示
Kibana主要功能

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

ELK服务器的部署

实验环境

在这里插入图片描述

一.Elasticsearch服务器的部署

推荐步骤:
node1与node2操作相同,此处仅展示node1的操作
1.修改主机名以便区分(这边显示node1节点的配置)

[root@localhost ~]# setenforce 0     ##关闭临时防护
[root@localhost ~]# iptables -F      ##清空防火墙规则
[root@localhost ~]# hostnamectl set-hostname node1    ##修改主机名为node1方便区分
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts    ##设置本地主机映射文件,node1和node2节点操作
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.148.132 node1     ##添加两个IP地址+主机名
192.168.148.133 node2
Node2
[root@node1 ~]# scp /etc/hosts root@192.168.148.133:/etc/hosts     ##将修改信息拷贝到node2节点上

在这里插入图片描述
2.将ES工具放到OPT目录下,进行解压(两边节点都需要安装)

[root@node1 ~]# cd /opt/      ##将工具放到/opt目录下

在这里插入图片描述
3.更改配置文件

[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak    ##为安全考虑先拷贝一份
[root@node1 elasticsearch]# vim elasticsearch.yml     ##修改配置文件
17 cluster.name: my-elk-cluster   ##17行集群名字
23 node.name: node1         ##23行节点名称
33 path.data: /data/elk_data     ##33行数据文件存放位置(过火自己去创建)
37 path.logs: /var/log/elasticsearch/     ##37行日志文件存放位置
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"]     ##集群发现通过单播实现

在这里插入图片描述

[root@node1 elasticsearch]# mkdir -p /data/elk_data     ##创建存放路径
[root@node1 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/   ##设置属主,属组
[root@node1 elasticsearch]# systemctl start elasticsearch.service    ##开启服务

在这里插入图片描述
4.这时打开谷歌浏览器输入:192.168.148.132:9200可以访问页面
在这里插入图片描述
同理node2也是相同的配置,只是23行节点名称改为node2
node.name: node2
在这里插入图片描述
5.检查集群健康和状态
检查健康:地址后方加入/_cluster/health?pretty
在这里插入图片描述
检查状态:地址后方加入/_cluster/state?pretty
在这里插入图片描述

node1和node2安装elasticsearch-head插件(这边展示node1的安装)
[root@node1 elasticsearch]# cd /opt/

在这里插入图片描述

[root@node1 opt]# yum -y install gcc gcc-c++ make    ##安装环境包 
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz     ##将软件包进行解压
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3    ##编译指定线程

在这里插入图片描述

[root@node1 node-v8.2.1]# make install    ##安装

6.安装phantomjs(前端框架)

[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src 
[root@node1 local]# 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/    ##将命令让系统识别
安装elasticsearch-head
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/     ##解压文件
[root@node1 opt]# cd /usr/local/src/
[root@node1 src]# ls     
elasticsearch-head  phantomjs-2.1.1-linux-x86_64
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install     ##初始化项目

在这里插入图片描述

[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml   ##修改主配置文件然后重启服务
#
#action.destructive_requires_name: true
http.cors.enabled: true         ##底行加入   
http.cors.allow-origin: "*"
[root@node1 elasticsearch-head]# npm run start &   ##启动项目切换到后台运行
[root@node1 elasticsearch-head]# systemctl restart elasticsearch   ##重启ES服务

在这里插入图片描述
Node2节点
在这里插入图片描述
7.这时两边服务都起来后,直接打开浏览器输入http://192.168.148.132:9100/,做访问测试
在这里插入图片描述
输入http://192.168.148.133:9100/也一样可以查看信息
在这里插入图片描述
8.回到node1节点创建索引为index-demo;类型为test,登录网页测试
1.在网页上创建索引
在这里插入图片描述
在这里插入图片描述
2.回到node1节点插入数据

[root@node1 /]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"lisi","mesg":"hello word"}'    ##索引类型为test ,用户为“lisi”

在这里插入图片描述
3.回到客户端查看
在这里插入图片描述
在这里插入图片描述
192.168.148.132也是一样的查看
在这里插入图片描述

二.logstash服务器部署

打开一台新的节点安装logstash并做一些日志搜集输出到elasticsearch中
1.关闭防火墙设置

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# iptables -F

2.修改主机名,以便区分

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

3.安装hhttpd服务

[root@apache ~]# yum -y install httpd

4.安装logstash并进行配置

[root@apache ~]# cd /opt/

在这里插入图片描述

[root@apache opt]# rpm -ivh logstash-5.5.1.rpm    ##安装工具包
[root@apache opt]# systemctl start logstash.service    ##开启服务
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/   ##将命令建立软链接方便系统识别

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

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'    ##采用标准型输入和输出语法

在这里插入图片描述
5.采用rubydebug显示详细输出,codec为一种编解码器

[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

在这里插入图片描述
6.使用logstash将信息写入elasticsearch中输入输出对接

[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>["192.168.148.132:9200"] } }'    ##hosts指向主节点node1的地址和端口

在这里插入图片描述
回到网站刷新查看
在这里插入图片描述
在这里插入图片描述
7.配置对接

[root@apache log]# cd /var/log
[root@apache log]# chmod o+r messages    ##给系统日志其他人能读的权限
[root@apache conf.d]# ll /var/log/messages
-rw----r--. 1 root root 120713 915 15:55 /var/log/messages    
[root@apache conf.d]# cd /etc/logstash/conf.d/     ##切换到conf.d的路径下
[root@apache conf.d]# vim system.conf    ##编写配置文件
input {
    
    
       file{
    
    
        path => "/var/log/messages"       ##路径
        type => "system"     ##索引类型
        start_position => "beginning"
        }
      }
output {
    
    
        elasticsearch {
    
    
          hosts => ["192.168.148.132:9200"]    ##主机地址
          index => "system-%{+YYYY.MM.dd}"    ##索引开头
          }
        }
[root@apache conf.d]# systemctl restart logstash.service     ##重启服务

8.打开浏览器刷新访问
在这里插入图片描述

三.kibana服务器部署

1.用第4个节点配置kibana

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[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 -p kibana.yml kibana.yml.bak    ##拷贝一份备份
[root@kibana kibana]# vim kibana.yml     ##修改配置文件
2 server.port: 5601     ##端口号开启
7 server.host: "0.0.0.0"    ##服务侦听地址
21 elasticsearch.url: "http://192.168.148.132:9200"   ##和ES工具建立联系
30 kibana.index: ".kibana"      ##在elasticsearch中添加.kibana索引
[root@kibana kibana]# systemctl start kibana.service   ##开启服务

2.打开浏览器输入http://192.168.148.135:5601/就可以访问页面系统信息测试了
在这里插入图片描述
但是ES的web端页面必须要有kibana的索引,这样kibana可以来统计数据了
在这里插入图片描述
可以查看日志信息
在这里插入图片描述
4.回到apache节点上配置对接apache主机的日志文件(访问成功 错误的)

[root@apache conf.d]# vim 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.148.132:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"    ####索引名称
          }
        } 
        if [type] == "error" {
    
    
        elasticsearch {
    
    
          hosts => ["192.168.148.132:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"    
          }
        } 
        }
[root@apache conf.d]# logstash -f apache-log.conf    ##指定配置文件做测试

5.再次用浏览器到ES端查看
在这里插入图片描述
在这里插入图片描述
6.回到kibana端可以创建两个apache的索引
在这里插入图片描述
在这里插入图片描述
实验到此为止ELK就部署成功了

猜你喜欢

转载自blog.csdn.net/Cpureman/article/details/108603406