基于elk实现分布式日志

1.基本介绍

1.1 什么是分布式日志

在分布式应用中,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。所以我们使用集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。

1.2 为什么要使用分布式日志

一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

1.3 ELK 分布式日志

  • 实际上ELK是三款软件的简称,分别是Elasticsearch、 Logstash、Kibana组成。
  • Elasticsearch 基于java,是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Kibana 基于nodejs,也是一个开源和免费的工具,Kibana可以为Logstash和ElasticSearch提供的日志分析友好的Web 界面,可以汇总、分析和搜索重要数据日志。
  • Logstash 基于java,是一个开源的用于收集,分析和存储日志的工具。
  • 下面是ELK的工作原理:
    在这里插入图片描述

2.实战

2.1 搭建elk环境

本环境用于接收各logstash发送的日志数据。
具体,参考:https://core815.blog.csdn.net/article/details/149837061

2.2 准备日志文件

日志文件,可以指向应用系统具体文件目录,本文准备了测试文件,可在文末“相关资源”章节获取。
在这里插入图片描述

2.3 安装logstash

安装文件,放到“/home”路径下:

tar -zxvf logstash-9.1.2-linux-x86_64.tar.gz

编写配置文件:

cd /home/logstash-9.1.2/bin
vim logstash-elasticsearch.conf

logstash-elasticsearch.conf:

