当前位置: 首页 > news >正文

ELK日志收集

目前,各个微服务系统的日志都保存在各自指定的目录中,如果这些微服务部署在不同的服务器上,那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题,我们可以借助ELK来收集各个微服务系统的日志并集中展示。

ELK即Elasticsearch、Logstash和Kibana首字母缩写。Elasticsearch用于存储日志信息,Logstash用于收集日志,Kibana用于图形化展示。

搭建ELK环境

在Windwos上搭建ELK环境较为麻烦,这里我选择在CentOS7 上通过Docker来搭建ELK环境,对Docker基本使用不熟悉的同学可以参考 Docker基础教程。

在此之前,我们需要准备一台CentOS 7虚拟机。推荐大家使用Vagrant来创建,创建教程可以参考:使用Vagrant创建CentOS虚拟机。这里分享下我的Vagrantfile配置:

 Vagrant.configure("2") do |config|config.vm.box = "centos7"config.vm.network "private_network", ip: "192.168.33.10"config.vm.hostname = "febs"config.vm.provider "virtualbox" do |v|v.memory = 6144v.cpus = 2endend

上面配置了虚拟机的IP地址为192.168.33.10,hostname为febs,内存为6*1024MB(6144MB即6GB),cpu核心数为2。

安装docker

在CMD终端使用命令vagrant ssh连接虚拟机后,运行sudo -s切换到root用户,下面的示例都是用root用户完成的。

在Linux中安装Docker可以参考官方文档:CentOS | Docker Docs,主要分为下面这几步:

  1. 卸载旧版本Docker(如果系统之前没安装过Docker,可以跳过):

 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine
  1. 安装Docker所需要的包:

 yum install -y yum-utils \device-mapper-persistent-data \lvm2
  1. 设置稳定的仓库:

 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装最新版的Docker引擎:

 yum install docker-ce docker-ce-cli containerd.io
  1. 启动Docker:

 systemctl start docker

查看是否安装成功:

安装Docker Compose

安装好Docker后,我们接着安装Docker Compose,官方安装教程 Install | Docker Docs,主要步骤为:

  1. 获取Docker Compose的最新稳定版本:

 curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. 对二进制文件授予可执行权限:

 chmod +x /usr/local/bin/docker-compose
  1. 创建link:

 ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

查看是否安装成功:

Docker Compose搭建ELK

在搭建ELK之前,我们需要做一些准备工作。

正如官方所说的那样 Virtual memory | Elasticsearch Guide [8.15] | Elastic,Elasticsearch默认使用mmapfs目录来存储索引。操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存:

 sysctl -w vm.max_map_count=262144

创建Elasticsearch数据挂载路径:

 mkdir -p /febs/elasticsearch/data

对该路径授予777权限:

 chmod 777 /febs/elasticsearch/data

创建Elasticsearch插件挂载路径:

 mkdir -p /febs/elasticsearch/plugins

创建Logstash配置文件存储路径:

 mkdir -p /febs/logstash

在该路径下创建logstash-febs.conf配置文件(没有安装vim的话可以使用yum install vim命令安装):

 vim /febs/logstash/logstash-febs.conf

内容如下所示:

 input {tcp {mode => "server"host => "0.0.0.0"port => 4560codec => json_lines}}output {elasticsearch {hosts => "es:9200"index => "febs-logstash-%{+YYYY.MM.dd}"}}

创建ELK Docker Compose文件存储路径:

 mkdir -p /febs/elk

在该目录下创建docker-compose.yml文件:

 vim /febs/elk/docker-compose.yml

内容如下所示:

 version: '3'services:elasticsearch:image: elasticsearch:6.4.1container_name: elasticsearchenvironment:- "cluster.name=elasticsearch" #集群名称为elasticsearch- "discovery.type=single-node" #单节点启动- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #jvm内存分配为512MBvolumes:- /febs/elasticsearch/plugins:/usr/share/elasticsearch/plugins- /febs/elasticsearch/data:/usr/share/elasticsearch/dataports:- 9200:9200kibana:image: kibana:6.4.1container_name: kibanalinks:- elasticsearch:es #配置elasticsearch域名为esdepends_on:- elasticsearchenvironment:- "elasticsearch.hosts=http://es:9200" #因为上面配置了域名,所以这里可以简写为http://es:9200ports:- 5601:5601logstash:image: logstash:6.4.1container_name: logstashvolumes:- /febs/logstash/logstash-febs.conf:/usr/share/logstash/pipeline/logstash.confdepends_on:- elasticsearchlinks:- elasticsearch:esports:- 4560:4560

