ELK日志分析系统(elasticsearch、logstash、kibana)

一、ELK日志分析系统简介

1.1 日志服务器

  • 提高安全性
  • 集中存放日志
  • 缺陷
    • 对日志的分析困难
      在这里插入图片描述

1.2 ELK日志分析系统

  • Elasticsearch
  • Logstash
  • Kibana

1.3 日志处理步骤

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

二、Elasticsearch介绍

2.1 Elasticsearch的概述

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

2.2 Elasticsearch核心概念

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

三、Logstash介绍

3.1 Logstash介绍

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

3.2 Logstash主要组件

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

四、Kibana介绍

4.1 Kibana介绍

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

4.2 Kibana主要功能

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

五、部署ELK日志分析系统

5.1 部署ELK日志分析系统

5.1.1 案例拓扑

在这里插入图片描述

5.1.2 需求描述

  • 配置ELK日志分析群集
  • 使用Logstash收集日志
  • 使用Kibana查看分析日志

5.1.3 设备列表

主机 操作系统 主机名 IP地址 主要软件
服务器 centos7.6 node1 14.0.0.77 Elasticsearch Kibana
服务器 centos7.6 node2 14.0.0.88 Elasticsearch
服务器 centos7.6 apache 14.0.0.99 Logstash Apache

5.1.4 准备安装环境

-关闭防火墙和Selinux
node1、node2节点内存分配4G,Apache节点分配1G内存
通过VMware虚拟网络Vmnet连接

5.1.5 安装步骤分析

  • 环境准备
  • 部署ELasticsearch软件
  • 安装ELasticsearch-head插件
  • Logstash安装及使用方法
  • 安装Kibana

5.2 实验过程

【配置elasticsearch环境】

###登录14.0.0.77 更改主机名 配置域名解析 查看Java环境 ####

systemctl stop firewalld
setenforce 0

hostnamectl set-hostname node2     
su

vim /etc/hosts
14.0.0.77 node1
14.0.0.88 node2

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)

【部署elasticsearch软件】

###登录14.0.0.77【node1】####

1、安装elasticsearch-rpm包
上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
#拖入软件包
rpm -ivh elasticsearch-5.5.0.rpm 

2、加载系统服务
systemctl daemon-reload 
systemctl enable elasticsearch.service

