ELK日志分析系统

ELK日志分析

日志服务器

  • 提高安全性
  • 集中存放日志
  • 缺陷
    • 对日志的分析困难

ELK日志分析系统组成

  • Elasticsearch
  • Logstash
  • Kibana

处理步骤

  • 将日志进行集中化管理

    • 因为es拥有前端和后端所有集群的数据信息,对于es来说就是集中化管理,不需要每一台去收集,Logstash回去收集信息,只需管理和 Logstash对接的日志数据源就可以
  • 将日志格式化(Logstash) 并输出到Elasticsearch

    • 格式化目的:输出为一个标准可以作为展示页面的输出
  • 对格式化后的数据进行索引和存储( Elasticsearch)

    • 非常强大的索引,百度和谷歌都用这个搜索引擎
  • 前端数据的展示( Kibana)

Elasticsearch索引数据库

概述

  • 提供了一个分布式多用户能力的全文搜索引擎
  • 搜索引擎效率高是因为有分片和副本机制

核心理念

  • 接近实时(NRT)

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

    • 一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。
    • 一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
  • 节点(node)

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

    • 在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
      • 类型相对于关系型数据库的表
        - 索引(库)–》类型(表)–》文档(记录)
  • 分片和副本(shards & replicas)

    • 在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。
      每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。
    • 在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。
    • 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片

Logstash

  • 一款强大的数据处理工具
    • 可实现数据传输、格式处理、格式化输出
    • 数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)
    • Logstash的主要组件
shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
indexer:日志存储者,负责接收日志并写入到本地文件
broker:日志hub,负责连接多个shipper和多个indexer
search and storage:允许对事件进行搜索和存储
web interface:基于Web的展示界面

Kibana

  • 一个针对Elasticsearch的开源分析及可视化平台
  • 搜索、查看存储在Elasticsearch索引中的数据
  • 通过各种图表进行高级数据分析及展示
  • 主要功能
    • Elasticsearch无缝之集成
    • 整合数据,复杂数据分析
    • 让更多团队成员收益
    • 接口灵活,分享更容易
    • 配置简单,可视化多数据源
    • 简单数据导出

项目配置

环境准备

node01 20.0.0.14
node02 20.0.0.15
apache 20.0.0.13

配置文件

在node01,node02上配置

[root@node01 ~]# vi /etc/hosts
[root@node01 ~]# java -version

在这里插入图片描述
在这里插入图片描述
node01,node02
在这里插入图片描述

[root@node01 ~]# 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
[root@node01 ~]# systemctl daemon-reload 
[root@node01 ~]# systemctl enable elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.

在这里插入图片描述

[root@node01 ~]# cd /etc/elasticsearch/
[root@node01 elasticsearch]# ll
总用量 16
-rw-rw----. 1 root elasticsearch 2854 7月   1 2017 elasticsearch.yml
-rw-rw----. 1 root elasticsearch 3117 7月   1 2017 jvm.options
-rw-rw----. 1 root elasticsearch 4456 7月   1 2017 log4j2.properties
drwxr-x---. 2 root elasticsearch    6 7月   1 2017 scripts
[root@node01 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak #备份
[root@node01 elasticsearch]# ll
总用量 20
-rw-rw----. 1 root elasticsearch 2854 7月   1 2017 elasticsearch.yml
-rw-r-----. 1 root root          2854 1月   5 22:45 elasticsearch.yml.bak
-rw-rw----. 1 root elasticsearch 3117 7月   1 2017 jvm.options
-rw-rw----. 1 root elasticsearch 4456 7月   1 2017 log4j2.properties
drwxr-x---. 2 root elasticsearch    6 7月   1 2017 scripts

在这里插入图片描述

[root@node01 elasticsearch]# vi elasticsearch.yml

17行 cluster.name: my-elk-cluster
23行 node.name: node01
33行 path.data: /data/elk_data
37行 path.logs: /var/log/elasticsearch/
43行 bootstrap.memory_lock: false
55行 network.host: 0.0.0.0
59行 http.port: 9200
68行 discovery.zen.ping.unicast.hosts: ["node01", "node02"] 

[root@node01 elasticsearch]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml #反向过滤掉带#号的行
[root@node01 elasticsearch]# mkdir -p /data/elk_data
[root@node01 elasticsearch]# chown elasticsearch.elasticsearch /data/elk_data/
[root@node01 elasticsearch]# systemctl start elasticsearch.service  #开启服务
[root@node01 elasticsearch]# netstat -ntap | grep 9200  #查看端口服务  开启的比较慢需要等待一会儿

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

在这里插入图片描述
在这里插入图片描述
检查验证
在本地浏览器中访问
在这里插入图片描述
node02上按照node01的配置进行适当修改即可
在这里插入图片描述
集群检查健康
浏览器上输入
http://20.0.0.14:9200/_cluster/health?pretty
http://20.0.0.15:9200/_cluster/health?pretty
在这里插入图片描述
在这里插入图片描述
群集检查状态
http://20.0.0.14:9200/_cluster/state?pretty
http://20.0.0.15:9200/_cluster/state?pretty
在这里插入图片描述

在这里插入图片描述
安装elasticsearch-head插件
编译安装node组件依赖包

[root@node01 ~]# tar zxvf node-v8.2.1.tar.gz
[root@node01 ~]# ll
[root@node01 ~]# cd node-v8.2.1/
[root@node01 node-v8.2.1]# ./configure
[root@node01 node-v8.2.1]# make
[root@node01 node-v8.2.1]# make install

在这里插入图片描述
安装phantomjs前端框架

[root@node01 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node01 ~]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@node01 bin]# cp phantomjs /usr/local/bin