切换到/febs/elk目录下,使用如下命令启动:

 docker-compose up -d

第一次启动的时候,Docker需要拉取ELK镜像,过程可能稍慢,耐心等待即可。成功启动后,观察容器运行情况:

145.png

三个容器都已经启动成功。

Logstash中安装json_lines插件

使用如下命令进入到Logstash容器中:

 docker exec -it logstash /bin/bash

切换到/bin目录,安装json_lines插件,然后退出:

使用浏览器访问http://192.168.33.10:5601便可以看到Kibana管理界面:

修改微服务日志配置

就目前微服务模块来说,我们比较关注febs-auth、febs-gateway、febs-server-system和febs-server-test模块的日志,所以我们分别在febs-auth、febs-gateway和febs-server模块的pom里引入Logstash依赖:

 <dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>6.1</version></dependency>

然后在febs-auth、febs-gateway、febs-server-system和febs-server-test模块的日志配置文件logback-spring.xml里添加如下配置:

 <!--输出到 logstash的 appender--><appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>192.168.33.10:4560</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/></appender>​......<root level="info">......<appender-ref ref="logstash" /></root>

192.168.33.10:4560对应我们刚刚搭建的Logstash地址。

演示

依次启动febs-register、febs-gateway、febs-auth、febs-server-system和febs-server-test模块,然后回到Kibana管理界面创建Kinaba Index Patterns:

在Index pattern里输入我们在logstash配置文件logstash-febs.confoutput.index指定的值febs-logstash-*

点击Next Step,在下拉框里选择@timestamp

最后点击Create Index Pattern按钮完成创建。

使用PostMan获取令牌:

然后发送一笔localhost:8301/test/hello?name=夏天请求:

在Kibana里搜索这笔日志:

日志收集成功。

整合ELK后,我们的系统架构图如下所示:

相关文章:

ELK日志收集

目前&#xff0c;各个微服务系统的日志都保存在各自指定的目录中&#xff0c;如果这些微服务部署在不同的服务器上&#xff0c;那么日志文件也是分散在各自的服务器上。分散的日志不利于我们快速通过日志定位问题&#xff0c;我们可以借助ELK来收集各个微服务系统的日志并集中展…...

常见docker命令

1、查询已安装docker中某个image依赖包 docker run -it --rm --name my-python-container 【python37:v001】 /bin/bash 【】改成自己环境名字 docker run -it --name lane python37_test:v006 /bin/bash lane是容器名字&#xff0c;python37_test:v006 是镜像名 开启容器 do…...

测试新人刚入行,该如何规划以后的发展路径?

作为一个刚入行的测试新人&#xff0c;应该如何规划自己的职业发展路径&#xff1f;如何规划自己的技术路线&#xff1f;软件测试的段位都有哪些&#xff1f;他们之间的薪资差异如何&#xff1f; 听说这些问题&#xff0c;是目前想要入行软件测试的同学们最关心的。那么我们今…...

Boosting Object Detection with Zero-Shot Day-Night Domain Adaptation

摘要&#xff1a;低亮度场景检测是一个小众且重要的方向&#xff0c;首先在于数据集和过往的研究都集中在光照充足的环境下&#xff0c;其次如果使用传统的训练方法的话由于训练难度大&#xff0c;模型效果也不会很好&#xff0c;有幸的是&#xff0c;现在关于低亮度的研究已经…...

Chromium html<lable>c++接口定义

HTML <label> 元素&#xff08;标签&#xff09;表示用户界面中某个元素的说明。 1、<label> 在html_tag_names.json5中接口定义&#xff1a; &#xff08;third_party\blink\renderer\core\html\html_tag_names.json5&#xff09; {name: "label",inte…...

QT中中文显示乱码问题

在VS2013中用QT开发GUI应用程序&#xff0c;Qt中显示中文乱码 一&#xff1a; //解决QT中中文显示乱码问题 #pragma execution_character_set("utf-8") 二&#xff1a;在main函数中添加以下代码&#xff1a; #include <QTextCodec>void main() {QTextCod…...

[面试常见]Javascript基础知识

#1024程序员节|征文# Object.assign 和对象扩展运算符有什么区别?是深拷贝还是浅拷贝? 都进行浅拷贝&#xff0c;只赋值对象的第一层属性&#xff0c;而不会递归复制整个对象结构 **const mergedObj Object.assign({},obj1,obj2) JavaScript 中 Map 和 Object 的区别是什么?…...

