ELK日志分析系统

ELK日志分析系统概述

ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
由于服务器中的日志数量十分的庞大,在对日志分析的时候十分困难,使用ELK日志分析系统可以将日志可是化,简化对日志放分析。

Elasticsearch

提供了一个分布式多用户能力的全文搜索引擎
Elasticsearch核心概念

  • 接近实时
  • 集群
  • 节点
  • 索引
  • 索引(库)→类型(表)→>文档(记录)
  • 分片和副本

Logstash

一款强大的数据处理工具,可实现数据传输、格式处理、格式化输出,数据输入、数据加工(如过滤,改写等)以及数据输出
LogStash主要组件

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

Kibana

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

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

ELK日志分析系统架构

ELK的架构拓扑如下:
在这里插入图片描述
ELK日志分析系统

  • Elasticsearch
  • Logstash
  • Kibana

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

ELK配置案例

本次配置中使用四台设备进行

案例环境

案例配置拓扑如下:
在这里插入图片描述

主机ip系统安装软件
elasticsearch+kibana20.0.0.31centos7.6elasticsearch-5.5.0.rpm+kibana-5.5.1-x86_64.rpm,管理工具node-v8.2.1.tar.gz,elasticsearch-head.tar.gz ,phantomjs-2.1.1-linux-x86_64.tar.bz2
elasticsearch20.0.0.61centos7.6elasticsearch-5.5.0.rpm,管理工具node-v8.2.1.tar.gz,elasticsearch-head.tar.gz ,phantomjs-2.1.1-linux-x86_64.tar.bz2
logstash +Apache20.0.0.21centos7.6logstash-5.5.1.rpm,httpd
访问端20.0.0.88window10浏览器

配置大致过程

  • elasticsearch配置
    • 管理工具node-v8.2.1.tar.gz elasticsearch-head.tar.gz phantomjs-2.1.1-linux-x86_64.tar.bz2
  • logstash 配置
  • kibana配置
  • 浏览器访问kibana

配置步骤

配置前准备

1.修改主机名

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

2.修改hosts配置文件

[root@node1 ~]# vim /etc/hosts
在末尾添加
20.0.0.31 node1
20.0.0.61 node2
查看系统Java环境
[root@node1 ~]# java -version
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.各节点防火墙要设置下

[root@node2 elasticsearch]# iptables -F
[root@node2 elasticsearch]# setenforce 0
[root@node2 elasticsearch]# systemctl stop firewalld

部署ES(对logstash收集的日志建立索引信息方便查找)

1.安装ES
安装包准备
如果用xshell6的话安装过lrzsz(yum安装即可)就可以直接从寄主机中拖到xshell即可
如果不行请看共享文件

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

2.加载系统服务

