文章目录

  • 一、ELK前言
    • 1.1 需要收集的日志
    • 1.2 日志收集后,如何可视化
    • 1.3 日志收集可视化后,怎么使用
    • 1.4 要怎么收集日志
  • 二、ELK简介
    • 2.1 ElasticSearch介绍
    • 2.2 ElasticSearch核心概念
    • 2.2 ELK里面有哪些组件
    • 2.3 ELK的工作原理
  • 三、 ELK日志分析系统集群部署
    • 3.1 ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)
      • 3.1.1 前期准备
      • 3.1.2 部署 Elasticsearch 软件
      • 3.1.3 安装 Elasticsearch-head 插件
    • 3.2 ELK Logstash 部署(在 httpd 节点上操作)
      • 3.2.1 安装 Logstash
      • 3.2.2 测试 Logstash(httpd)与elasticsearch(node)功能是否正常,做对接
      • 3.2.3 定义 logstash 配置文件
    • 3.3 ELK Kiabana 部署(在 Node1 节点上操作)

一、ELK前言

1.1 需要收集的日志

  1. 系统日志:为监控做准备,要收集tomcat系统日志,tomcat所在节点的日志

  2. 服务日志:比如数据库mysql,收集慢查询日志、错误日志、普通日志,要收集tomcat服务日志。

  3. 业务日志(业务日志必须收集):业务口子日志在log4j,log4j是由java环境开发的,跑在tomcat上

1.2 日志收集后,如何可视化

  1. kibana

  2. grafana:可以以地图的方式展示,功能更全面一些,界面会好看一些

1.3 日志收集可视化后,怎么使用

  1. 用于给大数据分析,作为立体化展示的一个数据源

  2. 给研发去使用(排障、解决bug等)

  3. 统计数据流量,作为分析报告的数据源

1.4 要怎么收集日志

我们需要有针对性的去收集日志,日志收集是根据我们设置的日志级别来看的,对于不是很重要的日志,日志级别调高一点。比如error的时候报给我,普通日志不用报。这样可以有效降低日志量。像这种业务日志,我们不适合调error级别,我们需要调成warning级别。

二、ELK简介

2.1 ElasticSearch介绍

Elasticsearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,快速,安装使用方便操作。

2.2 ElasticSearch核心概念

  1. 接近实时

ElasticSearch是一个接近实时的搜索平台

这就是说,我们从索引一个文档直到这个文档能够被搜索到有一个轻微的延迟(通常是1秒)

  1. 集群化

集群每一台服务器都有自己的一个唯一标识,比如说id,标识自己在集群中的一个定位。

个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。

  1. 节点

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

  1. 索引

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品日录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。

  1. 类型

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

  1. 文档

一个文档是一个可被索引的基础信息单元。比如,你可以拥有某一个客户的文档,某一个产品的一个文档,当然,也可以拥有某个订单的一个文档。文档以JSON 格式来表示,而JSON是一个到处存在的互联网数据交互格式。 在一个index/type里面,只要你想,你可以存储任意多的文档。注意,虽然一个文档在物理上位于一个索引中,实际上一个文档必须在一个索引内被索引和分配一个类型。

  1. 分片和副本(默认情况下是5个分片、1个副本,这意味着,如果你的集群至少有两个节点,你的索引将会有5个分片和另外5个副本,)

在正常情况下,单个节点的存储和索引以及I/O读写效率是很容易遇到瓶颈的。为了提高瓶颈上限,所以在这里,对于存储进行一个分布式,多个节点做一个任务。可以提高存储上线,可以提高搜索上限,同时可以减轻压力均摊。

elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

  1. 分片的两个最主要原因:
    (1)水平分割扩展,增大存储量
    (3)分布式并行跨分片操作,提高性能和吞吐量

  2. 分布式分片的机制和搜索请求的文档如何汇总完全是由elasticsearch控制的,这些对用户而言是透明的。

  3. 网络问题等等其它问题可以在任何时候不期而至,为了健壮性,强烈建议要有一个故障切换机制,无论何种故障以防止分片或者节点不可用。

  4. 副本也有两个最主要原因:
    (1)高可用性,以应对分片或者节点故障。出于这个原因,分片副本要在不同的节点上。
    (2)增加了读写性能(qps性能),增大吞吐量。搜索可以并行在所有副本上执行。