使用注解@ExcelIgnoreUnannotated实现了在导出 Excel 时忽略没有被标注的字段

ExcelIgnoreUnannotated 注解用于在使用 Apache POI 或其他 Excel 处理库时&#xff0c;指示在导出 Excel 时忽略没有被标注的字段。这意味着只有被特定注解&#xff08;如 ExcelProperty&#xff09;标注的字段会被处理和导出。 作用 简化导出过程&#xff1a;只导出需要的字…...

线程的同步

目录 引入 认识条件变量 快速认识接口​编辑 认识条件变量​编辑 测试代码​编辑 生产消费模型 为何要使用生产者消费者模型 理解 编写生产消费模型 BlockingQueue 单生产单消费 多生产多消费 引入 同步&#xff1a;在保证数据安全的前提下&#xff0c;让线程…...

【启明智显分享】ZX7981PG/ZX7981PM融入官方OpenWrt,启明智显SDK/官方OpenWrt任由选择!

好消息&#xff01;好消息&#xff01;启明智显ZX7981PG和ZX7981PM正式融入官方 OpenWrt 的大家庭啦&#xff01;现在开发者不仅可以基于启明智显的SDK进行二次开发&#xff0c;还可以直接应用官方OpenWrt以及我们的开源资料进行开发&#xff01; 借助OpenWrt的强大生态&…...

如何用java发送包含表格形式的邮件

问题&#xff1a; 如何用java发送包含表格形式的邮件&#xff1f; 方法&#xff1a; 发用freemaker工具来替换html的表格变量&#xff0c;从而动态生成了html。然后再发送这个html格式&#xff08;不能用纯文本&#xff09;文本即可。 优化流程&#xff1a; 1、准备模板&#x…...

讲个故事:关于一次接口性能优化的心里路程

这是一个程序猿写的第一个故事&#xff0c;请各位懂行的客官静下心来&#xff0c;慢慢品读。就知道我为什么要单独写一个文章来记录这次过程了&#xff0c;因为实在是太坎坷了...... 背景介绍 近期项目投产时遇到一个问题&#xff0c;投产后在验证时发现大部分用户系统登…...

Centos7升级到openssh9.9

openssh9.9 是2024.9.20出的最新版ssh。因为客户扫描出一大堆centos7的漏洞&#xff0c;全是这个openssh的&#xff0c;好多补丁&#xff0c;所以索性升级到最新版。 需要自己制作rpm包&#xff0c;这个我是不懂&#xff0c;照这个来&#xff1a; Linux服务器升级openssh9.9最…...

使用 STM32F407 串口实现 485 通信

准备工作 了解485通信基本概念与原理&#xff1a;RS485通信详解_485通讯de接什么口-CSDN博客 安装编译软件&#xff1a;keil uVision 5.6 软件资料&#xff1a;STM32CubeF4 固件包&#xff0c;正点原子RS485通信例程 ​​​​​​​参考视频&#xff1a;第26讲 基础篇-新建H…...

基于NERF技术重建学习笔记

NeRF&#xff08;Neural Radiance Fields&#xff09;是一种用于3D场景重建的神经网络模型&#xff0c;能够从2D图像生成逼真的3D渲染效果。它将场景表征为一个连续的5D函数&#xff0c;利用了体积渲染和神经网络的结合&#xff0c;通过学习光线穿过空间时的颜色和密度来重建场…...

webView 支持全屏播放

