微服务日志查询难解决方案-EFK

前言

在微服务项目中,日志查询难是一个常见问题,主要原因包括:日志分散:微服务实例分布在多个节点或容器中,日志存储位置分散。格式不统一:不同服务可能使用不同的日志格式,难以统一查询。调用链复杂:跨服务的调用链难以追踪,导致问题定位困难。日志量大:微服务数量多,日志量巨大,查询效率低。

典型解决方案有:

1. ELK Stack(Elasticsearch + Logstash + Kibana)
Logstash:采集、过滤和转发日志。
Elasticsearch:存储和索引日志。
Kibana:提供日志查询和可视化界面。

适用场景:需要强大的全文搜索和聚合分析能力。

2. EFK Stack(Elasticsearch + Fluentd + Kibana)
Fluentd:作为日志采集和传输代理,替代Logstash。

适用场景:云原生环境,尤其是Kubernetes集群。 

3. Loki + Promtail + Grafana
Promtail:采集和传输日志。
Loki:存储和索引日志。
Grafana:提供日志查询和可视化界面。

适用场景:轻量级日志管理,适合云原生环境。

下面就详细说说EFK解决方案。


EFK 是一个流行的日志管理解决方案,由 ElasticsearchFluentd 和 Kibana 三个核心组件组成。它主要用于收集、存储、分析和可视化日志数据,特别适合微服务和云原生环境。以下是 EFK 的实现步骤:


一、EFK 架构概述

  1. Fluentd:负责日志的采集、过滤和转发。

  2. Elasticsearch:负责日志的存储和索引。

  3. Kibana:提供日志的可视化和查询界面。


二、实现步骤

1. 环境准备

  • Kubernetes 集群(可选):如果是在 Kubernetes 环境中部署,可以使用 Helm 或 YAML 文件快速部署 EFK。

  • 服务器资源:确保有足够的 CPU、内存和存储资源来运行 Elasticsearch 和 Fluentd。


2. 部署 Elasticsearch

Elasticsearch 是日志存储和索引的核心组件。

在 Kubernetes 中部署
  • 使用 Helm 快速部署:

    helm repo add elastic https://helm.elastic.co
    helm install elasticsearch elastic/elasticsearch
  • 或者使用 YAML 文件部署:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:name: elasticsearch
    spec:serviceName: elasticsearchreplicas: 3template:metadata:labels:app: elasticsearchspec:containers:- name: elasticsearchimage: docker.elastic.co/elasticsearch/elasticsearch:7.10.0ports:- containerPort: 9200env:- name: discovery.typevalue: "single-node"  # 单节点模式,生产环境需配置集群

验证 Elasticsearch
  • 访问 Elasticsearch API:

    curl http://<elasticsearch-ip>:9200
  • 返回类似以下内容表示成功:

    {"name" : "node-1","cluster_name" : "elasticsearch","version" : {"number" : "7.10.0"}
    }

3. 部署 Fluentd

Fluentd 负责从各个节点或容器中采集日志,并将其转发到 Elasticsearch。

在 Kubernetes 中部署
  • 使用 Helm 快速部署:

    helm install fluentd elastic/fluentd
  • 或者使用 YAML 文件部署:

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:name: fluentd
    spec:template:metadata:labels:app: fluentdspec:containers:- name: fluentdimage: fluent/fluentd-kubernetes-daemonset:v1.12.0-debian-elasticsearch7-1env:- name: FLUENT_ELASTICSEARCH_HOSTvalue: "elasticsearch"  # Elasticsearch 服务地址- name: FLUENT_ELASTICSEARCH_PORTvalue: "9200"volumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/log
