ELK日志分析系统

目录 

一.ELK日志分析系统简介

1.ELK的三大组成

2.完整日志系统基本特征

3.ELK中日志处理步骤

4.Elasticsearch

5.Logstash

LogStash主要组件

6.Kibana

Kibana主要功能

二.部署

1.环境配置

2.初始化操作,配置elasticsearch环境192.168.68.200

3.192.168.68.30

1.配置elasticsearch环境

2.部署elasticsearch软件

3.检测集群状态

4.安装elasticsearch-head插件

5.安装phantomjs(前端框架)

6.安装elasticsearch-head(数据可视化工具)

7.修改主配置文件

8.启动elasticsearch-head

9.使用elasticsearch-head插件查看集群状态

10.创建索引

4.192.168.68.105

1.配置elasticsearch环境

2.部署elasticsearch软件

3.检测集群状态

4.安装elasticsearch-head插件

5.安装phantomjs(前端框架)

6.安装elasticsearch-head(数据可视化工具)

7.修改主配置文件

8.启动elasticsearch-head

9.使用elasticsearch-head插件查看集群状态

10.创建索引

5.安装logstash(192.168.68.200)

6.测试logstash命令

1.标准输出

2.详细输出

3.使用logstash将信息写入elasticsearch中,输入 输出 对接

7.安装kibana(192.168.68.30)

1.修改配置文件

2.测试

3.对接Apache主机的Apache 日志文件(访问日志、错误日志)

4.测试(192.168.68.30)


一.ELK日志分析系统简介

1.ELK的三大组成

ELK=elasticsearch+logstash+kibana
  • ​​​Elasticsearch
    • 是一个开源分布式搜索引擎,特点有:分布式、零配置、自动发现
    • 索引自动分片、索引副本机制,restful风格接口,多数据,自动搜索负载等
    • 通常作为具有复杂搜索场景情况下的核心发动机
  • Logstash

    • 是一个完全开源的工具,它可以对日志进行收集、过滤,并将其存储,供以后使用

  • Kibana

    • 是一个开源免费的工具,kibana可以为Logstash和Elasticsearch提供友好的日志分析web页面

2.完整日志系统基本特征

  • 收集∶能够采集多种来源的日志数据

  • 传输∶能够稳定的把日志数据解析过滤并传输到存储系统

  • 存储∶存储日志数据

  • 分析∶支持 UI分析

  • 警告∶能够提供错误报告,监控机制

3.ELK中日志处理步骤

  • 第一步:将日志进行集中化管理(beats)

  • 第二步:将日志格式化(Logstash),然后将格式化后的数据输出到Elasticsearch

  • 第三步:对格式化后的数据进行索引和存储(Elasticsearch)

  • 第四步:前端数据的展示(Kibana)

4.Elasticsearch

  1. 实时搜索、实时分析

  2. 分布式架构、实时文件存储

  3. 文档导向,所有对象都是文档

  4. 高可用,易扩展,支持集群,分片与复制

  5. 接口友好,支持json

5.Logstash

  • 一款强大的数据处理工具
  • 可实现数据传输、格式处理、格式化输出
  • 数据输入、数据加工(如过滤,改写等)以及数据输出
  • 常用插件:Input、Filter Plugin、Output
  • Input:收集源数据(访问日志、错误日志等)
  • Filter Plugin:用于过滤日志和格式处理
  • Output:输出日志6.kibana

LogStash主要组件

  • Shipper

  • Indexer

  • Broker

  • Search and Storage

  • Web Interface

6.Kibana

  • 一个针对Elasticsearch的开源分析及可视化平台

  • 搜索、查看存储在Elasticsearch索引中的数据

  • 通过各种图表进行高级数据分析及展示

Kibana主要功能

  • Elasticsearch无缝之集成

  • 整合数据,复杂数据分析

  • 让更多团队成员收益

  • 接口灵活,分享更容易

  • 配置简单、可视化多数据源

  • 简单数据导出

