概述
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删除索引
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。
单词词典(Lexicon):单词词典是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向"倒排列表"的指针。
倒排列表(PostingList):倒排列表记载了出现过某个单词的所有文档的文档列表及单词在该文档中出现的位置信息,每条记录称为一个倒排项。
倒排文件(Inverted File):所有单词的倒排列表往往顺序地存储在磁盘的某个文件里,这个文件被称之为倒排文件,倒排文件是存储倒排索引的物理文件。
索引被删除如何恢复
快照恢复
创建文件夹用作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索引正在恢复中,这个删除命令会停止恢复,同时删除所有已经恢复到集群里的数据。
二:搭建
架构
环境
名称 | IP | 部署 | |
---|---|---|---|
tomcat | 192.168.64.20 | filebeat | |
node1 | 192.168.64.15 | Elasticsearch、Kibana | |
node2 | 192.168.64.16 | Elasticsearch |
一:配置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
将脚本导入环境变量,生效
source /etc/profile.d/java.sh
java -version
安装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
优化tomcat启动速度
vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
重启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
设置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
//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
创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
查看启动 ES 是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200 #需要等一会才行,启动比较慢
查看节点信息,浏览器登陆
192.168.64.15:9200
192.168.64.16:9200
检查集群健康状态
浏览器打开
http://192.168.64.15:9200/_cluster/health?pretty
检查集群状态信息
打开 http://192.168.64.15:9200/_cluster/state?pretty
安装 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 &
修改主配置文件
cd ~
vim /etc/elasticsearch/elasticsearch.yml
在尾部添加配置
http.cors.enabled: true
http.cors.allow-origin: "*"
#注释 1.开启跨域访问支持,默认为false
2.跨域访问允许的域名地址
systemctl restart elasticsearch
启动 elasticsearch-head
cd /usr/local/src/elasticsearch-head/
npm run start &
查看端口
netstat -lnupt |grep 9100
netstat -lnupt |grep 9200
浏览器查看
http://192.168.64.15:9100/
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,可以看到成功创建
可以在浏览器上看到
三:部署filebeat
tomcat服务器部署
把包拖进来。并进行解压,解压到/etc/目录下
编辑配置文件
vim /etc/filebeat/filebeat.yml
手动载入ES索引模板
curl -XPUT 'http://192.168.64.15:9200/_template/filebeat?pretty' -d@/etc/filebeat-5.5.1-linux-x86_64/filebeat.template.json
启动filebeat
./filebeat -e -c filebeat.yml &
浏览器查看
http://192.168.64.15:9100/
四:node1 安装kibana
cd /usr/local/src
rpm -ivh kibana-5.5.1-x86_64.rpm
cp /etc/kibana/
cp kibana.yml kibana.yml.bak
修改配置文件
打开端口
监听地址 0.0.0.0表示任何
和es建立联系
在elasticsearch中添加.kibana索引
启动服务并开机自启
浏览器验证
192.168.64.15:5601
可以监控到了
最后
以上就是听话毛巾为你收集整理的EFK+tomcatEFK获取tomcat日志一:介绍二:搭建的全部内容,希望文章能够帮你解决EFK+tomcatEFK获取tomcat日志一:介绍二:搭建所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复