2.2 ELK里面有哪些组件

Logstash(日志收集):主要用于收集、输出、格式化数据

Elasticsearch(日志存储和搜索):用于建立索引,因为它的副本和分片,他的搜索能力很强。
PS:(ES版本 7.10 和 7.20),特性是:启动时,必须为非root用户。es启动时很吃内存,可能会卡很久。

Kibana(展示):作为展示用的,展示的话在于日志收集后、由es创建建立索引,并且最后传给kibana,通过kibana展现出来。他的兼容性特别好。

2.3 ELK的工作原理

  1. 在所有需要收集日志的服务器上部署Logstash; 或者先将日志进行集中化管理在日志服务器上, 在日志服务器上部署 Logs tash。

  2. Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。

  3. Elasticsearch 对格式化后的数据进行索引和存储。

  4. Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

三、 ELK日志分析系统集群部署

需求环境:服务器类型         系统和IP地址                  需要安装的组件                 硬件方面
Node1节点    CentOS7  192.168.24.20        Elasticsearch 、 Kibana   2核4G
Node2节点    CentOS7  192.168.24.30        Elasticsearch                2核4G
Apache节点       CentOS7  192.168.24.40        Logstash Apache              2核4G

3.1 ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)

3.1.1 前期准备

#更改主机名
Node1节点:      hostnamectl set-hostname node1
Node2节点:      hostnamectl set-hostname node2
Apache节点:     hostnamectl set-hostname httpd#配置域名解析
vim /etc/hosts
192.168.24.20   node1
192.168.24.30   node2
192.168.24.40   httpd#查看Java环境,如果没有安装,yum -y install java
java -version

#更改主机名


#配置域名解析

#查看Java环境

3.1.2 部署 Elasticsearch 软件

(1)#上传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--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]#查看主配置文件
grep -v "^#" /etc/elasticsearch/elasticsearch.yml###node2的配置与node1相同#######(4)#创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/(5)#启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200(6)#查看节点信息
浏览器访问 ,查看节点 Node1、Node2 的信息
http://192.168.24.20:9200  http://192.168.24.30:9200 #原谅色:green
http://192.168.24.20:9200/_cluster/health?pretty
http://192.168.24.30:9200/_cluster/health?pretty

#上传elasticsearch-5.5.0.rpm到/opt目录下

#加载系统服务

#修改elasticsearch主配置文件

修改node1上的配置文件:

#修改node2上的配置文件:




#创建数据存放路径并授权


#启动elasticsearch是否成功开启

#查看节点信息


#检查群集状态信息

3.1.3 安装 Elasticsearch-head 插件

  1. Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
  2. 安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
    (1) node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
    (2) phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
(1)#编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -ycd /opt
tar zxf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make -j4 && make install(2)#安装 phantomjs
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin(3)#安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install(4)#修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true             #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"           #指定跨域访问允许的域名地址为所有systemctl restart elasticsearch(5)#启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &#elasticsearch-head 监听的端口是 9100
netstat -lnutp |  grep 9100
netstat -lnutp |  grep 9200(6)#通过 Elasticsearch-head 查看 Elasticsearch 信息通过浏览器访问 http://192.168.24.20:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。访问有问题 可以将localhost 改成ip地址
(7)#插入索引
##登录192.168.24.20 node1主机#####  索引为index-demo,类型为test,可以看到成功创建
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'####在本机  刷新浏览器输入看索引信息###
node1信息动作 01234
node2信息动作 01234
●上面图可以看见索引默认被分片5个,并且有一个副本点击数据浏览--会发现在node1上创建的索引为index-demo,类型为test, 相关的信息

#编译安装 node

#安装 phantomjs

#安装 Elasticsearch-head 数据可视化工具

#修改 Elasticsearch 主配置文件(node1和node2相同)


#启动 elasticsearch-head 服务

#浏览器访问:http://192.168.24.20:9100/

#插入索引

3.2 ELK Logstash 部署(在 httpd 节点上操作)

3.2.1 安装 Logstash