二.部署

1.环境配置

apache:192.168.68.200 # httpd / Logstash
es01:192.168.68.30   # Elasticsearch
es02:192.168.68.105  # Elasticsearch

2.初始化操作,配置elasticsearch环境192.168.68.200

[root@tomact ~]# systemctl stop firewalld
[root@tomact ~]# setenforce 0
[root@tomact ~]# hostnamectl set-hostname apache
[root@tomact ~]# su
[root@apache ~]# vim /etc/hosts
192.168.68.200 apache
192.168.68.30 node1
192.168.68.105 node2
[root@apache ~]# ping node1
[root@apache ~]# 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)

[root@apache ~]# vim /etc/hosts

1.配置elasticsearch环境

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname node1
[root@node1 ~]# su
[root@node1 ~]# vim /etc/hosts
192.168.68.200 apache
192.168.68.30 node1
192.168.68.105 node2
[root@node1 ~]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

[root@node1 ~]# vim /etc/hosts

2.部署elasticsearch软件

[root@node1 ~]# cd /opt
##上传elasticsearch-5.5.0.rpm到/opt目录下
[root@node1 opt]# rz elasticsearch-5.5.0.rpm  
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
##加载系统服务
[root@node1 opt]# systemctl daemon-reload
[root@node1 opt]# systemctl enable elasticsearch.service

##更改elasticsearch主配置文件
[root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 opt]# vim /etc/elasticsearch/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
 ##取消注释,修改;不在启动的时候锁定内存
 55 network.host: 0.0.0.0 
 ##取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
 59 http.port: 9200
 ##取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
 68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
 ##取消注释,修改;集群发现通过单播实现,指定要发现的节点 node1、node2

 ##检验配置
 [root@node1 opt]# 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"]
 
[root@node1 opt]# vim /etc/elasticsearch/elasticsearch.yml

 

##创建数据存放路径并授权
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
##启动elasticsearch是否成功开启
[root@node1 opt]# systemctl start elasticsearch 
[root@node1 opt]# netstat -natp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      50091/java  
##大概会有十秒钟左右时间,才会有第一次端口号显示
 

3.检测集群状态

查看节点信息

http://192.168.68.30:9200/

检测集群健康、查看集群状态

http://192.168.68.30:9200/_cluster/health?pretty

##green代表状态正常

http://192.168.68.30:9200/_cluster/state?pretty

4.安装elasticsearch-head插件

安装elasticsearch-head插件,用于管理集群

##编译安装node组件依赖包
[root@node1 opt]# yum -y install gcc gcc-c++ make
##上传软件包 node-v8.2.1.tar.gz 到/opt
[root@node1 opt]# rz -E
[root@node1 opt]# tar xf node-v8.2.1.tar 
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure  
[root@node1 node-v8.2.1]# make && make install -j2
## 这里耗时比较长估计20-30分钟

5.安装phantomjs(前端框架)

##上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt目录下
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd^H[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node1 bin]# ls
phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/

6.安装elasticsearch-head(数据可视化工具)

