EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程

项目背景:

此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式),这些日志都已经按照不同环境输出到/home/dev   /home/test1   /home/test2 目录下了,按照不同的应用服务输出到不同的目录,比如dev环境的 common 服务,会输出到/dev/logs/common/common.log

EFK服务的部署都使用docker,然后将数据目录挂载至容器中

基础架构模型:

1.部署es

#创建es的docker网络
docker network create elasticsearch
#拉取es镜像,版本号为8.12.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2
#调整系统参数,否则es无法启动
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
sysctl -p
#创建elasticsearch用户
useradd -m elasticsearch
passwd elasticsearch#创建es数据和目录文件夹(放在数据盘)
mkdir -p /mnt/storage/es/data
mkdir -p /mnt/storage/es/logs
mkdir -p /mnt/storage/es/plugins
#授权目录
chown -R elasticsearch:elasticsearch /mnt/storage/es/
chmod -R u+rwxs es/
chmod -R 777  /mnt/storage
#运行es,挂载配置文件目录、数据文件目录、日志目录
#前台查看输出,先执行这个,查看并记录es的信息
docker run --name es -e "ES_JAVA_OPTS=-Xms3072m -Xmx3072m" -v /mnt/storage/es/data:/usr/share/elasticsearch/data -v /mnt/storage/es/logs:/usr/share/elasticsearch/logs -v /mnt/storage/es/plugins:/usr/share/elasticsearch/plugins -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 9200:9200 -m 4GB -it docker.elastic.co/elasticsearch/elasticsearch:8.12.2#进入es容器bash
docker start es
docker exec -it es /bin/bash
#压缩配置文件目录
cd /usr/share/elasticsearch
zip -r config.zip config/
#退出容器bash
exit
#将配置文件压缩包config.zip放到/home/elasticsearch 目录
docker cp es:/usr/share/elasticsearch/config.zip /home/elasticsearch/
chmod 777 /home/elasticsearch/config.zip
#解压配置文件压缩包
su elasticsearch
cd /home/elasticsearch
unzip config.zip
chmod -R 777 config/#停止并删除容器
su root
docker stop es
docker rm es#后台运行
docker run --name es -e "ES_JAVA_OPTS=-Xms3072m -Xmx3072m" -v /home/elasticsearch/config:/usr/share/elasticsearch/config -v /mnt/storage/es/data:/usr/share/elasticsearch/data -v /mnt/storage/es/logs:/usr/share/elasticsearch/logs -v /mnt/storage/es/plugins:/usr/share/elasticsearch/plugins -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 9200:9200 -m 4GB -d docker.elastic.co/elasticsearch/elasticsearch:8.12.2cd /home/elasticsearch/config/certs
curl --cacert http_ca.crt -u elastic:${password} https://localhost:9200#后续启动
docker start es

2.部署kibana

#创建kibana用户
useradd -m kibana
passwd kibana#拉取镜像
docker pull docker.elastic.co/kibana/kibana:8.12.2
#运行
docker run --name kibana --net elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.2#ctrl+c停止容器
#启动kibana容器
docker start kibana
#将配置文件/home/kibana 目录
docker cp kibana:/usr/share/kibana/config /home/kibana/
cd /home/kibana
chmod -R 777 config/#创建对应的数据、日志文件夹
su kibana
mkdir /home/kibana/data
mkdir /home/kibana/logs
chmod 777 /home/kibana/data
chmod 777 /home/kibana/logs#停止之前的容器
su root
docker stop kibana
docker rm kibana
#设置中文
vi /home/kibana/config/kibana.yml
#在最后添加 i18n.locale: "zh-CN"docker run --name kibana -v /home/kibana/config:/usr/share/kibana/config -v /home/kibana/data:/usr/share/kibana/data -v /home/kibana/logs:/usr/share/kibana/logs -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 5601:5601 -d docker.elastic.co/kibana/kibana:8.12.2
#查看启动日志,另外在浏览器查看效果
docker logs kibana
#查看是否正常运行
curl http://127.0.0.1:5601#通过浏览器进入kibana页面后,会需要输入es的 enrollment token,如果过期了,执行如下命令获取
docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

3.在应用服务器部署filebeat

#创建filebeat用户
useradd -m filebeat
passwd filebeat
#拉取镜像
docker pull docker.elastic.co/beats/filebeat:8.12.2
#将filebeat.yml放到/home/filebeat 目录下
chmod 777 /home/filebeat/filebeat.yml
chmod go-w /home/filebeat/filebeat.yml
#运行,需要将日志目录挂载到容器
docker run -u root --name filebeat -v /home/filebeat/data:/usr/share/filebeat/data:rw -v /home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -v /home/filebeat/logs:/usr/share/filebeat/logs -v /home/dev/logs:/usr/share/filebeat/devlogs:ro -v /home/test1/logs:/usr/share/filebeat/test1logs:ro -v /home/test2/logs:/usr/share/filebeat/test2logs:ro -v /etc/localtime:/etc/localtime:ro --privileged -m 1GB -d docker.elastic.co/beats/filebeat:8.12.2