配置 Fluentd
  • Fluentd 的配置文件(fluent.conf)示例:

    <source>@type tailpath /var/log/containers/*.logpos_file /var/log/fluentd-containers.log.postag kubernetes.*format jsontime_key timetime_format %Y-%m-%dT%H:%M:%S.%NZ
    </source><match kubernetes.**>@type elasticsearchhost elasticsearchport 9200logstash_format truelogstash_prefix kubernetes
    </match>

4. 部署 Kibana

Kibana 是日志的可视化工具,用于查询和分析 Elasticsearch 中的日志。

在 Kubernetes 中部署
  • 使用 Helm 快速部署:

    helm install kibana elastic/kibana
  • 或者使用 YAML 文件部署:

    apiVersion: apps/v1
    kind: Deployment
    metadata:name: kibana
    spec:replicas: 1template:metadata:labels:app: kibanaspec:containers:- name: kibanaimage: docker.elastic.co/kibana/kibana:7.10.0ports:- containerPort: 5601env:- name: ELASTICSEARCH_HOSTSvalue: "http://elasticsearch:9200"
访问 Kibana
  • 通过浏览器访问 Kibana:

    http://<kibana-ip>:5601
  • 在 Kibana 中配置索引模式(如 kubernetes-*),然后可以查询和可视化日志。


5. 日志采集与传输

  • 容器日志:Fluentd 会从 /var/log/containers 目录采集 Kubernetes 容器日志。

  • 应用日志:在应用中配置日志输出到标准输出(stdout)或文件,Fluentd 会自动采集。

  • 自定义日志:通过 Fluentd 插件采集自定义日志文件。


6. 日志查询与分析

  • 在 Kibana 中,可以使用 Discover 功能查询日志。

  • 使用 Dashboard 功能创建可视化图表(如错误日志统计、请求延迟分布等)。

  • 使用 Lens 功能进行更高级的数据分析。


三、优化与扩展

1. 性能优化

  • Fluentd:调整缓冲区大小和刷新频率,避免日志丢失。

  • Elasticsearch:增加节点数量,优化分片和副本配置。

  • Kibana:启用缓存,减少查询延迟。

2. 安全性

  • 启用 Elasticsearch 和 Kibana 的身份验证(如 X-Pack 或 OpenDistro)。

  • 使用 TLS 加密日志传输。

3. 高可用性

  • 部署多个 Elasticsearch 节点,组成集群。

  • 使用 Kubernetes 的持久化存储(如 PV/PVC)确保数据不丢失。


四、典型应用场景

  1. 微服务日志管理:集中管理多个微服务的日志。

  2. Kubernetes 日志采集:采集容器和节点的日志。

  3. 实时监控与告警:基于日志内容设置告警规则。


通过以上步骤,可以快速搭建一个高效的 EFK 日志管理系统,解决微服务项目中日志分散、查询难的问题,提升系统的可观测性和运维效率。

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

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

相关文章

为AI聊天工具添加一个知识系统 之90 详细设计之31 Derivation 之5-- 神经元变元用它衍生神经网络

本文要点 要点 Derivation 神经元变元衍生模型&#xff08; 衍生 神经网络&#xff09; 整体上说&#xff0c;它&#xff08; Derivation&#xff09;自己充当 整体无意识原型anestor的代言--作为所有神经网络的 共生环境。Derivation 初始断言了 基于最古老的 自然和逻辑树…

C++引用深度详解

C引用深度详解 前言1. 引用的本质与核心特性1.1 引用概念1.2 核心特性 2. 常引用与权限控制2.1 权限传递规则2.2 常量引用2.3 临时变量保护1. 样例2. 样例3. 测试 三、引用使用场景分析3.1 函数参数传递输出型参数避免多级指针高效传参 3.2 做函数返回值正确使用危险案例 4. 性…

若依框架二次开发——若依介绍、环境部署及更换项目包路径

文章目录 一、若依介绍1、项目简介2、主要特性3、技术选型4、内置功能5、文件结构6、配置文件7、核心技术介绍二、环境部署1、准备工作2、运行系统3、必要配置4、部署系统三、更换项目包路径1、更换目录名称2、更换顶级目录中的pom.xml3、更换项目所有包名称4、修改application…

本地部署Deepseek R1

使用Ollama open-webui部署Deepseek R1 一、安装Ollama 官网地址&#xff1a;https://ollama.com/&#xff0c;点击下载按钮选择windows版本。并安装 打开命令提示符输入ollama&#xff0c;出现一下提示命令表示ollama安装完成 二、使用Ollama下载deepseek R1不同模型 打开o…

速度超越DeepSeek!Le Chat 1100tok/s闪电回答,ChatGPT 4o和DeepSeek R1被秒杀?

2023年&#xff0c;当全球科技界还在ChatGPT引发的AI狂潮中沉浮时&#xff0c;一场来自欧洲的"静默革命"正悄然改变游戏规则。法国人工智能公司Mistral AI推出的聊天机器人Le Chat以"比ChatGPT快10倍"的惊人宣言震动业界&#xff0c;其背后承载的不仅是技术…

MATLAB 生成脉冲序列 pulstran函数使用详解

MATLAB 生成脉冲序列 pulstran函数使用详解 目录 前言 一、参数说明 二、示例一 三、示例二 总结 前言 MATLAB中的pulstran函数用于生成脉冲序列&#xff0c;支持连续或离散脉冲。该函数通过将原型脉冲延迟并相加&#xff0c;生成脉冲序列&#xff0c;适用于信号处理和系统…

ASP.NET Core的贫血模型与充血模型

目录 概念 需求 贫血模型 充血模型 总结 概念 贫血模型&#xff1a;一个类中只有属性或者成员变量&#xff0c;没有方法。充血模型&#xff1a;一个类中既有属性、成员变量&#xff0c;也有方法。 需求 定义一个类保存用户的用户名、密码、积分&#xff1b;用户必须具有…

机器学习(李宏毅)——self-Attention

一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记&#xff0c;感谢台湾大学李宏毅教授的课程&#xff0c;respect&#xff01;&#xff01;&#xff01; 二、大纲 何为self-Attention&#xff1f;原理剖析self-Attention VS CNN、RNN、GNN 三、何为self-Attenti…

RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具

前期准备 首先&#xff0c;我们需要下载 Ollama 以及配置相关环境。 Ollama 的 GitHub仓库 &#xff08;https://github.com/ollama/ollama&#xff09;中提供了详细的说明&#xff0c;简单总结如下: Step1&#xff1a;下载 Ollama 下载&#xff08;https://ollama.com/dow…

【数据结构】双向链表(真正的零基础)

链表是一种物理存储单元上非连续、非顺序的存储结构。数据元素的逻辑顺序是通过指针的链接来实现的&#xff01;在上篇我们学习了单向链表&#xff0c;而单向链表虽然空间利用率高&#xff0c;插入和删除也只需改变指针就可以达到&#xff01;但是我们在每次查找、删除、访问..…

网络编程-day5-sqlite3数据库

思维导图 服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h>…

Spring AI 介绍

文章来源&#xff1a;AI 概念 (AI Concepts) _ Spring AI1.0.0-SNAPSHOT中文文档(官方文档中文翻译)|Spring 教程 —— CADN开发者文档中心 本节介绍 Spring AI 使用的核心概念。我们建议仔细阅读它&#xff0c;以了解 Spring AI 是如何实现的。 模型 AI 模型是旨在处理和生成…

372_C++_当有多个通道,开启不同告警的同一种的开关时,限制该开关的打开数量(比如视频上传开关)

GetCloudUploadNum函数 GetCloudUploadNum 函数主要用于统计和控制云端视频上传的通道数量,其主要功能如下: 功能目的// 检查每个通道的云端视频上传配置,并统计启用云端上传的通道总数 int CloudUploadNum = 0; bool InValidCloudUploadChn[MAX_CHN_NUMPARA] = {};

ffmpeg -demuxers

1. ffmpeg -demuxers -loglevel quiet 显示ffmpeg支持的解复用器 2. 输出 选取部分输出结果 File formats: D. Demuxing supported .E Muxing supported D 3dostr 3DO STR D 4xm 4X Technologies D aa Audible AA format files D aac raw ADTS AAC (Advanced Audio C…

【Elasticsearch】监控与管理:集群监控指标

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

黑马Redis详细笔记(实战篇---短信登录)

目录 一.短信登录 1.1 导入项目 1.2 Session 实现短信登录 1.3 集群的 Session 共享问题 1.4 基于 Redis 实现共享 Session 登录 一.短信登录 1.1 导入项目 数据库准备 -- 创建用户表 CREATE TABLE user (id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,phone …

大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡

大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡 背景 前端开发接口请求&#xff0c;调试&#xff0c;联调&#xff0c;接入数据&#xff0c;前端必不可少工具&#xff0c;postman是一个非常好…

每日十个计算机专有名词(5)(读deepseek开发文档所记)

SDK&#xff08;Software Development Kit&#xff09; 中文意思是“软件开发工具包”。简单来说&#xff0c;SDK就是一套为特定软件包、框架、硬件平台或操作系统开发的工具集合&#xff0c;它包含了开发软件所需要的各种工具、库、示例代码和文档。 以一个通俗的类比来解释…

自学人工智能大模型,满足7B模型的训练和微调以及推理,预算3万,如何选购电脑

如果你的预算是 3万元人民币&#xff0c;希望训练和微调 7B 参数规模的人工智能大模型&#xff08;如 LLaMA、Mistral 等&#xff09;&#xff0c;你需要一台高性能的深度学习工作站。在这个预算范围内&#xff0c;以下是推荐的配置&#xff1a; 1. 关键硬件配置 (1) GPU (显卡…

开源身份和访问管理方案之keycloak(一)快速入门

文章目录 什么是IAM什么是keycloakKeycloak 的功能 核心概念client管理 OpenID Connect 客户端 Client Scoperealm roleAssigning role mappings分配角色映射Using default roles使用默认角色Role scope mappings角色范围映射 UsersGroupssessionsEventsKeycloak Policy创建策略…