3、更改elasticsearch主配置文件
#拷贝一份副本(一定要备份,防止出差错)
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
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                           ##侦听端口为9200
 68 discovery.zen.ping.unicast.hosts: ["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: flase
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

4、创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/      ##创建用户管理

 5、启动elasticsearch是否成功开启
systemctl start elasticsearch.service 
[root@node1 opt]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      97417/java          

6、查看节点信息,用真机192.168.1.112的浏览器打开http://14.0.0.77:9200,有文件打开,下面的是节点的信息
[root@node1 opt]# curl 14.0.0.77:9200 
{
  "name" : "node1",
  "cluster_name" : "my-elk-cluster",
  "cluster_uuid" : "1TESUYUhRyqeJEQV3Ev-YA",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

###登录14.0.0.88【node2】###
###与node1 配置一样

1、安装elasticsearch-rpm包
上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
#拖入软件包
rpm -ivh elasticsearch-5.5.0.rpm 

2、加载系统服务
systemctl daemon-reload 
systemctl enable elasticsearch.service

3、更改elasticsearch主配置文件
#拷贝一份副本(一定要备份,防止出差错)
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
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                           ##侦听端口为9200
 68 discovery.zen.ping.unicast.hosts: ["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: flase
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

4、创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/      ##创建用户管理

 5、启动elasticsearch是否成功开启
systemctl start elasticsearch.service 
[root@node2 opt]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      97417/java          

6、查看节点信息,用真机192.168.1.112的浏览器打开http://14.0.0.77:9200,有文件打开,下面的是节点的信息
[root@node2 opt]# curl 14.0.0.88:9200
{
  "name" : "node1",
  "cluster_name" : "my-elk-cluster",
  "cluster_uuid" : "1TESUYUhRyqeJEQV3Ev-YA",
  "version" : {
    "number" : "5.5.0",
    "build_hash" : "260387d",
    "build_date" : "2017-06-30T23:16:05.735Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.0"
  },
  "tagline" : "You Know, for Search"
}

【集群检查健康状态】

在真机浏览器(谷歌或虚拟机火狐)打开http://14.0.0.77:9200/_cluster/health?pretty ##检查集群健康情况

{
  "cluster_name" : "my-elk-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

在真机浏览器(谷歌或虚拟机火狐)打开http://14.0.0.77:9200/_cluster/state?pretty ##检查集群状态信息

{
  "cluster_name" : "my-elk-cluster",
  "version" : 3,
  "state_uuid" : "2Gfne0fXSDGyFiDinb0RlQ",
  "master_node" : "Hyv5IVg6SMCimaTZIokn3w",
  "blocks" : { },
  "nodes" : {
    "sIzXX0iNQl-b5JCciAABMQ" : {
      "name" : "node1",
      "ephemeral_id" : "7H6yh-N0QAaG3l7u55eDZw",
      "transport_address" : "14.0.0.88:9300",
      "attributes" : { }
    },
    "Hyv5IVg6SMCimaTZIokn3w" : {
      "name" : "node1",
      "ephemeral_id" : "-wtz4UrWSlWE9LKMfCxzwg",
      "transport_address" : "14.0.0.77:9300",
      "attributes" : { }
    }
  },
  "metadata" : {
    "cluster_uuid" : "1TESUYUhRyqeJEQV3Ev-YA",
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "Hyv5IVg6SMCimaTZIokn3w" : [ ],
      "sIzXX0iNQl-b5JCciAABMQ" : [ ]
    }
  }
}

【安装elasticsearch-head插件】

上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群

###登录14.0.0.77 mode1主机###
上传node-v8.2.1.tar.gz、elasticsearch-head.tar.gz、phantomjs-2.1.1-linux-x86_64.tar.bz2到/opt

yum install gcc gcc-c++ make -y

##编译安装node组件软件包  ##耗时较长
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j3
make install 

###安装phantomjs###前端框架
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
cd /usr/local/src/
cd phantomjs-2.1.1-linux-x86_64/bin/
cp phantomjs /usr/local/bin

####安装elasticsearch-head###数据化可视工具
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src
cd /usr/local/src
cd elasticsearch-head/
npm isntall         ###npm为随同NodeJS一起安装的包管理工具

####
npm WARN deprecated fsevents@1.2.13: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/karma/node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression

up to date in 6.619s
####


###修改主配置文件####
vim /etc/elasticsearch/elasticsearch.yml       ##下面配置文件,插入末尾
http.cors.enabled: true       ##开启跨区域访问支持,默认为false
http.cors.allow-origin: "*"    ##跨区域访问允许的域名地址
systemctl restart elasticsearch.service 

###启动elasticsearch-head 启动服务器###
cd /usr/local/src/elasticsearch-head
npm run start &                       ##切换到后台运行

[root@node1 elasticsearch-head]# npm run start & 
[1] 9678
[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 -ntap |grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      9688/grunt       

[root@node1 elasticsearch-head]# netstat -ntap |grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      9757/java 
[root@node2 elasticsearch-head]# npm run start &
[1] 112526
[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 -ntap | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112536/grunt        

[root@node2 elasticsearch-head]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      113809/java
[root@node2 elasticsearch-head]# npm run start &
[1] 112526
[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 -ntap | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112536/grunt        

[root@node2 elasticsearch-head]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      113809/java         


[root@node2 elasticsearch-head]# npm run start &
[1] 112526
[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 -ntap | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      112536/grunt        

[root@node2 elasticsearch-head]# netstat -ntap | grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      113809/java

###登录14.0.0.77 node1主机### 索引为index-demo,类型为test,可以看到成功创建
#9100是工具,#9200 ES,-H指定参数类型,-d 指具体数据

[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

####打开浏览器输入HTTP://14.0.0.77:9100/ 查看索引信息####
node1 信息 动作 01234
node2 信息 动作 01234

●上面可以看出索引默认被分为5个,并且有一个副本

点击数据浏览Browser–会发现在node1上创建的索引为index-demo,类型为test,相关的信息
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

【安装logstash并做一些日志搜索输出到elasticsearch中】

登录主机14.0.0.99

关闭防火墙关闭核心防护
systemctl stop firewalld.service 
setenforce 0

1、更改主机名
hostnamectl set-hostname apache
su

2、安装Apache服务(httpd)
yum install httpd -y
systemctl start httpd

3、安装Java环境
java -version    ##如果没有装,安装 yum -y install java

4、安装logstash
上传logstash-5.5.1.rpm到/opt目录下
cd /opt
###拖入软件包
rpm -ivh logstash-5.5.1.rpm       ###安装logstash
systemctl start logstash.service      ###启动logstash
systemctl enable logstash.service 
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/      ###建立logstash软链接

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

6、输入采用标准输入,输出采用标准输出----登录
logstash -e 'input { stdin {} } output { stdout {} }'

......
The stdin plugin is now waiting for input:
16:24:53.883 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
2020-09-15T08:24:53.875Z apache 
www.yyc.com                                           ###需要输入www.yyc.com
2020-09-15T08:25:32.717Z apache www.yyc.com
www.baidu.com                                       ###需要输入www.baidu.com
2020-09-15T08:27:36.738Z apache www.baidu.com
.......

7、使用rubydebug显示详细输出,codec为一种编码器
logstash -e 'input { stdin {} } output { stdout { codec=>rubydebug } }'

......
The stdin plugin is now waiting for input:
16:29:47.004 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                                        ###输入www.baidu.com
{
    "@timestamp" => 2020-09-15T08:30:03.137Z,
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}
......


###使用logstash将信息写入elasticsearch中##### 输入 输出 对接
logstash -e 'input { stdin {} } output { elasticsearch { hosts=>["14.0.0.77:9200"] } }'

......
The stdin plugin is now waiting for input:
16:33:28.090 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                                       ###输入内容
......



8、登录192.168.1.112真机
打开浏览器 输入http://14.0.0.77:9100/ 查看索引信息###
多出logstash-2020.09.15

点击 数据浏览 查看响应的内容

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

【登录14.0.0.99 Apache主机 做对接配置】

###logstash配置文件####
logstash配置文件主要由三部分组成:input、output、filter(根据需要)

##给/var/log/messages 其他 增加读权限
chmod o+r /var/log/messages
[root@apache opt]# ll /var/log/messages
-rw----r--. 1 root root 458094 9月  15 17:03 /var/log/messages

##在/etc/logstash/conf.d/路径下建立一个配置文件systemctl.conf,用来存放/etc/logstash/logstash.yml主配置文件中path.config指定的存放路径的内容
vim /etc/logstash/conf.d/system.conf
input {
  file {
    path => "/var/log/messages"           ###读取的日志文件的路径
    type => "system"                             ###类型
    start_position => "beginning"          ###从开始行开始读
    }
  }
output {
  elasticsearch {                                    ###数据给ES 
    hosts => ["14.0.0.77:9200"]              ###指定主机名
    index => "system-%{+YYYY.MM.DD}"    ###指定日期格式
    }
  }

systemctl restart logstash.service       ###重启服务(多启几次)

登录192.168.1.112真机
打开浏览器 输入http://14.0.0.77:9100/ 查看索引信息###
多出system-2020.09.259
做了5个分片,点击索引,查看里面的数据,可以对数据进行操作

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

登录14.0.0.77 node1主机,安装kibana

###在node1主机安装kibana##
cd /usr/local/src/
##拖入kibana-5.5.1-x86_64.rpm包
rpm -ivh kibana-5.5.1-x86_64.rpm 
cd /etc/kibana/
cp -p kibana.yml kibana.yml.bak
vim kibana.yml
  2 server.port: 5601                                            ###kibana打开的端口
  7 server.host: "0.0.0.0"                                       ###kibana侦听的地址
 21 elasticsearch.url: "http://14.0.0.77:9200"         ###和elasticsearch建立联系
 30 kibana.index: ".kibana"                                  ###在elasticsearch中添加.kibana索引

systemctl start kibana.service          ###启动kibana服务
systemctl enable kibana.service      ###开机启动kibana服务


####登录192.168.1.112 真机###
使用浏览器输入14.0.0.77:5601
首次登录创建一个索引名字:system-*  ##这是对接系统日志文件
index name or pattern          ###下面输入system-*
然后点最下面的create按钮创建

然后点最左上角的discover按钮,会发现system-*信息

然后点下面的host旁边的add,会发现右面的图只有Time 和 host 选项了,这个比较友好

使用浏览器输入14.0.0.77:5601
在这里插入图片描述
elasticsearch与kibana建立成功
在这里插入图片描述

首次登录创建一个索引名字:system-* (这是对接系统日志文件在这里插入图片描述
点击discover,system-*所有的信息都在这里
在这里插入图片描述
这里可以选择查看各个时间点的日志
在这里插入图片描述
然后点下面的host旁边的add,会发现右面的图只有Time 和 host 选项了,这个比较友好
在这里插入图片描述

对接Apache主机14.0.0.99的日志文件

(访问的access_log、错误的error_log,要写两个file)

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

##不重启直接加载配置文件
/usr/share/logstash/bin/logstash -f apache_log.conf 



###登录真机,打开一个新页面访问apache主机的地址14.0.0.99,
打开浏览器输入http://14.0.0.77:9100/ 查看索引信息
能发现  apche_error-2020.09.25  apche_access-2020.09.25

打开浏览器输入http://14.0.0.77:5601
点击左下角有个management选项--index patterns---create index pattern
分别创建apache_error-* 和apache_access-*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值