EFK+tomcat

EFK获取tomcat日志

一:介绍

EFK不是一个软件,而是一套解决方案,开源软件之间的互相配合使用,高效的满足了很多场合的应用,是目前主流的一种日志系统。EFK是三个开源软件的缩写,分别表示:Elasticsearch , FileBeat, Kibana , 其中ELasticsearch负责日志保存和搜索,FileBeat负责收集日志,Kibana 负责界面,当然EFK和大名鼎鼎的ELK只有一个区别,那就是EFK把ELK的Logstash替换成了FileBeat,因为Filebeat相对于Logstash来说有2个好处:
1、侵入低,无需修改程序目前任何代码和配置
2、相对于Logstash来说性能高,Logstash对于IO占用很大

Elasticsearch:

(https://www.elastic.co/cn/elasticsearch/)

Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elasticsearch 中。Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。Elasticsearch 是索引、搜索和分析魔法发生的地方。

Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。无论您拥有结构化或非结构化文本、数字数据还是地理空间数据,Elasticsearch 都能以支持快速搜索的方式高效地存储和索引它。您可以超越简单的数据检索和聚合信息来发现数据中的趋势和模式。随着数据和查询量的增长,Elasticsearch 的分布式特性可以使部署能够随之无缝增长

filebeat:

Filebeat 是使用 Golang 实现的轻量型日志采集器,也是 Elasticsearch stack 里面的一员。本质上是一个 agent ,可以安装在各个节点上,根据配置读取对应位置的日志,并上报到相应的地方去。

Filebeat 的可靠性很强,可以保证日志 At least once 的上报,同时也考虑了日志搜集中的各类问题,例如日志断点续读、文件名更改、日志 Truncated 等。

Filebeat 并不依赖于 ElasticSearch,可以单独存在。我们可以单独使用Filebeat进行日志的上报和搜集。filebeat 内置了常用的 Output 组件, 例如 kafka、ElasticSearch、redis 等,出于调试考虑,也可以输出到 console 和 file 。我们可以利用现有的 Output 组件,将日志进行上报。

当然,我们也可以自定义 Output 组件,让 Filebeat 将日志转发到我们想要的地方。

filebeat 其实是 elastic/beats 的一员,除了 filebeat 外,还有 HeartBeat、PacketBeat。这些 beat 的实现都是基于 libbeat 框架

kibana:

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。

es的增删改查

索引index(相当于关系型数据库的表)

类型type,在es7.x:默认为_doc(必须使用单index,单type,多type结构则会完全移除)

映射mapping(定义字段的类型等信息)

文档doc(一个doc相当于关系型数据库的一行数据,一行记录)

es删除索引

image-20220831170920140

PUT(创建,修改) localhost:9200/索引名称/类型名称/文档id 创建文档(指定文档id)
POST(创建) localhost:9200/索引名称/类型名称 创建文档(随机文档id)
POST(修改) localhost:9200/索引名称/类型名称/文档id/update 修改文档
DELETE(删除) localhost:9200/索引名称/类型名称/文档id 删除文档
GET(查询) localhost:9200/索引名称/类型名称/文档id 查询文档通过文档ID
POST(查询) localhost:9200/索引名称/类型名称/文档id/search 查询所有数据

倒排索引

倒排索引(Inverted Index):每个文档都对应一个ID,倒排索引会按照指定语法对每一个文档进行分词,然后维护一张表,列举所有文档中出现的terms以及它们出现的文档ID和出现频率,它是实现"单词-文档矩阵"的一种具体存储形式。倒排索引主要由两部分组成:“单词词典"+"倒排文件”。

简单的来讲:正序索引是根据key找value,而倒序索引是根据value找key。

image-20220831172200694

image-20220831172212395

单词词典(Lexicon):单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向"倒排列表"的指针。

倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项。

倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。

image-20220831172251888

索引被删除如何恢复

快照恢复

创建文件夹用作Elasticsearch备份仓库

mkdir /usr/local/backup
chmod 777 /usr/local/backup
在elasticsearch.yml文件中增加path.repo路径配置
vim /usr/local/elasticsearch/config/elasticsearch.yml
#加上这个配置
path.repo: ["/usr/local/backup"]
重启elasticsearch

创建仓库
PUT _snapshot/my_backup
{
    "type": "fs",
    "settings": {
        "location": "/mount/backups/my_backup",
        "max_snapshot_bytes_per_sec" : "50mb",	
        "max_restore_bytes_per_sec" : "50mb"	
    }
}

my_backup:仓库名称

type:指定仓库的类型是一个共享文件系统

localhost:指定已挂载的设备作为仓库地址

max_snapshot_bytes_per_sec:当快照数据进入仓库时,这个参数控制这个过程的限流情况。默认每秒 20mb

max_restore_bytes_per_sec:当从仓库恢复数据时,这个参数控制什么时候恢复过程会被限流以保障你的网络不会被占满。默认每秒 20mb。

快照所有打开的索引
PUT _snapshot/my_backup/snapshot_1

快照所有打开的索引到my_backup仓库中,快照的名称为snapshot_1,这个调用会立刻返回,然后快照会在后台运行

PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
1
这个会阻塞调用直到快照完成。注意大型快照会花很长时间才返回
快照指定索引
PUT _snapshot/my_backup/snapshot_2
{
    "indices": "index_1,index_2"
}
这个快照命令只会备份索引名称为index1 和 index2 了
查询快照信息
GET _snapshot/my_backup/snapshot_2
返回my_backup仓库下snapshot_2索引的详细信息

GET _snapshot/my_backup/_all
删除快照
DELETE _snapshot/my_backup/snapshot_2
查看快照进度
GET _snapshot/my_backup/snapshot_3

INITIALIZING:分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的。
STARTED:数据正在被传输到仓库。
FINALIZING:数据传输完成;分片现在在发送快照元数据。
DONE:快照完成!
FAILED:快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。

DELETE _snapshot/my_backup/snapshot_3
1
这个会中断快照进程。然后删除仓库里进行到一半的快照。
快照恢复
POST _snapshot/my_backup/snapshot_1/_restore
默认行为是把这个快照里存有的所有索引都恢复。如果 snapshot_1 包括五个索引,这五个都会被恢复到我们集群里。和 snapshot API 一样,我们也可以选择希望恢复具体哪个索引
POST /_snapshot/my_backup/snapshot_1/_restore
{
    "indices": "index_1", //只恢复 index_1 索引,忽略快照中存在的其余索引。
    "rename_pattern": "index_(.+)", //查找所提供的模式能匹配上的正在恢复的索引。
    "rename_replacement": "restored_index_$1" //然后把它们重命名成替代的模式。
}

POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
1
和快照类似, restore 命令也会立刻返回,恢复进程会在后台进行。如果你更希望你的 HTTP 调用阻塞直到恢复完成,添加 wait_for_completion 标记

监控恢复操作
GET restored_index_3/_recovery

最后可以查看到恢复情况

type:字段告诉你恢复的类型;SNAPSHOT表示这个分片是在从一个快照恢复。

source:描述了作为恢复来源的特定快照和仓库。

percent:恢复进度

取消一个快照恢复
DELETE /restored_index_3
1
要取消一个恢复,你需要删除正在恢复的索引。因为恢复进程其实就是分片恢复,发送一个 删除索引 API 修改集群状态,就可以停止恢复进程。如果 restored_index_3索引正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据。

二:搭建

架构

image-20220830225911135

环境

名称IP部署
tomcat192.168.64.20filebeat
node1192.168.64.15Elasticsearch、Kibana
node2192.168.64.16Elasticsearch

一:配置tomcat服务器环境

关闭防火墙和核心防护

[root@tomcat ~]#systemctl stop firewalld.service 
[root@tomcat ~]#systemctl disable firewalld.service 
[root@tomcat ~]#setenforce 0

上传安装包

[root@tomcat ~]#cd /opt/
[root@tomcat /opt]#ls
apache-tomcat-9.0.16.tar.gz  jdk-8u201-linux-x64.rpm  rh

安装JDK,并设置Java环境

rpm -ivh jdk-8u201-linux-x64.rpm
vim /etc/profile.d/java.sh

export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar		#可执行文件的位置
export PATH=$JAVA_HOME/bin:$PATH

image-20220830230750261

将脚本导入环境变量,生效

source /etc/profile.d/java.sh
java -version

image-20220830230913419

安装tomcat

在安装 Tomcat 之前必须先安装 JDK,因为 JDK 是 java 语言的软件包开发工具,其中包含了JVM(java 虚拟机),编写好的 java 源程序经过编译可形成 java 字节码,只要安装了 JDK ,就可用 JVM 解释这些字节码文件,从而保证了 java 的跨平台性;

  • 解压 apache-tomcat-9.0.16.tar.gz 包
[root@tomcat /opt]#tar zxvf apache-tomcat-9.0.16.tar.gz					  #解包
[root@tomcat /opt]#mv apache-tomcat-9.0.16 /usr/local/tomcat     		  #转移包位置并改名

启动 Tomcat

  • 创建软连接,优化开启命令,便于管理

    [root@tomcat]#ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/		
    [root@tomcat]#ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
    

    开启服务

    startup.sh
    metstat -natp | grep 8080
    

    image-20220830231458301

image-20220830231533751

优化tomcat启动速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security


image-20220830231653074

重启tomcat服务

/usr/local/tomcat/bin/shutdown.sh			
/usr/local/tomcat/bin/startup. sh

二:配置 Elasticsearch 环境

node1和node2节点同时进行

关闭防火墙和核心防护

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

修改DNS

vim /etc/hosts
192.168.3.12 node1
192.168.3.13 node2

image-20220830231925910

设置java环境

下载jdk包

rpm -ivh jdk-8u201-linux-x64.rpm
vim /etc/profile.d/java.sh				#/etc/profile.d/环境变量脚本目录	
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar		#可执行文件的位置
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile.d/java.sh           #将脚本导入到环境变量中,使其生效

安装elasticsearch集群

部署 Elasticsearch 软件

node1和node2相同

1.安装 rpm 包
cd /opt
#将软件包传至该目录下
rpm -ivh elasticsearch-5.5.1.rpm 

2.加载系统服务
systemctl daemon-reload 	//加载系统服务
systemctl enable elasticsearch	//开启服务

更改 ES 主要配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak

vim /etc/elasticsearch/elasticsearch.yml

image-20220830232418323

image-20220830232426396

image-20220830232440073

image-20220830232447073

image-20220830232502961

image-20220830232512577

image-20220830232527233

image-20220830232605858

//17行	cluster.name: my-elk-cluster							#集群名字
//23行	node.name: node1										#节点名字,node2节点就写node2
//33行	path.data: /data/elk_data								#数据存放路径
//37行	path.logs: /var/log/elasticsearch/						#日志存放路径
//43行	bootstrap.memory_lock: false							#不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
//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"]	#集群发现通过单播实现

检查配置

grep -v "^#" /etc/elasticsearch/elasticsearch.yml

image-20220830232856317

创建数据存放路径并授权

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

查看启动 ES 是否成功开启

systemctl start elasticsearch.service
netstat -antp | grep 9200	#需要等一会才行,启动比较慢

image-20220830233302082

查看节点信息,浏览器登陆

192.168.64.15:9200
192.168.64.16:9200

image-20220830233351050

image-20220830233408386

检查集群健康状态

浏览器打开

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

image-20220830233553794

检查集群状态信息

打开 http://192.168.64.15:9200/_cluster/state?pretty

image-20220830233652347

安装 elasticsearch-head 插件

node1、node2操作相同

cd /opt
yum install -y gcc gcc-c++ make
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
make -j 8 && make install
这边时间很长,建议直直接上j8
安装 phantomjs(前端框架)
cd /usr/local/src/
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
安装 elasticsearch-head(数据可视化工具)
cd /usr/local/src/
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install &

image-20220830234243450

修改主配置文件

cd ~
vim /etc/elasticsearch/elasticsearch.yml

在尾部添加配置

http.cors.enabled: true
http.cors.allow-origin: "*"

image-20220830234400051

#注释 1.开启跨域访问支持,默认为false

2.跨域访问允许的域名地址

systemctl restart elasticsearch

启动 elasticsearch-head

cd /usr/local/src/elasticsearch-head/
npm run start &

image-20220830234559408

查看端口

netstat -lnupt |grep 9100
netstat -lnupt |grep 9200

image-20220830234722694

浏览器查看

http://192.168.64.15:9100/

image-20220830234835157

image-20220830234935315

node1

curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"xcf","mesg":"hello world"}'
#索引为index-demo,类型为test,可以看到成功创建

