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.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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度松果菁英班——机器学习实践一:海量文件遍历

飞桨AI Studio星河社区-人工智能学习与实训社区 🦐在指定目录下显示目录结构 !tree -L 显示级数限制 指定目录 如: !tree -L 3 ./data/ 表示:在目录 ./data/ 下显示目录结构,限制显示到第三级子目录或文件。这个命令通常在命…

基于单片机冬季供暖室温调节控制系统

**单片机设计介绍,基于单片机冬季供暖室温调节控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的冬季供暖室温调节控制系统是一种集温度检测、控制和显示功能于一体的智能化系统。该系统以单片机为…

基于Springboot+Vue实现前后端分离社团管理系统

一、🚀选题背景介绍 📚推荐理由: 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于社团管理也是十分常见的。过去使用手工的管理方式对大学生社团进行管理,造成了管理繁琐、难以维护等…

图解大型网站多级缓存的分层架构

前言 缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存,其中缓存策略算法也是层出不穷。 假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服…

开源流程图表库(04):mxGraph,都是可视化编辑,导出使用。

mxGraph是一个用于创建和展示图形的JavaScript库。它提供了丰富的功能和工具,可以用于构建各种类型的图形应用程序,包括流程图、组织结构图、网络拓扑图等。 mxGraph的编辑器 一、mxGraph的特点和功能 以下是一些mxGraph的特点和功能: 强大…

ES10 学习

文章目录 1. Object.fromEntries()2. trimStart() 和 trimEnd()3. 数组的flat() 和flatMap()4. Symbol 对象的description 属性5. try ... catch(e){} 1. Object.fromEntries() Object.fromEntries() 方法允许你轻松地将键 值对列表转换为对象 let arr [["name",&qu…

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验:链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式,它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域,不仅可以表达车道几何,也可以完整表述车…

有效的括号--如果字符串没有左括号,或者字符串是右括号为开头,则存在括号不匹配和顺序不正确的情况公字符串无效

题目-有效的括号 ​ 一、分析题目 二、编写代码 typedef char STDataType;typedef struct Stack {STDataType* a; //int top; //相当于数组下标,注意栈为空时,top的值应该为?int capacity;//栈的容量 }ST;void STInit(ST* pst); void STD…

基于SSM框架就业管理系统

摘要 本论文主要讲述了基于SSM框架及MySQL数据库实现的就业管理系统的设计和开发过程。本论文中所讲的就业管理系统是通过所学的知识创办一个非商业性的网站平台,使所有想要就业信息查看的高校毕业生们与想要宣传自己公司的商家们都可以更方便快捷的进行就业和体验…

MobaXterm不显示隐藏文件

MobaXterm在左边显示隐藏文件,以.开头的文件,想让它不显示 点击方框圈中的不显示隐藏文件 隐藏文件不显示了

InterlliJ Debug方式启动 method breakpoints may dramatically show down debugging

使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging, 如图: 根据语义可能是断点打在方法上面了,导致在某个断点卡住了。 重启服务器和重启idea已然无解。 打开Breakpoints面板看看,(快捷键&…

【javaWeb Maven高级】Maven高级学习

Maven高级学习 分模块设计继承与聚合继承版本锁定聚合 私服资源的上传与下载本地私服配置 分模块设计 为什么需要进行分模块设计? 将项目按照功能拆分成若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互调用&#xff0c…

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

【更新】中国区域创新能力指数数据集(无缺失值)(2001-2022年)

01、数据简介 中国区域创新能力指数是一个综合反映各地区在知识创造、知识获取、企业创新、创新环境和创新绩效等方面能力的指标。该指数基于一系列复杂的评价体系,包括多个层级的指标,以全面、准确地衡量中国各区域的创新能力。 《中国区域创新能力报…

在局域网内进行ARP欺骗攻击(Kali)_kali局域网攻击,从入门到真香

fping –asg 192.168.6.0/24 下图看到,同网段有四个活动IP 3、实施断网攻击 命令:arpspoof –i 网卡 –t 靶机IP地址 网关 -i 指定网卡 -t 持续不断攻击 我的命令:arpspoof –i eth0 –t 192.168.6.137 192.168.6.1 Kali中持续不断地发送arp应…

通信光缆主要敷设方式有哪些

由于建设条件和建设要求不同,通信光缆在不同场景下会采取不同的敷设方式,常见敷设方式包括:直埋、架空、管道、水底及局内等。 1 直埋敷设 直埋,也就是直接埋设,是指把光缆直接埋设于地下土壤中的敷设方式。通常&…

Oracle 中 where 和 on 的区别

1.Oracle 中 where 和 on 的区别 on:会先根据on后面的条件进行筛选,条件为真时返回该行,由于on的优先级高于left join,所以left join关键字会把左表中没有匹配的所有行也都返回,然后生成临时表返回,执行优先级高于…

sharding‐jdbc之分库分表实战

数据库表结构 店铺数据库 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for region -- ---------------------------- DROP TABLE IF EXISTS region; CREATE TABLE region (id bigint(20) NOT NULL COMMENT id,region_…

了解IP地址的基本概念和修改步骤

在数字化时代,IP地址作为网络设备的唯一标识,其重要性不言而喻。无论是为了提升网络性能,还是出于隐私保护的需求,修改IP地址都是网络使用者可能遇到的操作。虎观代理将详细介绍如何修改IP地址,并探讨在修改过程中需要…

用C/C++加Easyx实现俄罗斯方块游戏(爆肝4万字,完全免费)

前言 相信大家一定玩过俄罗斯方块这款小游戏,简单容易上手是老少皆宜的小游戏,今天大家就跟着我来实现这个小游戏吧!让自己学的C语言有用武之地。 为了让俄罗斯方块的开发更为简单些,图像更为丰富,在这里就利用了Easyx…