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

news2025/1/17 1:47:35

本文是记录一下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.2

cd /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: log
  enabled: true
  paths:
    - /usr/share/filebeat/devlogs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_dev"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true
#test1环境日志采集
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/test1logs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_test1"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true

#test2环境日志采集
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/test2logs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_test2"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true
    
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - timestamp:
      # 通过日志中的timestamp字段格式化时间值 给 时间戳 
      field: timestamp
      # 使用我国东八区时间  解析log时间
      timezone: Asia/Shanghai
      layouts:
        - '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: 1s

output.elasticsearch:
  hosts: ["https://${es host}:${es port}"]
  #忽略证书校验
  ssl.verification_mode: none
  username: '${账号}'
  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.coloradmin.cn/o/1572388.html

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

相关文章

具身智能机器人实现新里程碑!新型3D世界模型问世

随着人工智能技术的不断进步,视觉-语言-动作(VLA)模型在机器人控制、自动驾驶、智能助手等领域展现出了广阔的应用前景。这类模型能够将视觉、语言、动作等多模态信息进行融合,实现从感知到决策的端到端学习。然而,现有…

商业开源MES+源码+可拖拽式数据大屏

商业开源的一套超有价值的JAVA制造执行MES系统源码 带本地部署搭建教程 教你如何在本地运行运行起来。 开发环境:jdk11tomcatmysql8springbootmaven 需要源码,私信我付费获取。 一、系统概述: 万界星空科技免费试用MES、开源MES、商业开…

SAR教程系列7——在cadence中用Spectrum工具FFT仿真ADC的ENOB、SNR等动态性能指标

首先在仿真之前,你得有一个ADC。然后是思考如何仿真的问题,如何加激励,如何使用相关工具查看仿真结果。假定你有一个可以仿真的ADC,大致经过下列步骤可以得到ADC的相关动态性能指标。 第一步:在ADC后面接一个理想的DA…

docker命令:查看镜像、查看正在运行的容器、终止某个正在运行的容器

2024年4月6日,周五下午 查看docker镜像(image)有哪些 docker image ls 查看正在运行的容器(container)有哪些 docker ps 终止正在运行的container docker stop 容器ID 用docker ps可以查到正在运行的容器的ID

如何从数码相机恢复已删除的照片?

“嗨,我删除了索尼数码相机中的所有照片。有什么办法可以让他们回来吗?” ——刘凯 我们经常从数码相机中删除照片。但是,如果我们误删除了一些重要的照片,则很难将其恢复,因为删除的照片可能会绕过回收站或垃圾箱&am…

docker + miniconda + python 环境安装与迁移(详细版)

本文主要列出从安装dockerpython环境到迁移环境的整体步骤。windows与linux之间进行测试。 简化版可以参考:docker miniconda python 环境安装与迁移(简化版)-CSDN博客 目录 一、docker 安装和测试 二、docker中拉取miniconda&#xff…

sfml sdl2 windows vscode 调试和coderunner插件运行

链接库写在编译链接命令里,如果没有使用到不会加入到生成的可执行文件里。所以tasks.json可以这样写, {"version": "2.0.0","tasks": [{"type": "cppbuild","label": "C/C: g.exe 生…

VGA显示器驱动设计与验证

1.原理 场同步信号的单位是像素点 场同步信号的单位是一行 60的含义是每秒钟刷新60帧图像 全0表示黑色 2.1 CLK_gen.v module CLK_gen(input wire sys_clk ,input wire sys_rst_n ,output wire CLK_out ,output wire locked );parameter STATE1b0; reg [1:0] cnt; r…

Transformer位置编码详解

在处理自然语言时候,因Transformer是基于注意力机制,不像RNN有词位置顺序信息,故需要加入词的位置信息来显示的表明词的上下文关系。具体是将词经过位置编码(positional encoding),然后与emb词向量求和,作为编码块(Enc…

程序·人生

诡异之极 2024.03.12 清新环境(股票代码002573)委托卖出 20000股,委托价4.58,当日最高价4.57 2024.03.11 清新环境(股票代码002573)委托卖出 20000股,委托价4.55,当日最高价4.54 …

谷歌(Google)历年编程真题——数组和字符串(螺旋矩阵)

Google 希望了解你的编码技能和专业技术知识,包括工具、编程语言,以及关于数据结构和算法等主题的一般知识。讨论过程中通常会反复提到相关的话题,就像在工作中的讨论那样,从而推动彼此思考并学习不同的方法。无论你的工作经验如何…

Whisper报错:ffmpeg返回异常值1

本地使用cmd命令显示ffmpeg可以用,但是使用python代码调用whisper包就报错。 查看了whisper源码,发现其也是调用的cmd来使用ffmpeg,于是修改其audio.py中的audio方法中ffmpeg的具体位置完美运行。

基于单片机电阻炉模糊算法控制性系统设计

**单片机设计介绍,基于单片机电阻炉模糊算法控制性系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电阻炉模糊算法控制性系统的设计概要主要包括硬件设计、软件设计以及模糊控制算法的应用。以下是…

【Spring进阶系列丨第七篇】Spring框架新注解分类及详解

文章目录 一、Spring新注解1.1、Configuration注解1.1.1、定义一个类1.1.2、使用Configuration注解修饰类1.1.3、作用 1.2、Bean注解1.2.1、定义bean1.2.2、在主配置类中注册bean1.2.3、测试容器中是否有该bean1.2.4、注册bean的同时可以指定bean名称1.2.5、补充内容1.2.5.1、案…

计算机接口(部分实验)

;实验三: ;*******************************; ;* 8255方式0的C口输入,A口输出 *; ;*******************************; io8255a equ 288h io8255c equ 28ah io8255 equ 28bhcode segmentassume cs:code start: mov dx, 28bH ;设8255为…

Vue3 项目实例(二)vite.config.ts的配置与axios安装

一、vite.config.ts的配置 1、对相对路径的处理() import { defineConfig } from vite import vue from vitejs/plugin-vue // vite 提供node核心对象path import path from path // https://vitejs.dev/config/ export default defineConfig({plugins…

FPGA高端项目:解码索尼IMX327 MIPI相机+2路视频融合叠加,提供开发板+工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理HLS多路视频融合叠加图像缓存HDMI输出工程…

数字化赋能乡村:开启乡村发展新纪元

随着信息技术的迅猛发展和数字化浪潮的席卷,乡村发展正迎来前所未有的机遇与挑战。数字化赋能乡村,不仅是推动农业现代化、提升农村治理水平的必由之路,更是开启乡村发展新纪元的关键所在。本文将围绕数字化赋能乡村这一主题,探讨…

【React】React知识要点记录

描述UI 万物皆组件 为什么多个 JSX 标签需要被一个父元素包裹? 切勿将数字放在 && 左侧 React 中为什么需要 key? React 为何侧重于纯函数? 渲染树 模块依赖树 添加交互 React如何传递事件处理函数? React 如何知道返回哪个 sta…

带你了解自动驾驶中的功能安全

谈一谈自动驾驶中的功能安全 附赠自动驾驶学习资料和量产经验:链接 一 概述 汽车涉及到人的生命财产安全,谈汽车首先要谈的就是安全。目前自动驾驶的安全主要分为三大块:功能安全,网络(信息)安全&#xf…