《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 blog.csdn.net/weixin_47403060/article/details/109758406 「wuhaihong17」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

一、ELK日志分析系统简介

ELK日志分析系统是Logstash、Elasticsearch、Kibana开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示

1.1、ELK日志分析系统组成

elasticsearch(es):通过搭建群集;存储日志数据,索引日志数据 logstash :收集日志,收集到了后给es存储 kibana :视图形式展现日志信息,更加人性化

1.2、日志处理步骤

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

二、3款软件各自概念

2.1、Elasticsearch介绍

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

(1)接近实时(NRT)

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

(2)集群(cluster)

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

一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。

(3)节点(node)

节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。

节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。

(4)索引(type)

在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。

3、类型相对于关系型数据库的表

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

(5)分片和副本(shards & replicas)

在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个10亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。

在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。 默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

2.2、Logstash介绍

1、一款强大的数据处理工具

2、可实现数据传输、格式处理、格式化输出

3、数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)

4、Logstash的主要组件

  • shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
  • indexer:日志存储者,负责接收日志并写入到本地文件
  • broker:日志hub,负责连接多个shipper和多个indexer
  • search and storage:允许对事件进行搜索和存储
  • web interface:基于Web的展示界面

2.3、Kibana介绍

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

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

三、ELK日志分析系统部署

3.1、实验环境及准备

主机名 IP地址 主要软件
elk-1 192.168.73.40 Elasticsearch、kibana
elk-2 192.168.73.50 Elasticsearch
apache 192.168.73.60 httpd、logstash

[root@localhost ~]# hostnamectl set-hostname elk-1
[root@localhost ~]# bash
[root@elk-1 ~]# vim /etc/hosts ###添加本地解析,识别集群主机名
192.168.73.40 elk-1
192.168.73.50 elk-2

3.2、实验步骤

3.2.1、elk-1和elk-2中部署Elasticsearch

1、上传密钥,部署yum源,安装elasticsearch及java(两台节点)

[root@elk-1 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

[root@elk-1 ~]# vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-2.x]
name=Elasticsearch repository for 2.x packages
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

[root@elk-1 ~]# yum install -y elasticsearch java

[root@elk-1 ~]# java -version ###查看java版本
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

2、修改elasticsearch主配置文件

[root@elk-1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17行 集群名称 ###两个节点一致
cluster.name: abner

23行 节点名称 ###两个节点不同
node.name: elk-1

33行 工作目录
path.data: /data/es-data
path.logs: /var/log/elasticsearch/

43行 防止交换swap分区
bootstrap.memory_lock: true

54行 监听网络
network.host: 0.0.0.0

58行 端口
http.port: 9200

68行:discovery.zen.ping.unicast.hosts: ["elk-1", "elk-2"] #集群发现通过单播实现,单播的主机名为"elk-1", "elk-2"

3、创建工作目录并更改属主及属组,开启服务

[root@elk-1 ~]# mkdir -p /data/es-data
[root@elk-1 ~]# chown -R elasticsearch.elasticsearch /data/es-data
[root@elk-1 ~]# systemctl start elasticsearch.service
[root@elk-1 ~]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 46814/java

4、测试

5、两种方法和ES进行交互

  • 第一种 JAVA API
  • 第二种 RESTful API (通过json格式交互)

[root@elk-1 ~]# curl -i -XGET 'http://192.168.73.40:9200/_count?pretty' -d '{
> "query": {
> "match_all": {}
> }
> }'
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 95

{
"count" : 0,
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
}
}

6、两个节点安装elasticsearch-head插件(安装插件可以更加人性化的管理集群)