[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# 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配置文件

[root@node1 etc]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml.bak
#前面的数字为行号,这个是群集名称
17 cluster.name: my-elk-cluster
#当前服务器节点名称
23 node.name: node1
#数据存放位置
33 path.data: /data/elk_data
#ES服务器日志存放位置
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: ["node1", "node2"]

4.创建在配置文件中声明的数据文件存放位置

[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.service 
[root@node1 elasticsearch]# netstat -antp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      12256/java          

从服务器node2也是这样配置的,具体的配置文件为
#前面的数字为行号,这个是群集名称

17 cluster.name: my-elk-cluster
23 node.name: 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
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]

5.查看节点信息
浏览器访问20.0.0.31:9200 20.0.0.61:9200
在这里插入图片描述
在这里插入图片描述

7.查看节点的健康状态
http://20.0.0.31:9200/_cluster/health?pretty
在这里插入图片描述

8.查看节点状态
http://20.0.0.31:9200/_cluster/state?pretty
在这里插入图片描述

Elasticsearch安装管理工具

1.准备环境

[root@node1 ~]# yum -y install gcc gcc-c++

2.上传软件包

3.解压node

[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz 
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure 
指定处理的核心数3,多点快,这里等待时间较长20分钟以上
[root@node1 node-v8.2.1]#make -j3
[root@node1 node-v8.2.1]# make install

4.解压phantomjs前端组件

[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/

5.解压elasticsearch-head数据可视化管理工具

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

6.修改elasticsearch配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"

7.启动elasticsearch-head管理工具

[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
[1] 58381
[root@node1 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@node1 elasticsearch-head]# netstat -antp |grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      58391/grunt         
如果查看9200端口没有的话,重启下elasticsearch再等 一会儿
[root@node1 elasticsearch-head]# netstat -antup |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      58445/java          

node2也这样配置启动服务

8.浏览器访问
http://20.0.0.31:9100/
在这里插入图片描述

创建一个索引
在这里插入图片描述

我们可以看到5个分片1个副本,有副本和分布式的结构在里面,具有可靠性和高可用性
在这里插入图片描述

我们也可以在我们elasticsearch上添加索引信息和查看
这条命令就是向本地elasticsearch中的index-demo索引中插入类型为test 数据格式为json内容为相应内容的数据

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

插入数据后也可以在浏览器中看到
在这里插入图片描述

我们就可以看到我们插入的数据,在这里index可以想象成数据库的数据库,而type可以看成是表

部署logstash(收集日志给ES)

1.更改主机名

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

2.防火墙配置

[root@apache ~]# iptables -F
[root@apache ~]# setenforce 0
[root@apache ~]# systemctl stop firewalld

3.安装Apache服务

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

4.安装Java环境(系统自带的就可以)

[root@apache ~]# java -version
openjdk version "1.8.0_222-ea"
OpenJDK Runtime Environment (build 1.8.0_222-ea-b03)
OpenJDK 64-Bit Server VM (build 25.222-b03, mixed mode)

5.安装logstash
将安装包放到虚拟机中,使用rpm安装即可

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm
警告: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 ~]# systemctl start logstash.service 
[root@apache ~]# systemctl enable logstash.service 
命令可被系统识别
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
logstash命令
-f 可以指定logstash的配置文件,
-e 后面可跟着字符串 该字符串可以被单做logstash的配置(如果是"",则默认使用stdin作为输入,stdout作为输出)
     logstash(相当于一个管道)作为日志收集自然需要日志的输入,在格式化处理后输出到ES或者是控制台
-t 测试配置文件是否正确

6.标准输入输出(输入输出)

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
#标准输入
www.baidu.com
#标准输出   
2020-09-15T01:34:12.979Z apache www.baidu.com
www.sina.com     
2020-09-15T01:34:28.255Z apache www.sina.com

7.使用特定格式输出(格式化输出)
以rubydebug的格式输出

[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug} }'
#标准输入
www.baidu.com
#格式化输出
{
    "@timestamp" => 2020-09-15T01:38:08.855Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

8.logstash与ES对接

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch {hosts=>["20.0.0.31:9200"]} }'
#标准输入
www.baidu.com
#输出到ES服务器上
到elasticsearch服务器上看

在ES上可以看到
在这里插入图片描述

9.logstash收集系统日志对接ES
logstash配置文件的三部分:output input filter
使用系统日志文件测试

[root@apache ~]# chmod o+r /var/log/messages 
[root@apache ~]# ll /var/log/messages 
-rw----r--. 1 root root 537813 9月  15 09:48 /var/log/messages
在子配置文件下创建配置文件
[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim system.conf
#输入
input {
        file{ 
#需要收集的日志存放的位置
         path => "/var/log/messages"
         #类型是方便ES建索引的
         type => "system"
         #日志中读取的起始位置,beginning表示从头
         start_position => "beginning"
         }
}
#输出到ES上
output {
         elasticsearch {
           hosts => ["20.0.0.31:9200"]
           #建立索引的格式
           index => "system-%{+YYYY.MM.dd}"
          }
}
[root@apache conf.d]# systemctl restart logstash.service

可在浏览器上看到信息了
在这里插入图片描述
在这里插入图片描述

部署kibana(node1)

1.安装包

[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm 
警告:kibana-5.5.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:kibana-5.5.1-1                   ################################# [100%]

2.配置文件修改

[root@node1 ~]# cd /etc/kibana/
[root@node1 kibana]# cp -p kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
#前面的数字为行号
#监听端口
2:server.port: 5601
#监听地址
7:server.host: "0.0.0.0"
#elasticsearch服务器地址
21:elasticsearch.url: "http://20.0.0.31:9200"
#在ES中建kibana索引,查看ES上的索引,这样就可以知道二者是否建立连接
30:kibana.index: ".kibana"

3.启动服务

[root@node1 kibana]# systemctl stop kibana.service 
[root@node1 kibana]# systemctl start kibana.service 

4.浏览器访问
http://20.0.0.31:5601/就可以看到kibana的页面了,功能能十分强大,可查看过去非常精确的时间段的日志
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Apache日志分析

logstash收集Apache日志

[root@apache ~]# cd /etc/logstash/conf.d/
[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 => ["20.0.0.31:9200"]
           index => "apache_access-%{+YYYY.MM.dd}"
           }
        }
        if [type] == "error" {
        elasticsearch {
           hosts => ["20.0.0.31:9200"]
           index => "apache_error-%{+YYYY.MM.dd}"
           }
        }
}
[root@apache conf.d]# logstash -f apache_log.conf 
等待一会

浏览器访问elasticsearch
http://20.0.0.31:9100/
在这里插入图片描述

浏览器访问http后会生成access日志,再访问kibana
20.0.0.31:5601访问kibana
在kibana中创建索引apache_access和apache_error
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

即可查看到相应的日志
在这里插入图片描述

软件包

软件包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值