安装可视化工具

[root@node01 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node01 ~]# cd elasticsearch-head/
[root@node01 elasticsearch-head]# npm install

在这里插入图片描述
编辑配置文件

[root@node01 ~]# vi /etc/elasticsearch/elasticsearch.yml
末尾添加
http.cors.enabled: true  #开启跨域访问支持,默认为false
http.cors.allow-origin: "*"  #跨域访问允许的域名地址

在这里插入图片描述

在这里插入图片描述
启动elasticsearch-head

[root@node01 ~]# cd elasticsearch-head/
[root@node01 elasticsearch-head]# npm run start & #切换到后台运行
[1] 112034
[root@node01 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /root/elasticsearch-head
> grunt server

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

[root@node01 elasticsearch-head]# netstat -lnupt | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112044/grunt        
[root@node01 elasticsearch-head]# netstat -lnupt | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      111214/java 

在这里插入图片描述
在这里插入图片描述
node02上也需要打以上的命令

在浏览器上输入20.0.0.14:9100/ 查看

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

输入20.0.0.15:9100 查看效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加索引
先在页面创建索引 再添加配置
在这里插入图片描述

node1上查看添加的索引

[root@node01 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

-XPUT ‘localhost:9200  #指定在本地
/index-demo/test/  #索引中建立test
1?pretty&pretty’   #问好后面跟一些参数
application/json   #以json格式插入数据

在这里插入图片描述再次连接 20.0.0.14:9200/
在这里插入图片描述
查看添加的信息
添加成功
在这里插入图片描述
Apache主机上安装logstash
安装apache

[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd
[root@apache ~]# netstat -anpt | grep httpd

在这里插入图片描述
安装logstash
添加软件包
在这里插入图片描述

[root@apache ~]# java -version  #验证Java环境
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)

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm

#启动logstash,并设置开机自启
[root@apache ~]# systemctl start logstash.service
[root@apache ~]# systemctl enable logstash.service

在这里插入图片描述
在这里插入图片描述
创建软链接

[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

网页对接

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'

在这里插入图片描述
验证logstash可进行格式化输出

# 使用rubydebug显示详细输出,codec为一种编解码器
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

在这里插入图片描述
使用logstash将信息写入到elasticsearch

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>["20.0.0.14:9200"] } }'

在这里插入图片描述
浏览器浏览集群
在这里插入图片描述
在这里插入图片描述
在apache主机做对接配置
logstash配置文件主要由三部分组成:

  • input
  • output
  • filter
[root@apache ~]# ll /var/log/messages
-rw-------. 1 root root 680574 1月   7 13:03 /var/log/messages
[root@apache ~]# chmod o+r /var/log/messages
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 688306 1月   7 13:04 /var/log/messages
[root@apache ~]# cd /etc/logstash/
[root@apache logstash]# ls
conf.d  jvm.options  log4j2.properties  logstash.yml  startup.options
[root@apache logstash]# cd conf.d/
[root@apache conf.d]# vi system.conf
#添加
input {
        file{
         path => "/var/log/messages"
         type => "system"
         start_position => "beginning"
         }
        }
output {
        elasticsearch {
         hosts => ["20.0.0.14:9200"]
         index => "system-%{+YYYY.MM.dd}"
         }
        }
[root@apache conf.d]# systemctl restart logstash.service

在这里插入图片描述
浏览器中访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在node01上安装kibana

[root@node01 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 

在这里插入图片描述
配置文件

[root@node01 ~]# cd /etc/kibana/
[root@node01 kibana]# cp kibana.yml kibana.yml.bak
[root@node01 kibana]# vi kibana.yml
第二行 server.port: 5601
第七行 server.host: "0.0.0.0"
第二十一行 elasticsearch.url: "http://20.0.0.14:9200"
第三十行 kibana.index: ".kibana"
[root@node01 kibana]# systemctl start  kibana.service  #重启服务
[root@node01 kibana]# systemctl enable kibana.service  #设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.

在这里插入图片描述
在这里插入图片描述
浏览器访问
20.0.0.14:5601
在这里插入图片描述
创建
system-*
在这里插入图片描述
查看创建的信息
在这里插入图片描述
以不同的类型来查看
在这里插入图片描述
对接apache主机的apache日志文件
在Apache主机上

[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 => ["20.0.0.14:9200"]
         index => "apache_access-%{+YYYY.MM.dd}"
         }
        }
        if [type] == "error" {
        elasticsearch {
         hosts => ["20.0.0.14:9200"]
         index => "apache_error-%{+YYYY.MM.dd}"
         }
        }
        }

[root@apache conf.d]# logstash -f apache_log.conf

浏览器访问
20.0.0.14:9100
在这里插入图片描述
浏览器访问apache主机20.0.0.13
然后访问20.0.0.14:9100
在这里插入图片描述
查看apache_access
在这里插入图片描述
查看apache_error
在这里插入图片描述
查看kibana,并创建新索引
apache_access-*
在这里插入图片描述
apache_error-*
在这里插入图片描述
查看
在这里插入图片描述
在这里插入图片描述
创建成功
ELK完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值