image-20220830235034527

可以在浏览器上看到

三:部署filebeat

tomcat服务器部署

把包拖进来。并进行解压,解压到/etc/目录下

编辑配置文件

vim /etc/filebeat/filebeat.yml	

image-20220830225208353

image-20220830225148069

image-20220830225126351

手动载入ES索引模板

curl -XPUT 'http://192.168.64.15:9200/_template/filebeat?pretty' -d@/etc/filebeat-5.5.1-linux-x86_64/filebeat.template.json

image-20220831001800333

启动filebeat

./filebeat -e -c filebeat.yml &

image-20220831155823334

浏览器查看

http://192.168.64.15:9100/

image-20220831160210710

四:node1 安装kibana

cd /usr/local/src

image-20220831160550709

rpm -ivh kibana-5.5.1-x86_64.rpm 
cp /etc/kibana/
cp kibana.yml kibana.yml.bak

image-20220831160731126

修改配置文件

打开端口

image-20220831160818062

监听地址 0.0.0.0表示任何

image-20220831160846109

和es建立联系

image-20220831160939582

在elasticsearch中添加.kibana索引

image-20220831161006629

启动服务并开机自启

image-20220831161235397

浏览器验证

192.168.64.15:5601

image-20220831161524907

image-20220831161624224

可以监控到了

image-20220831163510010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值