[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head
……省略内容
Installed head into /usr/share/elasticsearch/plugins/head ###安装位置

7、测试——输入192.168.73.40:9200/_plugin/head/

8、复合查询

9、删除

10、node-01和node-02日志提示不让锁内存

[root@elk-1 ~]# less /var/log/elasticsearch/abner.log
# allow user 'elasticsearch' mlockall
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

[root@elk-1 ~]# vim /etc/security/limits.conf  ###末尾插入
[root@elk-1 ~]# systemctl stop elasticsearch.service
[root@elk-1 ~]# systemctl start elasticsearch.service

11、安装监控组件

[root@elk-1 ~]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf
……省略内容
Installed kopf into /usr/share/elasticsearch/plugins/kopf ###安装路径

3.2.2、apache主机中安装logstash并做日志搜集

1、修改主机名

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

2、安装apache服务

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

3、安装java环境,没有自带安装使用yum -y install java安装

[root@apache ~]# yum install -y java
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 1:java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64 已安装并且是最新版本
无须任何处理
[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)

4、上传密钥,部署yum源,安装logstash

[root@apache ~]# vi /etc/yum.repos.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

[root@apache ~]# yum install -y logstash
[root@apache ~]# ln -s /opt/logstash/bin/* /usr/local/bin ###优化执行路径

5、logstash(apache)与elasticsearch(node)功能是否正常,做对接测试

logstash命令选项解释:
-f:指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
-t:测试配置文件是否正确,然后退出
#输入采用标准输入,输出采用标准输出

定义输入和输出流,类似管道
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'

6、使用rubydebug显示详细输出,codec为一种编解码器

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

7.使用logstash将信息输出给elasticsearch

[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["192.168.73.40:9200"] } }'
Settings: Default filter workers: 1
Logstash startup completed

abc123
tom456
123jerry

8.打开浏览器输入http://192.168.73.40:9100/,查看索引信息,显示新的数据信息说明输出到elasticsearch成功

9.在apache主机中做对接配置

[root@apache ~]# chmod o+r /var/log/messages  ###允许其他用户访问
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 439103 11月 18 15:20 /var/log/messages

[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input { ###logstash输入:从/var/log/messages输入,类型为system,起始位
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}

output { ###logstash输出:输出给elasticsearch(以IP地址指定位置)
elasticsearch {
hosts => ["192.168.73.40:9200"]
index => "system-%{+YYY.MM.dd}"
}
}

[root@apache ~]# systemctl restart logstash

10.打开浏览器输入http://192.168.73.40:9100/,查看索引信息,显示新的索引信息代表logstash搜集到的日志信息成功输出给elasticsearch

3.2.3、在node1主机安装kibana

1.在node1主机安装kibana

[root@elk-1 ~]# tar zxf kibana-4.3.1-linux-x64.tar.gz
[root@elk-1 ~]# vim kibana-4.3.1-linux-x64/config/kibana.yml
//2行
server.port: 5601

//5行
server.host: "0.0.0.0"


//12行 ES地址
elasticsearch.url: "http://192.168.73.40:9200"

//20行
kibana.index: ".kibana"

yum install screen -y


[root@elk-1 ~]# kibana-4.3.1-linux-x64/bin/kibana ###启动监听
log [15:43:45.084] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
log [15:43:45.105] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
log [15:43:45.113] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
log [15:43:45.119] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
log [15:43:45.123] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
log [15:43:45.125] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
log [15:43:45.132] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
log [15:43:45.135] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
log [15:43:45.136] [info][status][plugin:elasticsearch] Status changed from yellow to green - Kibana index ready
log [15:43:45.146] [info][listening] Server running at http://0.0.0.0:5601

2.浏览器中登录http://192.168.73.40:5601,首次登录提示创建一个索引名字: 填入system-*,即对接系统日志文件名

文章目录
  1. 1. 一、ELK日志分析系统简介
    1. 1.1. 1.1、ELK日志分析系统组成
    2. 1.2. 1.2、日志处理步骤
  2. 2. 二、3款软件各自概念
    1. 2.1. 2.1、Elasticsearch介绍
    2. 2.2. 2.2、Logstash介绍
    3. 2.3. 2.3、Kibana介绍
  3. 3. 三、ELK日志分析系统部署
    1. 3.1. 3.1、实验环境及准备
    2. 3.2. 3.2、实验步骤
      1. 3.2.1. 3.2.1、elk-1和elk-2中部署Elasticsearch
      2. 3.2.2. 3.2.2、apache主机中安装logstash并做日志搜集
      3. 3.2.3. 3.2.3、在node1主机安装kibana