(1)#安装httpd并启动
yum -y install httpd
systemctl start httpd(2)#安装java环境
yum -y install java
java -version(3)#安装logstash
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
cd /usr/share/logstash/
ls
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

#安装httpd并启动

#安装java环境 检查一下没有就yum

#安装 logstash

3.2.2 测试 Logstash(httpd)与elasticsearch(node)功能是否正常,做对接

Logstash这个命令测试
字段描述解释:
●   -f  通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
●   -e  后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出)
●   -t  测试配置文件是否正确,然后退出logstash -f  配置文件名字      去连接elasticsearch  (1)#输入采用标准输入 输出采用标准输出---登录192.168.24.20  在Apache服务器上
logstash -e 'input { stdin{} } output { stdout{} }'22:55:45.980 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
22:55:46.049 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com      ###手动输入
2022-04-26T14:56:14.790Z httpd www.baidu.com
www.sina.com        ###手动输入
2022-04-26T14:56:27.284Z httpd www.sina.com(2)#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'23:01:54.558 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>4, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>500}
23:01:54.584 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
23:01:54.671 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{"@timestamp" => 2022-04-26T15:02:09.849Z,"@version" => "1","host" => "httpd","message" => "www.baidu.com"(3)##使用logstash将信息写入elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.24.20:9200"] } }'

#输入采用标准输入 输出采用标准输–登录192.168.24.20 在 httpd 服务器上

#使用 rubydebug 输出详细格式显示,codec 为一种编解码器

#使用 logstash 将信息写入 elasticsearch 中

3.2.3 定义 logstash 配置文件

Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。(1)#给日志目录可读权限
chmod o+r /var/log/messages                    #让 Logstash 可以读取日志
(2)#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
vim /etc/logstash/conf.d/system.confinput {file{path =>"/var/log/messages"                        #指定要收集的日志的位置type =>"system"                                   #自定义日志类型标识start_position =>"beginning"                    #表示从开始处收集}
}
output {elasticsearch {                                     #输出到 elasticsearchhosts => ["192.168.24.20:9200"] #指定 elasticsearch 服务器的地址和端口index =>"system-%{+YYYY.MM.dd}"       #指定输出到 elasticsearch 的索引格式}
}(4)#重启服务
systemctl restart logstash(5)#打开浏览器
输入http://192.168.24.20:9100/ 查看索引信息###多出 system-xxxx

#给日志目录可读权限

#修改 Logstash 配置文件

#重启服务

#浏览器打开http://192.168.24.20:9100/

3.3 ELK Kiabana 部署(在 Node1 节点上操作)

(1)#安装 Kiabana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm(2)#设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.24.20:9200"
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"(3)#启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601(4)#验证 Kibana
浏览器访问 http://192.168.24.20:5601第一次登录需要添加一个 Elasticsearch 索引:
Index name or pattern
//输入:system-*            #在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果(5)#将 httpd 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/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.24.20:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.24.20:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}
}cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf6.#浏览器访问http://192.168.24.20:9100/测试,查看索引信息能发现
apache_error-2019.04.16     apache_access-2019.04.16 #浏览器访问http://192.168.24.20:5601
点击左下角有个management选项---index  patterns---create index pattern
----分别创建apache_error-*   和     apache_access-* 的索引   

#安装 Kiabana

#设置 Kibana 的主配置文件

#启动 Kibana 服务

#验证 Kibana,浏览器访问 http://192.168.24.20:5601


#浏览器访问http://192.168.24.20:9100/测试,查看索引信息能发现两个日志


ELK 日志分析系统的部署相关推荐

  1. ELK 日志分析系统和部署

    目录 前言 一.日志分析 1.1  我们需要收集哪些日志 1.2  日志收集后,如何展示(可视化) 1.3   日志收集展示出来后,怎么使用 1.4  我们要怎么收集日志 二.ELK 日志分析系统简介 ...

  2. elk日志分析系统_部署ELK企业内部日志分析系统

    部署ELK企业内部日志分析系统 一.实验环境 二.基本环境部署 1.IP地址配置 2.主机名配置三台节点hosts文件要一致 [root@yichen-els-node1 ~]# cat /etc/h ...

  3. 超详细部署ELK日志分析系统!每一步骤都有记录!ELK的详细使用!

    目录 一.ELK简介 二.Elasticsearch简介 三.Logstash简介 四.Kibana简介 五.ELK案例部署 5.1 案例环境 5.2 部署elasticsearch 5.3 部署Ap ...

  4. ELK日志分析系统(二)之ELK搭建部署

    文章目录 引言 一.Elasticsearch 集群部署(在Node1上操作) 1.准备环境 2.部署安装Elasticsearch软件 3.配置Elasticsearch主配置文件 4.创建数据存放 ...

  5. ELK日志分析系统之ELK搭建部署

    文章目录 配置ELK日志分析系统 1.配置elasticsearch环境 2.部署elasticsearch软件 2.1 安装Elasticsearch软件 2.2 加载系统服务 2.3 修改elas ...

  6. ELK日志分析系统 超详细!!理论+实操讲解!!

    文章目录 一.ELK日志分析系统简介 1.1日志处理的步骤 1.2 ELK日志分析系统三部分 1.3日志服务器(一般) 二.Elasticsearch介绍 2.1 Elasticsearch概述 2. ...

  7. 搭建ELK日志分析系统详解

    日志分析是运维工程师解决系统故障.发现问题的主要手段.日志包含多种类型,包括程序日志.系统日志以及安全日志等.通过对日志的分析,既可以做到未雨绸缪.预防故障的发生,又可以在故障发生时,寻找蛛丝马迹.快 ...

  8. ELK日志分析系统及相关

    目录 前言 一.ELK概述 1.ELK日志分析系统 2.ELK中日志处理步骤 二.Elasticsearch介绍 1.Elasticsearch的基础核心概念 2.mysql关系型数据库与Elasti ...

  9. ELK日志分析系统介绍及部署

    一.ELK日志分析系统简介 1.1 普通日志服务器: 提高安全性 集中存放日志 缺陷 对日志的分析困难 1.2 ELK日志分析系统的组成 Elasticsearch Logstash Kibana 1 ...

最新文章

  1. 超干货3D视觉技术分享+人才内推!独角兽奥比中光与你相约VALSE 2021
  2. 【Flutter】shared_preferences 本地存储 ( 简介 | 安装 shared_preferences 插件 | 使用 shared_preferences 流程 )
  3. 怎么利用css调整区块大小,使用CSS3 transform:skew方法实现的倾斜区块分割
  4. error while loading shared libraries: libopencv_core.so.3.4: cannot open 报错解决方法
  5. MFC中的控件是怎么实现的呢?一个按钮就是一个窗口?还是所有按钮画在一个分层窗口上再叠
  6. 【Java从入门到天黑|03】JavaSE入门之流程控制
  7. 物理史2000年来最豪华阵容也是最为精彩的对决!
  8. 中文巨量模型“源1.0”:模型结构与生成效果解析
  9. SpringBoot集成MyBatis-Plus自定义SQL
  10. Linux shell 对话框,如何在 Bash Shell 脚本中显示对话框
  11. 2018年高二计算机试题,2018年上学期高二信息技术期末考试试题.pdf
  12. 沙盘正在注销进程start_电脑关不了机,一直处于正在注销,这是为什么
  13. 在Hadoop上安装HBase
  14. Charles 映射本地文件map local
  15. 一款PO VO DTO 转换神器,求求你别在到处找工具类了!
  16. MATLAB实现LSBR并采用卡方分析进行分析
  17. 微信分享网页时自定义标题描述和图片
  18. 【网易微专业】算法原理与实践 2
  19. 第四章 Cesium学习入门之加载离线影像图(tif)
  20. Overload vs Override

热门文章

  1. 如何把光遇android和平切换成ios,光遇账号怎么切换到另一设备 换手机登录方法...
  2. STM32学习 3:GPIO管脚配置与第一个STM32实验:LED灯闪烁
  3. Handlebars详解使用
  4. linux下gradle安装
  5. 商务邮件用什么邮箱?
  6. 基于 猫冬的 jQuery formValidator表单验证 的asp.net 控件
  7. Java求三角形面积(含可运行代码)
  8. Java异常的一些练习题汇总(掌握)
  9. git出现Your branch and ‘origin/master‘ have diverged
  10. Android SQLite 文件的导入导出