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

分布式ELK日志监控系统环境搭建

文章目录

    • 1.1为什么需要监控项目日志
    • 1.2ELK日志监控系统介绍
    • 1.3ELK的工作流程
    • 1.4ELK环境搭建
      • 1.4.1Elasticsearch的安装
      • 1.4.2Kibana的安装
      • 1.4.3Logstash的安装
      • 1.4.4数据源配置
      • 1.4.5日志监测测试
      • 1.4.6日志数据可视化展示

1.1为什么需要监控项目日志

项目日志是记录项目运行过程中产生的事件和信息的重要工具,对于项目管理来说,监控项目日志的重要性体现在以下几个方面:

  1. 提升项目管理效率:监控项目日志可以及时发现和解决问题,从而避免问题影响到项目的进度和质量,减少管理成本。
  2. 保证项目质量:通过监控项目日志,可以实时了解项目进展情况,及时调整和优化项目进度和工作流程,提升项目质量。
  3. 维护项目安全:监控项目日志可以发现并防范项目安全问题,及时处理安全事件,保护项目的安全性和稳定性。
  4. 支持决策制定:通过对项目日志的分析和研究,可以及时发现项目中存在的问题和障碍,以便更好地制定决策并调整项目计划。

总之,监控项目日志是项目管理中一个重要的环节,在保证项目质量、提高项目效率、维护项目安全以及制定决策方面都有着关键的作用。

1.2ELK日志监控系统介绍

ELK是一个流行的日志管理和监控解决方案,它由三个主要组件组成:Elasticsearch、Logstash和Kibana。这三款组件都是elastic旗下的产品。官网地址:欢迎来到 Elastic — Elasticsearch 和 Kibana 的开发者 | Elastic

  • Elasticsearch是一个分布式搜索和分析引擎,将日志数据存储在分布式索引中,支持快速搜索、聚合和分析。Elasticsearch还提供了高可用性和可扩展性,支持水平扩展和负载平衡。

image-20230322175251493

  • Logstash是一个日志数据采集和转换工具,用于收集来自各种来源的数据,并将其转换为可用于Elasticsearch的标准格式。Logstash能够处理多种协议和格式,包括日志文件、数据库、平面文件等数据源,提供针对数据的过滤、清洗和变换操作。

image-20230322175224228

  • Kibana是可视化和展示工具,用于查询、分析和可视化存储在Elasticsearch中的数据。Kibana的用户界面简单直观,支持定制仪表板和图表,以及可视化分析和查询数据。

image-20230322175337068

总体来说,ELK是一个高度可扩展、快速、灵活的日志管理和监控系统,它使得搜集、处理、展现和掌握大量的日志数据变得简单化和直观化,方便用户对计算机系统中的问题进行监控和排错。

1.3ELK的工作流程

在这里插入图片描述

  1. 数据源产生日志,将日志传输到Logstash

  2. Logstash对日志进行过滤、解析和转换,将其标准化(通常为JSON数据格式)并发送给Elasticsearch进行存储。

  3. Elasticsearch将数据存储在分布式索引中,支持快速搜索、聚合和分析。

  4. Kibana查询和分析分布式索引中的数据,并通过仪表板和可视化图表展示数据结果。

1.4ELK环境搭建

1.4.1Elasticsearch的安装

  1. 拉取镜像
docker pull elasticsearch:7.17.3
  1. 创建挂载目录
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/data
// 任何远程机器都能访问es
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
chmod -R 777 /mydata/elasticsearch/ 改变文件权限

image-20230110165356531

  1. 创建elasticsearch容器实例
docker run -d -p 9200:9200 -p 9300:9300 \
--restart=always \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx512m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
--name elasticsearch elasticsearch:7.4.2

命令解释:

-e “discovery.type=single-node”:使es单节点运行

-e ES_JAVA_OPTS=“-Xms64m -Xmx512m”:设置es占用的内存

  1. 设置es密码
  2. 进入到elasticsearch.yml的挂载目录,添加以下内容
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
  1. 重启es容器并进入es容器

  2. 进入容器后执行以下命令

./bin/elasticsearch-setup-passwords interactive