webView 支持全屏播放 直接上代码 public class CustomFullScreenWebViewClient extends WebChromeClient {WebView webView;Context context;/*** 视频全屏参数*/protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS new FrameLayout.LayoutParams(ViewG…...

QGIS之三十二DEM地形导出三维模型gltf

效果 1、准备数据 (1)dem.tif (2)dom.tif 2、qgis加载dem和dom数据 3、安装插件 插件步骤可以参考这篇文章 QGIS之二十四安装插件 安装了Qgis2threejs插件,结果...

【python爬虫】携程旅行景点游客数据分析与可视化

一.选题背景 随着旅游业的快速发展&#xff0c;越来越多的人选择通过互联网平台预订旅行产品&#xff0c;其中携程网作为国内领先的在线旅行服务提供商&#xff0c;拥有大量的旅游产品和用户数据。利用爬虫技术可以获取携程网上各个景点的游客数据&#xff0c;包括游客数量、游…...

python实现onvif协议下控制摄像头变焦,以及融合人形识别与跟踪控制

#1024程序员节 | 征文# 这两天才因为项目需要&#xff0c;对网络摄像头的视频采集以及实现人形识别与跟踪技术。对于onvif协议自然起先也没有任何的了解。但是购买的摄像头是SONY网络头是用在其他地方的。因为前期支持探究项目解决方案&#xff0c;就直接拿来做demo测试使用。 …...

【Vue】Vue3.0(十四)接口,泛型和自定义类型的概念及使用

上篇文章&#xff1a; 【Vue】Vue3.0&#xff08;十三&#xff09;中标签属性ref&#xff08;加在普通标签上、加在组件标签上&#xff09;、局部样式 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&…...

WordPress集成Claude AI:构建智能内容创作技术栈的实践指南

1. 项目概述与核心价值最近在折腾个人博客和内容创作工具链&#xff0c;发现了一个挺有意思的GitHub项目&#xff1a;mvtandas/wordpress-claude-stack。这名字一看就很有料&#xff0c;直接把WordPress和Claude这两个看似不搭界的玩意儿给“堆”到了一起。作为一个常年混迹在内…...

VSCode写Verilog效率翻倍:除了语法检查,再教你用Python插件自动生成模块例化

VSCode写Verilog效率翻倍&#xff1a;Python插件自动化实战指南 在FPGA开发中&#xff0c;Verilog代码的重复性劳动往往消耗工程师大量时间。我曾在一个图像处理项目中被模块例化折磨得焦头烂额——手动编写30多个相同结构的FIFO例化代码&#xff0c;不仅容易出错&#xff0c;后…...

Claude Code 多项目 API 配置管理实践

背景 Claude Code 的项目级配置文件 .claude/settings.json 中包含 API 提供商相关的环境变量。当同时维护多个项目&#xff0c;每个项目使用不同的 API 提供商&#xff08;Anthropic 直连、OpenRouter 代理、自建转发等&#xff09;时&#xff0c;每次切换项目都需要手动修改…...

Happy Island Designer完整指南:免费在线岛屿设计工具终极教程

Happy Island Designer完整指南&#xff1a;免费在线岛屿设计工具终极教程 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动物森友会》(Animal C…...

独立开发者如何借助taotoken模型广场低成本验证产品创意

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken模型广场低成本验证产品创意 对于资源有限的独立开发者或小型工作室而言&#xff0c;验证一个需要AI功…...

基于WebSocket的Web即时通讯后端架构设计与实战部署指南

1. 项目概述&#xff1a;一个面向开发者的Web即时通讯解决方案最近在折腾一个内部协作工具&#xff0c;需要集成一个稳定、可控且能深度定制的即时通讯模块。市面上成熟的IM SDK很多&#xff0c;但要么是黑盒&#xff0c;出了问题排查困难&#xff1b;要么是功能臃肿&#xff0…...

基于OpenClaw与TDX API的智能停车查询技能开发实战

1. 项目概述&#xff1a;一个能听懂人话的停车位“雷达”如果你和我一样&#xff0c;经常在台北、新北这些城市里开车找车位&#xff0c;那你一定懂那种绕了半小时、看着导航APP上一个个“车位已满”的绝望感。市面上的停车APP不少&#xff0c;但要么信息更新慢&#xff0c;要么…...

AI信息摘要工具:从数据采集到智能推送的完整实践指南

1. 项目概述&#xff1a;一个AI驱动的每日信息摘要工具最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“ai-daily-digest”。光看名字&#xff0c;你大概能猜到它的核心功能&#xff1a;利用人工智能技术&#xff0c;自动为你生成每日的信息摘要。作为一个经常被信息洪流…...

书匠策AI课程论文一键生成?我替你们踩了一遍,真香预警!

各位论文困难户们&#xff0c;先别划走&#xff01; 今天不聊别的&#xff0c;就聊一个让我这个老博主都直呼"离谱"的东西——书匠策AI的课程论文功能。我知道你们一看到AI写论文就条件反射觉得是割韭菜&#xff0c;但这次&#xff0c;我是真的被圈粉了。 先说结论…...

如何快速配置ComfyUI ControlNet预处理器:完整安装与使用指南

如何快速配置ComfyUI ControlNet预处理器&#xff1a;完整安装与使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux ComfyUI ControlNet Aux预处理器…...