##上传软件包 elasticsearch-head.tar.gz 到/opt
[root@node1 opt]# rz -E
rz waiting to receive.
[root@node1 opt]# tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
c[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

7.修改主配置文件

##末尾添加这些内容
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
 89 http.cors.enabled: true
 ##开启跨域访问支持,默认为 false
 90 http.cors.allow-origin: "*"
 ##指定跨域访问允许的域名地址为所有
 [root@node1 elasticsearch-head]# systemctl restart elasticsearch.service 
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml

​ 8.启动elasticsearch-head

##在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。 
/usr/local/src/elasticsearch-head
[root@node1 elasticsearch-head]# npm run start &
[1] 50156
[root@node1 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
##回车
[root@node1 elasticsearch-head]# netstat -natp |grep 9100

9.使用elasticsearch-head插件查看集群状态

http://192.168.68.30:9100/

10.创建索引

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

此时会出现创建的索引,显示索引的信息,如大小、备份、数据被分片5个存储

点击数据流量,会发现在node1上创建的索引为index-demo,类型为test相关信息

4.192.168.68.105

1.配置elasticsearch环境

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname node2
[root@node2 ~]# su
[root@node2 ~]# vim /etc/hosts
192.168.68.200 apache
192.168.68.30 node1
192.168.68.105 node2
[root@node2 ~]# ping node1
[root@node2 ~]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)

[root@node2 ~]# vim /etc/hosts

2.部署elasticsearch软件

[root@node2 ~]# cd /opt
##上传elasticsearch-5.5.0.rpm到/opt目录下
[root@node2 opt]# rz elasticsearch-5.5.0.rpm  
[root@node2 opt]# rpm -ivh elasticsearch-5.5.0.rpm
##加载系统服务
[root@node2 opt]# systemctl daemon-reload
[root@node2 opt]# systemctl enable elasticsearch.service

##更改elasticsearch主配置文件
[root@node2 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node2 opt]# vim /etc/elasticsearch/elasticsearch.yml
 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 
 ##取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
 59 http.port: 9200
 ##取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
 68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
 ##取消注释,修改;集群发现通过单播实现,指定要发现的节点 node1、node2
 
 ##检验配置
 [root@node2 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster
node.name: node2
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"]

[root@node2 opt]# vim /etc/elasticsearch/elasticsearch.yml

 

##创建数据存放路径并授权
[root@node2 opt]# mkdir -p /data/elk_data
[root@node2 opt]# chown elasticsearch:elasticsearch /data/elk_data/
##启动elasticsearch是否成功开启
[root@node2 opt]# systemctl start elasticsearch 
[root@node2 opt]# netstat -natp |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      50091/java  
##大概会有十秒钟左右时间,才会有第一次端口号显示

3.检测集群状态

查看节点信息

http://192.168.68.105:9200/

检测集群健康、查看集群状态

http://192.168.68.105:9200/_cluster/health?pretty

##green代表状态正常

http://192.168.68.105:9200/_cluster/state?pretty

4.安装elasticsearch-head插件

安装elasticsearch-head插件,用于管理集群

##编译安装node组件依赖包
[root@node2 opt]# yum -y install gcc gcc-c++ make
##上传软件包 node-v8.2.1.tar.gz 到/opt
[root@node2 opt]# rz -E
[root@node2 opt]# tar xf node-v8.2.1.tar 
[root@node2 opt]# cd node-v8.2.1/
[root@node2 node-v8.2.1]# ./configure  
[root@node2 node-v8.2.1]# make && make install -j2
## 这里耗时比较长估计20-30分钟

5.安装phantomjs(前端框架)

##上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt目录下
[root@node2 opt]# rz -E
rz waiting to receive.
[root@node2 opt]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node2 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node2 bin]# ls
phantomjs
[root@node2 bin]# cp phantomjs /usr/local/bin/

6.安装elasticsearch-head(数据可视化工具)

##上传软件包 elasticsearch-head.tar.gz 到/opt
[root@node2 opt]# rz -E
rz waiting to receive.
[root@node2 opt]# tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node2 opt]# cd /usr/local/src/elasticsearch-head/
[root@node2 elasticsearch-head]# npm install

7.修改主配置文件

##末尾添加这些内容
[root@node2 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
 89 http.cors.enabled: true
 ##开启跨域访问支持,默认为 false
 90 http.cors.allow-origin: "*"
 ##指定跨域访问允许的域名地址为所有
[root@node2 elasticsearch-head]# systemctl restart elasticsearch.service 
[root@node2 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml

8.启动elasticsearch-head

##在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。 
/usr/local/src/elasticsearch-head
[root@node2 elasticsearch-head]# npm run start &
[1] 50156
[root@node2 elasticsearch-head]# 
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
​
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
##回车
[root@node2 elasticsearch-head]# netstat -natp |grep 9100

9.使用elasticsearch-head插件查看集群状态

http://192.168.68.105:9100/

10.创建索引

只需要在一台机子上创建索引就行

5.安装logstash(192.168.68.200)

收集日志输出到elasticsearch中

安装Apahce服务(httpd)和Java环境

[root@apache ~]# yum install httpd -y
[root@apache ~]# systemctl start httpd
##将logstash-5.5.1.rpm 传到/opt目录下
[root@apache opt]# rz -E 
rz waiting to receive.
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm 
[root@apache opt]# systemctl start logstash.service 
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
##建立logstash软连接

6.测试logstash命令

-f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash 
-e  后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出) 
-t  测试配置文件是否正确,然后退出 
  
定义输入和输出流:
输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
​
使用rubydebug显示详细输出,codec为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
​
使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.68.30:9200"] } }'

1.标准输出

logstash -e 'input { stdin{} } output { stdout{} }'

2.详细输出

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

rubydebug显示详细输出,codec为一种编码器,将我输入的内容,解码后进行详细的输出

 3.使用logstash将信息写入elasticsearch中,输入 输出 对接

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.68.30:9200"] } }'

1.在output中添加设置,将等会输入的信息输出的elasticsearch中

在主机192.168.68.200中访问  
查看索引信息 
多出 logstash-日期
http://192.168.68.30:9100

2.在Apache主机上做对接配置

Logstash配置文件主要由三部分组成:input、output、filter
[root@apache ~]# chmod o+r /var/log/messages
[root@apache ~]# ll -d /var/log/messages
-rw----r--. 1 root root 656287 12月 18 00:50 /var/log/messages
[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.68.30:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }
[root@apache ~]# systemctl restart logstash.service 

[root@apache ~]# vim /etc/logstash/conf.d/system.conf

​​​​

3.测试

在主机192.168.68.200上访问
查看索引信息
​
多出 system-日期
http://192.168.68.30:9100

可以显示出刚刚添加的系统日志了

7.安装kibana(192.168.68.30)

1.修改配置文件

[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# rz -E
rz waiting to receive.
[root@node1 src]# ls
elasticsearch-head  kibana-5.5.1-x86_64.rpm  phantomjs-2.1.1-linux-x86_64
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# ls
kibana.yml
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
  2 server.port: 5601
  ##取消注释;kibana打开的端口(默认5601)
  7 server.host: "0.0.0.0"
  ##取消注释,修改;kibana侦听的地址
 21 elasticsearch.url: "http://192.168.68.30:9200"
 ##取消注释,修改;和elasticsearch建立联系
 30 kibana.index: ".kibana"
 ##取消注释;在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service 
[root@node1 kibana]# systemctl enable kibana.service 

[root@node1 kibana]# vim kibana.yml

 2.测试

在apache主机192.168.68.200上访问192.168.68.30:5601
首次登录创建一个索引 名字:system-* (这是对接系统日志文件)
然后点最下面的出面的create 按钮创建

http://192.168.68.30:5601/

3.对接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.68.30:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.68.30:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
      }
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
[root@apache conf.d]# vim apache_log.conf

4.测试(192.168.68.30)

在主机192.168.68.30上访问
打开输入http://192.168.68.200,制造点访问记录
​
打开浏览器 输入http://192.168.68.30:9100/ 查看索引信息
能发现apache_error-2021.12.17和apache_access-2021.12.17
​
打开浏览器 输入http://192.168.68.200:5601
点击左下角有个management选项—index patterns—create index pattern
分别创建apache_error-* 和 apache_access-* 的索引

http://192.168.68.200/

http://192.168.68.30:9100/

http://192.168.68.30:9200/

(192.168.68.200)

打开浏览器 输入http://192.168.68.200:5601
点击左下角有个management选项---index  patterns---create index pattern
----分别创建apache_error-*   和     apache_access-* 的索引   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值