4.filebeat配置(按照不同的环境将日志分发到不同的es index)

filebeat.inputs:
#dev环境日志采集
- type: logenabled: truepaths:- /usr/share/filebeat/devlogs/base-gateway/base-gateway*.logfields:log_env: "applog_dev"fields_under_root: truejson:keys_under_root: trueoverwrite_keys: truemessage_key: "message"add_error_key: true
#test1环境日志采集
- type: logenabled: truepaths:- /usr/share/filebeat/test1logs/base-gateway/base-gateway*.logfields:log_env: "applog_test1"fields_under_root: truejson:keys_under_root: trueoverwrite_keys: truemessage_key: "message"add_error_key: true#test2环境日志采集
- type: logenabled: truepaths:- /usr/share/filebeat/test2logs/base-gateway/base-gateway*.logfields:log_env: "applog_test2"fields_under_root: truejson:keys_under_root: trueoverwrite_keys: truemessage_key: "message"add_error_key: truefilebeat.config:modules:path: ${path.config}/modules.d/*.ymlreload.enabled: falseprocessors:- add_cloud_metadata: ~- add_docker_metadata: ~- timestamp:# 通过日志中的timestamp字段格式化时间值 给 时间戳 field: timestamp# 使用我国东八区时间  解析log时间timezone: Asia/Shanghailayouts:- '2006-01-02 15:04:05'- '2006-01-02 15:04:05.999'test:- '2019-06-22 16:33:51.765'queue.mem:#每1秒钟就进行推送flush.timeout: 1soutput.elasticsearch:hosts: ["https://${es host}:${es port}"]#忽略证书校验ssl.verification_mode: noneusername: '${账号}'password: '${密码}'indices:- index: "logs-dev-%{+yyyy.MM}"when.contains:log_env: "applog_dev"- index: "logs-test1-%{+yyyy.MM}"when.contains:log_env: "applog_test1"- index: "logs-test2-%{+yyyy.MM}"when.contains:log_env: "applog_test2"

参考:

前言 · ELKstack 中文指南

ES官方文档 What is Elasticsearch? | Elasticsearch Guide [8.12] | Elastic

Kibana官方文档 Kibana—your window into Elastic | Kibana Guide [8.12] | Elastic

Filebeat官方文档 Filebeat overview | Filebeat Reference [8.12] | Elastic

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/788744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis链表结构和简单动态字符串(SDS)

1.双向链表 redis中的普通链表是双向链表。通过链表节点结构体可知有全驱节点和后继节点。 1.链表节点和链表 //adlist.h typedef struct listNode {struct listNode *prev; //前驱节点struct listNode *next; //后继节点void *value; //节点值 } list…

27.ReentrantLock

1.与synchronized不同点: 可中断可以设置超时时间可以设置公平锁,公平锁就是为了解决饥饿线程,让线程排队,先进先出,先来的线程先执行。支持多个条件变量 2.与synchronized相同点都支持锁的可重入。 基本格式&#…

JavaScript 超详细学习思路

JavaScript 是一种轻量级的编程语言,它可以在网页中嵌入,用来实现网页的动态效果和用户交互功能。它是 Web 开发中不可或缺的一部分,与 HTML 和 CSS 并称为 Web 技术的三大基石。下面我会根据您的要求,对每个部分进行详细的讲解。…

“崖山数据库杯”深圳大学程序设计竞赛(正式赛)M题 一图秒

“崖山数据库杯”深圳大学程序设计竞赛(正式赛)_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com) —————— 可以去牛客看题解: 题解 | #暂时没想法#_牛客博客 (nowcoder.net) —————— 上面的就是题解了。…

Web CSS笔记3

一、边框弧度 使用它你就可以制作盒子边框圆角 border-radius:1个值四个圆角值相同2个值 第一个值为左上角与右下角,第二个值为右上角与左下角3个值第一个值为左上角, 第二个值为右上角和左下角,第三个值为右下角4个值 左上角,右…

大数据时代的生物信息学:挖掘生命数据,揭示生命奥秘

在当今科技日新月异的时代,大数据如同一座蕴藏无尽宝藏的矿山,而生物信息学则是那把锐利的探矿锤,精准有力地敲击着这座“生命之矿”,揭示出隐藏在其深处的生命奥秘。随着基因测序技术的飞速进步与广泛应用,生物医学领…

springboot之MybatisPlus

文章目录 一、ORM二、mybatis实际操作三、mybatis-plus 一、ORM 简单来说ORM就是一个能够帮我们把java中Bean类映射到数据库中。 使用mybatis-plus。 配置架包 <!-- MyBatisPlus依赖 --><dependency><groupId>com.baomidou</groupId><art…

垄断与商品化背景下的网络安全三大整合策略

我国的网络安全产业已经发展了20余年&#xff0c;大大小小的企业几乎覆盖了网络安全的所有领域。随着安全需求的逐渐递增&#xff0c;安全产品也朝着平台化、规模化发展&#xff0c;这就倒逼着安全厂商需要整合越来越多的安全能力&#xff0c;并与其产品相融合。这个过程&#…

安装transforers时报错:error: can‘t find Rust compiler

报错&#xff1a; error: cant find Rust compilerIf you are using an outdated pip version, it is possible a prebuilt wheel is available for this package but pip is not able to install from it. Installing from the wheel would avoid the need for a Rust compil…

【VSCode+Keil5+STM32CubeMX】开发环境配置

一、软件下载 二、软件安装 三、配置环境 四、验证开发环境 五、Keil与VS Code的同步 从0到1搭建VS Code Keil5 STM32CubeMX开发环境 优点 支持标准库HAL库LL库代码编辑更“现代化”&#xff1a;代码提示、函数跳转、更高自由度的定制主题等优点多端同步&#xff0c;VS Code和…

【LAMMPS学习】七、加速性能(3)通用技巧

7. 加速性能 7.1.基准测试 7.2.测试性能 7.3.通用技巧 以下是提高模拟性能的通用技巧。它们中的大多数只适用于当前性能中的某些模型和某些瓶颈&#xff0c;因此让您生成的计时数据作为指导。要预测这些选项会产生多大的差异&#xff0c;即使不是不可能&#xff0c;也是很难…

Pathlib库的有哪些神奇功能在Python中

解锁Python利器pathlib的神奇功能 什么是 pathlib&#xff1f; pathlib 是 Python 中用于处理文件路径的模块&#xff0c;它提供了面向对象的方法来操作文件系统路径。使用 pathlib 可以更加直观和安全地处理文件和目录路径。 功能 一些 pathlib 提供的功能包括&#xff1a;…

Jmeter02-1:参数化组件CVS

目录 1、Jmeter组件&#xff1a;参数化概述 1.1 是什么&#xff1f; 1.2 为什么&#xff1f; 1.3 怎么用&#xff1f; 2、Jmeter组件&#xff1a;参数化实现之CSV Data Set Config(重点中重点) 2.1 是什么&#xff1f; 2.2 为什么&#xff1f; 2.3 怎么用&#xff1f; …

【2024年5月备考新增】《2024高项论文精华版(5)项目工作绩效域和度量绩效域》

3 项目工作绩效域 预期目标绩效指标检查方法①高效且有效的项目绩效状态报告:通过状态报告可以表明项目工作有效率且有效果②适合项目和环境的项目过程▲过程的适宜性:证据表明,项目过程是为满足项目和环境的需要而裁剪▲过程相关性和有效性:过程审计和质量保证活动表明,过…

Golang | Leetcode Golang题解之第5题最长回文子串

题目&#xff1a; 题解&#xff1a; func longestPalindrome(s string) string {if s "" {return ""}start, end : 0, 0for i : 0; i < len(s); i {left1, right1 : expandAroundCenter(s, i, i)left2, right2 : expandAroundCenter(s, i, i 1)if ri…

「PHP系列」PHP数组排序及运用场景

文章目录 一、PHP 数组排序二、PHP 数组排序使用场景数据排序介绍数据排序案例 三、相关链接 一、PHP 数组排序 PHP 提供了多种数组排序函数&#xff0c;允许你根据数组元素的值或键进行排序。 sort() sort() 函数用于对数组的元素按升序进行排序。它会修改原始数组&#xf…

把本地项目上传到gitee上

要把本地项目上传到 Gitee&#xff0c;你需要先在 Gitee 上创建一个仓库&#xff0c;然后在本地使用 Git 将项目推送到 Gitee。以下是简要步骤和示例代码&#xff1a; 1、在 Gitee 上创建一个新的仓库。 2、在本地项目目录中初始化 Git&#xff08;如果尚未初始化&#xff09…

python实现全排列(递归和循环)

递归实现全排列可以使用回溯法。具体步骤如下&#xff1a; 将待排列的元素分为两部分&#xff1a;第一个元素&#xff08;固定元素&#xff09;和其余元素。对于固定元素后面的每一个元素&#xff0c;将其与固定元素交换位置&#xff0c;然后递归地对剩余元素进行全排列。递归…

Mysql数据库getshell方法

今天摸鱼时候&#xff0c;突然有人问我不同的数据库getshell的方式&#xff0c;一时间我想到了mysql还有redis未授权访问到getshell的方式&#xff0c;但是仅仅第一时间只想到了这两种&#xff0c;我有查了查资料&#xff0c;找到了上面两种数据库getshell的补充&#xff0c;以…

【面试八股总结】传输控制协议TCP(三)

参考资料 &#xff1a;小林Coding、阿秀、代码随想录 一、TCP拥塞控制⭐ 1. 慢启动 – Slow Start 慢启动是指TCP连接刚建立&#xff0c;一点一点地提速&#xff0c;试探一下网络的承受能力&#xff0c;以免直接扰乱了网络通道的秩序。 慢启动算法&#xff1a; 初始拥塞窗口…