​ 依次输入密码

  1. 重启es容器

  2. 开放对应的端口(如果是与服务器同时也要开启安全组规则

firewall-cmd --zone=public --add-port=9200/tcp --permanent
systemctl restart firewalld.service
firewall-cmd --zone=public --query-port=9200/tcp
  1. 访问9200端口测试

1.4.2Kibana的安装

  1. 创建挂载目录和文件
mkdir -p /mydata/kibana
cd /mydata/kibana
touch kibana.yml
  1. 配置配置文件
server.port: 5601 
#主机地址,可以是ip,主机名
server.host: 0.0.0.0
elasticsearch.hosts: ["http://elasticsearch的ip地址:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "es密码"
#汉化
i18n.locale: "zh-CN"
  1. 创建kibana容器实例
docker run -d -p 5601:5601 \
--restart=always \
-v /mydata/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml \
--name kibana \
kibana:7.4.2
  1. 开放对应端口(如果是与服务器同时也要开启安全组规则
firewall-cmd --zone=public --add-port=5601/tcp --permanent
systemctl restart firewalld.service
  1. 访问对应的5601端口

image-20230323110843994

1.4.3Logstash的安装

  1. 拉取Logstash镜像
docker pull logstash:7.17.3
  1. /mydata/logstash目录下创建logstash的配置文件logstash.conf,写入以下配置:其中index是索引的名称,我们使用“xha-”前缀加时间来生成每天的索引。
input {stdin { } tcp {mode => "server"host => "0.0.0.0"port => 5044codec => json_lines}
}output {stdout {codec => rubydebug}elasticsearch {hosts => "elasticsearch的ip地址:9200"index => "xha-%{+YYYY.MM.dd}"user => "elastic"password => "z@jTs87!"}
}
  1. 启动容器
docker run -d --name logstash -p 5043:5043 -p 5044:5044  \
-e ES_JAVA_OPTS="-Xms125m -Xmx512m" \ 
--privileged=true \
--restart=always \
-v /mydata/logstash/logstash.yml:/usr/share/logstash/pipeline/logstash.yml \
logstash:7.17.3	
  1. 进入logstash容器,安装json_lines所需的插件
docker exec -it logstash /bin/bash 
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines 
  1. 重启logstash

1.4.4数据源配置

这里采用分布式微服务项目测试,分有多个模块,其中含有common模块,common模块作为公共模块在其他模块都有引入。

  1. common模块中添加logstashlogback依赖
        <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId></dependency><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.3</version></dependency>
  1. common模块的resources目录下创建logback-spring.xml文件,写入以下配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><include resource="org/springframework/boot/logging/logback/base.xml"/><include resource="org/springframework/boot/logging/logback/defaults.xml"/><!--获取springboot的yml配置信息--><springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/><springProperty scope="context" name="LOGSTASH_HOST" source="logstash.host" defaultValue="default"/><springProperty scope="context" name="LOGSTASH_PORT" source="logstash.port" defaultValue="default"/><springProperty scope="context" name="LOG_HOME" source="logstash.path" defaultValue="/mydata/logstash"/><!--输出到控制台--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><withJansi>false</withJansi><encoder><!--<pattern>%d %p (%file:%line)- %m%n</pattern>--><!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消x`x`息    %n:是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) :%msg%n</pattern><charset>UTF-8</charset></encoder></appender><springProfile name="dev,test"><!--  日志发送至logstash  --><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>${LOGSTASH_HOST:- }:${LOGSTASH_PORT:- }</destination><!-- encoder is required --><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"><!-- 在elasticsearch的index中追加applicationName字段  --><customFields>{"applicationName":"${applicationName}"}</customFields></encoder></appender></springProfile><!-- 按照每天生成日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--日志文件输出的文件名--><FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!--日志文件保留天数--><MaxHistory>30</MaxHistory></rollingPolicy><encoder charset="UTF-8" class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern></encoder><!--日志文件最大的大小--><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><MaxFileSize>10MB</MaxFileSize></triggeringPolicy></appender><!-- 日志输出级别 --><!-- 线上环境,日志配置 --><springProfile name="prod"><root level="INFO"><appender-ref ref="LOGSTASH"/></root></springProfile><!-- 本地、开发环境,日志配置 可以写logback支持的所有节点 --><springProfile name="dev,test"><root level="INFO"><appender-ref ref="LOGSTASH"/><appender-ref ref="console"/></root></springProfile></configuration>

image-20230323125010482

  1. 对于以下配置信息,在各个模块添加application.yaml配置文件,写入logstash配置信息

image-20230323132121258

logstash:host: logstash服务ip地址port: 5043# 定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径path: /mydata/logstash

1.4.5日志监测测试

  1. 启动一个模块,控制台打印日志信息

image-20230323132810079

  1. 查看索引管理,以天为单位生成索引:

image-20230323133308149

image-20230323133251698

  1. 查看kibana当中的Discover,查看命中记录

image-20230323133016149

  1. 查看命中记录的详细信息

image-20230323143103844

1.4.6日志数据可视化展示

  1. 创建新的仪表板

image-20230327150100802

  1. 在仪表板中添加新的可视化

image-20230327150311417

  1. 点击创建新的可视化
image-20230327150346475
  1. 选择创建的可视化类型,这里选择饼图
image-20230327150527240
  1. 选择索引

image-20230327150556275

  1. 添加切片

image-20230327150636117

  1. 选择词聚合

image-20230327150709868

  1. 再选择字段,点击运行

image-20230327150806907

  1. 可视化生成完成

image-20230327150905798

  1. 保存并添加到仪表板

image-20230327150956994

image-20230327151016036

  1. 日志等级信息展示

选择可选字段进行过滤

image-20230327153916312

image-20230327153938453

保存为Search

image-20230327154003510

​ 在仪表板中进行添加

image-20230327155132051

相关文章:

分布式ELK日志监控系统环境搭建

文章目录1.1为什么需要监控项目日志1.2ELK日志监控系统介绍1.3ELK的工作流程1.4ELK环境搭建1.4.1Elasticsearch的安装1.4.2Kibana的安装1.4.3Logstash的安装1.4.4数据源配置1.4.5日志监测测试1.4.6日志数据可视化展示1.1为什么需要监控项目日志 项目日志是记录项目运行过程中产…...

【数据结构刷题集】链表经典习题

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;数据结构刷题集&#x1f50a;本专栏涉及到题目是数据结构专栏的补充与应用&#xff0c;只更新相关题目&#xff0c;旨在帮助提高代码熟练度&#x…...

JavaSE(3.27) 异常

学习不要眼高手低&#xff0c;学习是一点点积累的。即使你现在很菜&#xff0c;坚持学一个学期不会差的&#xff01;只要花时间学习&#xff0c;每天都是进步的&#xff0c;这些进步可能你现在看不到&#xff0c;但是不要小瞧了积累效应&#xff0c;30天&#xff0c;60天&#…...

【看门狗】我说的是定时器不是狗啊

单片机在运行中死机了&#xff0c;你或许只能按2下电源键&#xff08;重启&#xff09;或1下复位键。 这里简单说一下重启和复位&#xff1a; 从RESET引脚复位&#xff0c;只有MCU复位。而外设看情况&#xff0c;有的可能会有MCU同步复位或者重新初始化。也有可能一些保持复位…...

24万字智慧城市顶层设计及智慧应用解决方案

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除。部分资料内容&#xff1a; 4.8 机房消防系统 4.8.1消防系统概况 根据本工程机房消防系统的特殊要求&#xff0c;整个消防系统由火灾报警系统、消防联动系统和气体灭火系统三部…...

跨境电商卖家工具——跨境卫士内容介绍

一、简介 跨境卫士是一款集合多种跨境电商工具的综合软件&#xff0c;由知名跨境电商服务商跨境通开发。跨境卫士可以帮助卖家完成海外物流管理、订单处理、报关报税、市场营销等多项任务&#xff0c;同时还提供数据分析、客户服务、运营管理等一系列支持功能&#xff0c;方便卖…...

Redis 常用基本命令

关于 redis 的常用基本命令 目录 关于 redis 的常用基本命令 1. 关于 key 的操作 2. HyperLogLog 求近似基数 3. 排序相关命令 4. Limit 限制查询 1. 关于 key 的操作 判断某个 key 是否存在 # 格式: exists key exists name# 存在name 返回1 # 不存在name 返回0 查找或…...

【Leetcode】队列的性质与应用

文章目录225. 用队列实现栈示例&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;622. 设计循环队列示例&#xff1a;提示&#xff1a;分析&#xff1a;题解&#xff1a;225. 用队列实现栈 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&…...

开启新航路,拓尔思发力AIGC市场 | 爱分析调研

2022年&#xff0c;随着AI聊天机器人GhatGPT在世界范围内持续火爆&#xff0c;极具创意、表现力、个性化且能快速迭代的AIGC技术成功破圈&#xff0c;成为全民讨论热点。 AIGC是指在确定主题下&#xff0c;由算法模型自动生成内容&#xff0c;包括单模态内容如文本、图像、音频…...

RK3568平台开发系列讲解(调试篇)Linux 内核的日志打印

🚀返回专栏总目录 文章目录 一、dmseg 命令二、查看 kmsg 文件三、调整内核打印等级沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将 Linux 内核的日志打印进行梳理。 一、dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息,该命令的具体使用方法如下所…...

hadoop之MapReduce框架原理

目录 MapReduce框架的简单运行机制&#xff1a; Mapper阶段&#xff1a; InputFormat数据输入&#xff1a; 切片与MapTask并行度决定机制&#xff1a; job提交过程源码解析&#xff1a; 切片逻辑&#xff1a; 1&#xff09;FileInputFormat实现类 进行虚拟存储 &#x…...

JavaEE简单示例——SpringMVC的简单数据绑定

简单介绍&#xff1a; 在前面我们介绍过如何将我们自己创建的类变成一个servlet来处理用户发送的请求&#xff0c;但是在大多数的时候&#xff0c;我们在请求 的时候会携带一些参数&#xff0c;而我们现在就开始介绍我们如何在Java类中获取我们前端请求中携带的参数。首先&…...

耗时的同步请求自动转异步请求

耗时的同步请求自动转异步请求问题描述问题处理代码实现问题描述 现在在项目中碰到一个情况&#xff0c;导出数据到excel&#xff0c;在数据量比较下的时候直接下载&#xff0c;在数据量比较大时保存到服务的文件列表&#xff0c;后续再供用户下载。 也就是需要避免前端因后端…...

React常见的hook

目录 useState useEffect useRef useContext useCallback useMemo useState const [初始值&#xff0c;修改值的方法] useState( 初始值 ) 我们用useState定义一个初始值&#xff0c;可以打印看一下结果 console.log(useState(10)) // [10, ƒ] 结果是一个数组&#xf…...

Oracle集群管理ASM-扩容磁盘组报错ora-15137

1 内容描述 今日对19c集群磁盘组进行扩容&#xff0c; [rootdb1 ~]# oracleasm createdisk DATA7 /dev/sdm1 Writing disk header: done Instantiating disk: done [rootdb1 ~]# oracleasm createdisk DATA8 /dev/sdn1 Writing disk header: done Instantiating disk: done 使…...

TryHackMe-biteme(boot2root)

biteme 远离我的服务器&#xff01; 端口扫描 循例 nmap Web枚举 打开一看是一个默认页面 扫一波 打thm这么久&#xff0c;貌似还是第一次见带验证码的登录 信息有限&#xff0c;对着/console再扫一波 查看/securimage 但似乎没有找到能利用的信息 回到console, 在源码发现…...

vue开发常用的工具有哪些

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。座右铭&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石&#xff0c;故能成其高。个人主页&#xff1a;小李会科技的…...

数组,排序,查找

数组可以存放多个同一类型的数据&#xff0c;数组也是一种数据类型&#xff0c;是引用类型。 数组可以通过下标来访问元素下标是从0开始编号的比如第一个元素就是hens[0]数组定义&#xff0c;数据类型 数组名[] new 数据类型[大小];int a[] new int[5];动态初始化 import ja…...

redis中序列化后的对象后当如何修改

redis中序列化Redis 中存储的序列化对象是不可变需要频繁修改对象属性, 我存储对象为hash结构如何?总结君问归期未有期&#xff0c;巴山夜雨涨秋池。——唐代李商隐《夜雨寄北》 Redis 中存储的序列化对象是不可变 在 Redis 中存储的序列化对象是不可变的&#xff0c;因为它们…...

膜拜!阿里自爆十万字Java面试手抄本,脉脉一周狂转50w/次

最近&#xff0c;一篇题为《阿里十万字Java面试手抄本》的文章在社交媒体平台上引起了广泛关注。这篇文章由一位阿里工程师整理了阿里Java面试的经验&#xff0c;并分享给了大家。这篇文章一经发布&#xff0c;就在短时间内获得了数十万的转发量&#xff0c;让许多Java程序员受…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

学习一下用鸿蒙​​DevEco Studio HarmonyOS5实现百度地图

在鸿蒙&#xff08;HarmonyOS5&#xff09;中集成百度地图&#xff0c;可以通过以下步骤和技术方案实现。结合鸿蒙的分布式能力和百度地图的API&#xff0c;可以构建跨设备的定位、导航和地图展示功能。 ​​1. 鸿蒙环境准备​​ ​​开发工具​​&#xff1a;下载安装 ​​De…...

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...