# INPUT 模块:定义日志来源
input {file {# 监听 /home/logs/ 目录下所有 .log 文件path => "/home/logs/*.log"# 首次启动时从文件开头读取(历史日志全量导入)start_position => "beginning"# 禁用 sincedb 记录(每次重启均重新读取文件,适用于测试环境)sincedb_path => "/dev/null"# 多行合并编解码器(用于处理跨行日志,如 Java 异常堆栈)codec => multiline {# 匹配以时间戳开头的行(格式示例:2025-08-13 10:00:00)pattern => "^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}"# true 表示不匹配 pattern 的行合并到上一事件negate => true# 将当前行合并到上一事件的末尾what => "previous"# 强制未完成的多行事件每 3 秒输出一次auto_flush_interval => 3}}
}# FILTER 模块:数据处理逻辑
filter {# 若文件路径包含 "info"(如 /home/logs/app_info.log)if [path] =~ "info" {# 标记日志类型为 "info"mutate { replace => { type => "info" } }# 使用 GROK 解析 Apache 组合日志格式(提取 IP、方法、状态码等字段)grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}# 解析日志中的时间戳,覆盖默认的 @timestampdate {match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]  # 格式示例:13/Aug/2025:14:00:00 +0800}}# 若文件路径包含 "error"(如 /home/logs/error.log)else if [path] =~ "error" {# 标记日志类型为 "error"mutate { replace => { type => "error" } }}# 其他日志文件else {# 标记日志类型为 "random_logs"mutate { replace => { type => "random_logs" } }}
}# OUTPUT 模块:定义数据输出目标
output {# 输出到 Elasticsearchelasticsearch {hosts => "10.86.97.210:9200"  # ES 服务器地址(生产环境建议改为数组格式:["ip:port"])user => "elastic"              # 用户名(正确字段应为 username)password => "test@123456"     # 密码(特殊符号需用双引号包裹)# 缺失参数建议添加:# ssl => true                  # 若 ES 启用 HTTPS 需开启# index => "logs-%{type}-%{+YYYY.MM.dd}"  # 按类型和日期分隔索引}# 同时输出到控制台(调试用,生产环境可移除)stdout {codec => rubydebug  # 以易读格式打印结构化事件}
}

创建logstash专用用户:

sudo groupadd -r logstash
sudo useradd -r -s /bin/bash -g logstash -d /home/logstash-9.1.2 -m logstash

调整logstash目录权限:

# 将 Logstash 安装目录所有权赋予新用户
sudo chown -R logstash:logstash /home/logstash-9.1.2/
# 确保日志目录可写入
sudo mkdir /var/log/logstash
sudo chown logstash:logstash /var/log/logstash

使用测试命令检查语法:

sudo -u logstash /home/logstash-9.1.2/bin/logstash -f /home/logstash-9.1.2/bin/logstash-elasticsearch.conf --config.test_and_exit

以专用用户身份启动:

sudo -u logstash /home/logstash-9.1.2/bin/logstash -f /home/logstash-9.1.2/bin/logstash-elasticsearch.conf

启动效果:
在这里插入图片描述

2.4 kibana查看

kibana访问地址:
http://10.86.97.210:5601/
账号:elastic
密码:test@123456

在这里插入图片描述

3.相关资源

百度网盘:https://pan.baidu.com/s/1DFlQim7xPwx7uEKOGTd85A?pwd=4i76

在这里插入图片描述

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

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

相关文章

多模态RAG赛题实战之策略优化--Datawhale AI夏令营

科大讯飞AI大赛(多模态RAG方向) - Datawhale 项目流程图 1、升级数据解析方案:从 fitz 到 MinerU PyMuPDF(fitz)是基于规则的方式提取pdf里面的数据;MinerU是基于深度学习模型通过把PDF内的页面看成是图片…

09--解密栈与队列:数据结构核心原理

1. 栈 1.1. 栈的简介 栈 是一种 特殊的线性表,具有数据 先进后出 特点。 注意: stack本身 不支持迭代器操作 主要原因是因为stack不支持数据的随机访问,必须保证数据先进后出的特点。stack在CPP库中实现为一种 容器适配器 所谓容器适配器&a…

打造专属 React 脚手架:从 0 到 1 开发 CLI 工具

前言: 在前端开发中,重复搭建项目环境是个低效的事儿。要是团队技术栈固定(比如 React AntD Zustand TS ),每次从零开始配路由、状态管理、UI 组件,既耗时又容易出错。这时候,自定义 CLI 脚手架 就派上…

Python day43

浙大疏锦行 Python day43 import torch import numpy as np import pandas as pd import torchvision import torchvision.transforms as transforms import torch.nn as nn import torch.optim as optim import torch.nn.functional as F from torch.utils.data import Da…

python基于Hadoop的超市数据分析系统

前端开发框架:vue.js 数据库 mysql 版本不限 后端语言框架支持: 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 数据库工具:Navicat/SQLyog等都可以 摘要&…

如何用 COLMAP 制作 Blender 格式的数据集

如何用 COLMAP 制作 Blender 格式的数据集并划分出 transforms_train.json、transforms_val.json 和 transforms_test.json。 一、什么是 Blender 格式数据集? Blender 格式数据集是 Nerf 和 Nerfstudio 常用的输入格式,其核心是包含了相机内外参的 JSON 文件,一般命名为:…

[GESP202309 六级] 2023年9月GESP C++六级上机题题解,附带讲解视频!

本文为GESP 2023年9月 六级的上机题目详细题解和讲解视频,觉得有帮助或者写的不错可以点个赞。 题目一讲解视频 GESP2023年9月六级上机题一题目二讲解视频 题目一:小羊买饮料 B3873 [GESP202309 六级] 小杨买饮料 - 洛谷 题目大意: 现在超市一共有n种饮料&#…

linux 操作ppt

目录 方法1:用 libreoffice 打开PPT文件 播放脚本: 方法2:用 python-pptx 创建和编辑PPT 方法3:其他方法 在Linux中,可以使用Python通过python-pptx库来创建和编辑PPT文件,但直接播放PPT文件需要借助其…

元数据管理与数据治理平台:Apache Atlas 基本搜索 Basic Search

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。 Apache Atlas 框架是一套可扩展的核心基础治理服务,使企业能够有效、高效地满足 Hadoop 中的合规性要求,并支持与整个…

LangChain4J-(1)-Hello World

一、LangChain4J是什么? LangChain4J 是一个专为 Java 生态系统设计的开源框架,用于简化与大语言模型(LLM,如 OpenAI 的 GPT 系列、Google 的 Gemini、Anthropic 的 Claude 等)的集成和交互。它借鉴了 Python 生态中 L…

HTTPS应用层协议-中间攻击人

HTTPS应用层协议-中间攻击人 • Man-in-the-MiddleAttack,简称“MITM 攻击” 确实,在方案 2/3/4 中,客户端获取到公钥 S 之后,对客户端形成的对称秘钥 X 用服务端给客户端的公钥 S 进行加密,中间人即使窃取到了数据&am…

利用 Makefile 高效启动 VIVADO 软件:深入解析与实践

利用 Makefile 高效启动 VIVADO 软件:深入解析与实践 系列文章目录 1、VMware Workstation Pro安装指南:详细步骤与配置选项说明 2、VMware 下 Ubuntu 操作系统下载与安装指南 3.基于 Ubuntu 的 Linux 系统中 Vivado 2020.1 下载安装教程 文章目录利用 …

[前端算法]排序算法

默认情况下,sort() 会将元素转换为字符串,然后按照 Unicode 编码的顺序进行排序: const fruits [apple, banana, cherry, date]; fruits.sort(); console.log(fruits); // 输出: ["apple", "banana", "cherry"…

C#标签批量打印程序开发

C#标签批量打印程序开发(集成Bartender解决方案)一、系统架构设计 1. 核心模块划分 public class LabelPrintingSystem {private IDataLoader _dataLoader; // 数据加载器private ITemplateEngine _templateEngine; // 模板引擎private IPrintControl…

ECC的原理、背景、工作机制和数学基础

ECC的原理、背景、工作机制和数学基础摘要:本文首先详细介绍ECC(Error-Correcting Code,纠错码)的原理,包括背景、工作机制和数学基础。然后,解释ECC在SRAM(Static Random-Access Memory&#x…

计算机网络2-2:物理层下面的传输媒体

目录 导引型传输媒体 同轴电缆 双绞线 光纤 电力线 非导引型传输媒体 无线电波 微波 红外线 可见光 无线电频谱管理机构 导引型传输媒体 同轴电缆 双绞线 光纤 光在光纤中传播的基本原理 电力线 非导引型传输媒体 无线电波 微波 红外线 可见光 LiFi(可见光通信) …

Dify 从入门到精通(第 32/100 篇):Dify 的日志分析与监控

Dify 从入门到精通(第 32/100 篇):Dify 的日志分析与监控 Dify 入门到精通系列文章目录 第一篇《Dify 究竟是什么?真能开启低代码 AI 应用开发的未来?》介绍了 Dify 的定位与优势第二篇《Dify 的核心组件&#xff1a…

【IntelliJ IDEA】修改堆内存

idea卡顿,鼠标漂移修改idea文件打开 idea 安装路径,【bin】目录下【idea64.exe.vmoptions】文件修改【-Xms】最小内存【-Xmx】最大内存-Xms2048m -Xmx9216midea更改内存设置工具栏帮助更改内存设置设置堆大小上限为 文件 设置的最大内存保存并重启Leslie…

Docker与Docker Compose:容器世界的“单兵作战”与“军团指挥官”

在容器化技术的浪潮中,Docker和Docker Compose如同“双子星”,一个专注于单兵作战,一个擅长军团指挥。它们看似相似,却各司其职。对于开发者来说,理解它们的区别不仅能让代码部署事半功倍,更能避免踩坑。本…

进阶向:Python编写自动化邮件发送程序

Python编写自动化邮件发送程序:从零开始详解在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具。据统计,全球每天发送的商业邮件超过30亿封,其中约40%是通过自动化系统发送的。这种功能被广泛应用于多种场景…