构建混合技术栈的统一监控与日志平台
文章目录
- 摘要
- 引言
- 构建统一监控与日志平台的核心思路
- 痛点分析
- 解决方案
- 平台架构设计
- 架构概览
- 环境准备
- Java 服务的 Prometheus 指标导出
- Prometheus 指标采集模块
- Node.js 日志收集模块
- 3. Logstash 配置
- 4. Grafana 与 Kibana 配置
- QA 环节
- 总结
- 未来展望
- 参考资料
摘要
在多技术栈开发环境中,不同系统可能使用不同的监控和日志工具,导致数据分散、分析困难。本文以 Prometheus 和 ELK Stack 为例,展示如何构建一个统一的监控与日志平台,实现混合技术栈下的系统可观测性。文章包含一个可运行的示例 Demo,并通过图解说明系统架构,帮助开发者快速上手。
引言
在现代分布式系统中,应用往往由多种技术栈构建(如 Java、Node.js、Python),并部署在不同的环境中。这种多样性虽然带来了灵活性,但也引发了监控和日志的管理难题。分散的数据和工具阻碍了故障排查和性能优化的效率。构建一个统一的监控与日志平台,是解决这一问题的有效途径。
构建统一监控与日志平台的核心思路
痛点分析
- 工具分散:各技术栈通常采用不同的监控工具(如 Java 使用 JMX,Node.js 使用 PM2)。
- 数据孤岛:监控数据和日志分布在不同平台,难以关联分析。
- 缺乏统一视图:难以在单一面板中查看整体系统状态。
解决方案
- 统一监控工具:使用 Prometheus 统一采集各技术栈的指标数据。
- 统一日志平台:通过 ELK Stack(Elasticsearch、Logstash、Kibana)集中管理和分析日志。
- 数据可视化:利用 Grafana 和 Kibana 构建全局监控视图。
平台架构设计
架构概览
- Prometheus:
- 采集各服务的性能指标(如 CPU 使用率、请求延迟)。
- 配置 Exporter 提供不同语言的适配。
- ELK Stack:
- Logstash 收集日志数据。
- Elasticsearch 存储和索引日志。
- Kibana 用于日志查询和可视化。
- Grafana:
- 构建全局监控面板,整合 Prometheus 数据。
环境准备
- Docker 安装(方便部署 Prometheus 和 ELK Stack)。
- 示例服务(基于 Java 和 Node.js)。
Java 服务的 Prometheus 指标导出
在 Java 项目中添加 Prometheus Client,以下是关于文章中代码模块的详细展开和讲解:
Prometheus 指标采集模块
Java 示例代码详解:
import io.prometheus.client.Counter;
import io.prometheus.client.exporter.HTTPServer;public class MonitoringExample {// 定义 Counter 指标static final Counter requestCounter = Counter.build().name("requests_total") // 指标名称.help("Total number of requests") // 指标描述.register();public static void main(String[] args) throws Exception {// 启动 HTTPServer 用于暴露指标HTTPServer server = new HTTPServer(1234); while (true) {requestCounter.inc(); // 模拟请求计数器增加Thread.sleep(1000); // 模拟 1 秒的请求间隔}}
}
详解:
-
Counter: Prometheus 中的一种核心指标类型,适用于累计值(如总请求数)。
build()
: 定义指标对象。name()
和help()
: 定义指标名称和描述。register()
: 注册指标到全局注册表,供 Prometheus 采集。
-
HTTPServer: 开启一个 HTTP 服务,暴露所有注册的指标供 Prometheus 访问。
- 地址为
http://localhost:1234/metrics
。
- 地址为
-
模拟请求计数器:
requestCounter.inc()
模拟请求到来时计数器递增。
运行效果:
访问 http://localhost:1234/metrics
,可以看到类似以下输出:
# HELP requests_total Total number of requests
# TYPE requests_total counter
requests_total 15.0
这表示目前系统的总请求数为 15。
Node.js 日志收集模块
Node.js 示例代码详解:
const winston = require('winston');
require('winston-logstash');// 配置日志传输到 Logstash
const logger = winston.createLogger({transports: [new winston.transports.Logstash({port: 5000, // Logstash 监听的端口host: 'localhost', // Logstash 主机地址node_name: 'node-app', // 节点名称,用于区分日志来源})]
});// 发送日志信息
logger.info('Application started');
logger.warn('This is a warning');
logger.error('This is an error');
详解:
-
Winston:
- 一个流行的 Node.js 日志框架,支持多种日志传输方式。
createLogger()
用于创建日志记录器实例。transports
: 定义日志的传输目标。在此处配置了Logstash
传输方式。
-
Logstash 插件:
winston-logstash
用于将日志发送到 Logstash。- 配置
port
和host
用于连接到 Logstash。
-
日志级别:
info
,warn
,error
表示不同的重要性级别。- 不同级别日志可以在 Logstash 中被筛选和处理。
运行效果:
启动服务后,Logstash 会接收到如下日志:
{"@timestamp":"2024-01-01T12:00:00.000Z","message":"Application started","level":"info"}
{"@timestamp":"2024-01-01T12:01:00.000Z","message":"This is a warning","level":"warn"}
{"@timestamp":"2024-01-01T12:02:00.000Z","message":"This is an error","level":"error"}
3. Logstash 配置
为了支持以上服务的日志收集,需要配置 Logstash 管道。
Logstash 配置文件:
input {tcp {port => 5000codec => json}
}output {elasticsearch {hosts => ["localhost:9200"]index => "logs-%{+YYYY.MM.dd}"}
}
详解:
-
输入模块:
tcp
: 监听来自 Node.js 的日志,端口与winston-logstash
配置一致。codec => json
: 指定日志格式为 JSON。
-
输出模块:
elasticsearch
: 将日志写入 Elasticsearch。index
: 日志存储的索引名称,按日期区分。
4. Grafana 与 Kibana 配置
-
Grafana:
- 添加 Prometheus 数据源,配置 URL(如
http://localhost:9090
)。 - 创建仪表盘展示
requests_total
指标的趋势。
- 添加 Prometheus 数据源,配置 URL(如
-
Kibana:
- 配置与 Elasticsearch 的连接。
- 创建可视化面板,展示日志的分布和错误统计。
通过 Java 和 Node.js 的示例代码,我们实现了 Prometheus 指标采集和 Logstash 日志收集,并集成到了 ELK Stack 和 Grafana 平台。这种统一的监控与日志平台,为多技术栈环境提供了高效的可观测性解决方案。
QA 环节
Q:如何将 Prometheus 和 Grafana 集成?
A:在 Grafana 中添加数据源为 Prometheus,配置对应的 Prometheus 端点。
Q:如何处理日志格式不一致的问题?
A:通过 Logstash 使用过滤插件(如 Grok)对日志进行格式化。
总结
通过构建统一的监控与日志平台,可以显著提升系统的可观测性和问题定位效率。本文展示了基于 Prometheus 和 ELK Stack 的实现方法,为开发者在混合技术栈环境中的监控与日志管理提供了实践指导。
未来展望
- 分布式追踪:结合 OpenTelemetry,进一步提升跨服务的追踪能力。
- AI 分析:利用机器学习对日志和监控数据进行智能化分析。
- 边缘监控:探索边缘设备与云端协同监控的方案。
参考资料
- Prometheus 官方文档
- ELK Stack 官方文档
- Grafana 官方文档
相关文章:
构建混合技术栈的统一监控与日志平台
文章目录 摘要引言构建统一监控与日志平台的核心思路痛点分析解决方案 平台架构设计架构概览 环境准备Java 服务的 Prometheus 指标导出Prometheus 指标采集模块Node.js 日志收集模块3. Logstash 配置4. Grafana 与 Kibana 配置 QA 环节总结未来展望参考资料 摘要 在多技术栈开…...
KOI技术-事件驱动编程(Sping后端)
1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…...
ubuntu 20.04 国内源安装docker
先更新软件包,安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…...
微信小程序 app.json 配置文件解析与应用
目录 一、什么是 app.json? 二、app.json 文件的基本结构 三、详细解析 app.json 配置项 1. pages:小程序页面路径配置 2. window:窗口样式配置 3. tabBar:底部标签栏配置 4. networkTimeout:网络请求超时配置 …...
C高级:思维导图Day2
目录 总览1 总览2 总览1 压缩与解压缩 打包与解包 软连接与硬链接 ubuntu下关机与重启指令 总览2 结束...
蓝桥杯(Java)(ing)
Java前置知识 输入流: (在Java面向对象编程-CSDN博客里面有提过相关知识------IO流) // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…...
[Pro Git#2] 分支管理 | branch fix_bug , feature | 处理合并冲突
目录 一、Issue模板文件 二、Pull Requests模板文件 分支管理 1. 理解分支 2. 创建与管理分支 1. 切换分支与提交历史 2. 合并分支 3. 删除分支 4. 解决合并冲突 6. 查看分支合并情况 快速创建并切换分支 分支管理策略 分支合并模式 分支管理原则 日常开发环境 …...
Java——集合框架
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 集合框架概述1.1 内存层面需要针对多个数据进行存储。此时,可以考虑的容器有:1.2 数组存储多个数据方面的特点和弊端1.3 Java集合框架体系…...
Mac 环境 VVenC 编译与编码命令行工具使用教程
VVenC VVenC 是一个开源的高效视频编码器,专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准,主要目的是提供比 HEVC 更高的压缩效率,同时保持或提高视频质量。H.266/VVC…...
WebRTC:实现浏览器与移动应用的实时通信
1.技术简介 (Web Real-Time)是一种开放式实时通信技术,旨在使浏览器和移动应用程序通过简单的API即可实现实时音频、视频和数据传输,而无需安装插件或额外软件。它支持网络应用中的点对点通信,例如视频聊天、语音通话…...
curl+openssl 踩坑笔记
curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …...
【NebulaGraph】变化的多跳查询
【NebulaGraph】变化的多跳查询 1. 需求2. 解决方案2.1 确定查询结构2.2 构建查询语句 3. 追加需求:如果增加每一跳都要指定查询某SPACE下的Tag,或者不查询某个Tag怎么办 1. 需求 存在多跳请求,其中每一跳是从上一跳查询结果为基础的。但是 …...
【C++】九九乘法表编程题详解与多角度对比分析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目概述题目描述 💯老师的实现方法代码解析优点不足 💯我的实现方法代码解析优点不足 💯实现方法对比💯优化与扩展代码优化…...
node.js卸载并重新安装(超详细图文步骤)
卸载node.js 重新安装nodejs 一、卸载 1、首先进入控制面板卸载程序 2、卸载后 到文件夹中进行进一步的删除 删除上述的几个文件夹 每个人可能不一样,总之是找到自己的nodejs安装路径,下面是我的 ①删除C:UsersAdminAppDataRoaming路径下的npm相关文件…...
redis的集群模式与ELK基础
一、redis的集群模式 1.主从复制 (1)概述 主从模式:这是redis高可用的基础,哨兵和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从服务器ÿ…...
一份关于 Ubuntu 系统下代理配置的故障排查笔记
Ubuntu 网络代理配置与故障排查指南 在使用 Ubuntu 系统时,配置网络代理可以帮助提升网络访问速度或突破网络限制。然而,代理配置过程中可能会遇到各种问题。本文将详细介绍如何在 Ubuntu 下配置网络代理,并提供故障排查的步骤和解决方案。 …...
如何用jmeter工具进行性能测试
前言 今天我们来说说jmeter如何进行性能测试,我们都知道jmeter工具除了可以进行接口功能测试外,还可以进行性能测试。当项目趋于稳定,根据性能需求就可以着手准备性能测试了,今天就说一说jmeter如何进行性能测试,jmet…...
五、Vue 循环语句
文章目录 简介一、基础数组迭代二、对象属性迭代三、整数循环 简介 在 Vue.js 的世界里,当我们需要处理重复性的结构并依据数据动态渲染时,v-for 指令就成了不可或缺的工具,它赋予开发者简洁且强大的能力,轻松应对各种列表渲染场景…...
HMSC联合物种分布模型
联合物种分布模型(Joint Species Distribution Modelling,JSDM)在生态学领域,特别是群落生态学中发展最为迅速,Hmsc是物种群落分层模型的缩写(Hierarchical Modelling of Species Communities),它是一种基于…...
【CPU】risc-v指令集和其他指令集的差别(个人草稿)
第三,在 RISC-V 中对于所有指令,要读写的寄存器的标识符总是在同一位置,意味着在解码指令之前,就可以先开始访问寄存器。在许多其他的 ISA 中,某些指令字段在部分指令中被重用作为源目的地,在其他指令中又被…...
处理元素卡在视野边界,滚动到视野内
效果图如下: 本示例处理场景:点击底部的折叠面板,展开后移动端滚动条位置不变,导致展开内容在视图外。造成面板展开无内容的错觉。 处理核心API: IntersectionObserver 此API可绑定元素并监听元素是否在视野内。若在视野外…...
环,域,体,整区,理想,极大理想,
环: 定义: 加法交换群 乘法半群 分配律 域的定义: 加法交换群 乘法群(去掉0元是交换群) 分配律 Eg:比如整数集合不是域,因为对于乘法来说,去掉0后没有单位元了,但是是环 Eg…...
音视频入门基础:MPEG2-TS专题(22)——FFmpeg源码中,获取TS流的音频信息的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
大模型—Ollama 结构化输出
Ollama 结构化输出 Ollama现在支持结构化输出,使得可以按照由JSON模式定义的特定格式来约束模型的输出。Ollama的Python和JavaScript库已经更新,以支持结构化输出。 结构化输出的用例包括: 从文档中解析数据从图像中提取数据结构化所有语言模型响应比JSON模式更可靠和一致开…...
基于Pytorch和yolov8n手搓安全帽目标检测的全过程
一.背景 还是之前的主题,使用开源软件为公司搭建安全管理平台,从视觉模型识别安全帽开始。主要参考学习了开源项目 https://github.com/jomarkow/Safety-Helmet-Detection,我是从运行、训练、标注倒过来学习的。由于工作原因,抽空…...
数据结构与算法基础(C语言版)
参考资料:https://www.bilibili.com/video/BV1GW421A7qY/ 所有代码均已在Ubuntu 20.04.6 LTS中测试通过 逻辑结构与存储结构 逻辑结构 逻辑结构指的是数据对象中数据元素间的相互关系,分为以下四种: 集合结构 集合结构中的数据元素除了同属于…...
Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放
一、前言说明 近期对视频监控系统做了比较大的更新升级,主要就是三点,第一点就是增加了辅屏预览,这个也是好多个客户需要的功能,海康的iVMS-4200客户端就有这个功能,方便在多个屏幕打开不同的视频进行查看,…...
使用Locust对MySQL进行负载测试
1.安装环境 pip install locust mysql-connector-python 2.设置测试环境 打开MySQL服务 打开Navicat新建查询,输入SQL语句 3.编写locust脚本 load_mysql.py # codingutf-8 from locust import User, TaskSet, task, between import mysql.connector import ran…...
layui多图上传,tp8后端接收处理
环境:layui2.9.21\thinkphp8.1 前端代码: layui.use([upload, layer], function() {const upload layui.upload;const layer layui.layer;const $ layui.$;// 上传图片const uploadInstImage upload.render({elem: #uploadImage,url: /admin/demo/…...
【Rust自学】8.3. String类型 Pt.1:字符串的创建、更新与拼接
8.3.0. 本章内容 第八章主要讲的是Rust中常见的集合。Rust中提供了很多集合类型的数据结构,这些集合可以包含很多值。但是第八章所讲的集合与数组和元组有所不同。 第八章中的集合是存储在堆内存上而非栈内存上的,这也意味着这些集合的数据大小无需在编…...
Linux(Ubuntu)下ESP-IDF下载与安装完整流程(1)
本文主要看参考官网说明,如下: 快速入门 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 Linux 和 macOS 平台工具链的标准设置 - ESP32-S3 - — ESP-IDF 编程指南 latest 文档 一、安装准备 为了在ESP32-S3中使用ESP-IDF,需要根据操作系统安装一些软件包。可以参考以下安…...
Android性能优化—— 内存优化
Android 系统中,垃圾回收是自动的,比较隐蔽,这就导致一些内存问题表现的并不明显,出现问题后难以定位。常见的内存问题有内存泄漏、内存溢出(Out of Memory)、内存抖动等。 我们做内存优化的主要原因有以下…...
【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算
【MATLAB第111期】基于MATLAB的sobol全局敏感性分析方法二阶指数计算 一、简介 在MATLAB中计算Sobol二阶效应指数通常涉及到全局敏感性分析(Global Sensitivity Analysis, GSA),其中Sobol方法是一种流行的技术,用于评估模型输入…...
【Scala】图书项目系统代码演练3.1/BookService
package org.app package serviceimport models.{BookModel, BorrowRecordModel}import org.app.dao.{BookDAO, BorrowRecordDAO}import java.time.LocalDateTime import scala.collection.mutable.ListBuffer// 图书业务逻辑层 class BookService {private val bookDAO new B…...
Gateway
目录 使用 工作机制 Predicate断言 Filter过滤器(鉴权) GatewayFilter GlobalFilter 使用 Gateway底层是使用Ribbon来实现负载均衡的 新建模块,端口5001 1、引入依赖 spring-boot-starter-web里存在tomcat,spring-cloud-st…...
SpringSecurity中的过滤器链与自定义过滤器
关于 Spring Security 框架中的过滤器的使用方法,系列文章: 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity使用过滤器实现图形验证码》 1、Spring Security 中的过滤器链 Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过…...
【OTA】论文学习笔记--《基于RTOS的车载ECU双分区OTA升级技术分析报告》
引言 研究背景 - 汽车智能化、网联化发展趋势下,OTA升级已成为智能网联汽车的必备功能 - 传统RTOS控制器在OTA升级失败后无法进行软件回滚,导致控制器功能失效 - 现有技术主要针对Linux、QNX等智能操作系统,缺乏针对RTOS的解决方案 研究目的 提出一种适用于RTOS控制器的双分…...
MLA:多头潜在注意力
MLA:多头潜在注意力 多头潜在注意力(MLA)机制是一种在深度学习模型中用于处理序列数据的注意力机制的改进形式,以下是对其原理和示例的详细介绍: 原理 低秩键值联合压缩:MLA机制利用低秩键值联合压缩来消除注意力模块中的某些计算,从而提高模型的运行速度和性能。在传…...
【python】matplotlib(moon cake)
文章目录 1、Style12、Style23、Style34、Style45、Style56、Style67、Style78、参考的库函数matplotlib.patches.Arcmatplotlib.patches.Wedge 9、参考 1、Style1 """ author: tyran """from numpy import sin, cos, pi import matplotlib.pyp…...
C++ hashtable
文章目录 1. 基本概念2. 哈希函数3. 哈希冲突及解决方法开放定址法链地址法再哈希法建立公共溢出区4. 哈希表的操作实现5. 内存管理及优化 时间复杂度理想情况(无哈希冲突或冲突极少)一般情况(考虑哈希冲突及解决方法)综合来看 以…...
ip怎么查域名?IP和域名分别是什么?
为什么我们可以通过简单的域名访问网站,而不是记住一串复杂的数字?IP地址和域名之间到底是什么关系?在互联网的世界里,IP地址和域名是两种重要的概念,它们共同构成了我们日常上网的基础。 IP地址是互联网协议地址的缩…...
大模型提示词初探
大模型提示词初探 在与大模型交互的过程中,提示词起着至关重要的作用,它犹如给模型下达的精准任务指令,直接影响着模型生成内容的准确性、高效性与合理性。合理运用提示词,能够有效减少模型出现错误和幻觉的情况,从而…...
Linux的进程替换以及基础IO
进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系,那么我们接下来了解一下程序的替换。 首先,在进程部分我们提过了,其实文件可以在运行时变成进程,而我们使用的Linux软件其实也是一个进程,所以进一步…...
《Vue进阶教程》第三十一课:ref的初步实现
往期内容: 《Vue进阶教程》第二十课:lazy懒执行 《Vue进阶教程》第二十一课:支持缓存 《Vue进阶教程》第二十二课:自定义更新(调度器) 《Vue进阶教程》第二十三课:渲染计算属性的结果 《Vue进阶教程》第二十四课&…...
Wend看源码-Java-集合学习(Queue)
概述 Wend看源码-Java-集合学习(List)-CSDN博客 Wend看源码-Java-集合学习(Set)-CSDN博客 在前两篇文章中,我们分别探讨了Java集合框架的父类以及List集合和Set集合的实现。接下来,本文将重点阐述Java中的Queue集合,包括其内部的数据结…...
大数据面试笔试宝典之HBase面试
1.HBase 数据存储位置 HBase 中的数据存储在哪里? 以什么格式存储?和 Zookeeper 什么关系? 参考答案: 1.HBase 中的所有数据文件都存储在 Hadoop HDFS 文件系统上。 2.包含两种文件类型: HFile : HBase 中 KeyValue 数据的存储格式。HFile 是 Hadoop 的二进制格式文件…...
React基础知识学习
学习React前端框架是一个系统而深入的过程,以下是一份详细的学习指南: 一、React基础知识 React简介 React是一个用于构建用户界面的JavaScript库,由Facebook开发和维护。它强调组件化和声明式编程,使得构建复杂的用户界面变得更…...
实战指南:Shiro、CAS打造完美单点登录体验
引言 想象一下,在日常工作中,我们经常需要进行系统认证和授权。当用户尝试登录一个网站时,他们需要提供用户名和密码,网站会检查这些信息,确认用户是谁。这就是认证的过程。 一旦用户被认证,他们可能会尝…...
光储充一体化解决方案详解。
一、光储充介绍 1、什么是光储充 “光储充”一体化,顾名思义,是由光伏发电、储能、充电集成一体、互相协调支撑的绿色充电模式。其工作原理是利用光伏发电,余电由储能设备存储,共同承担供电充电任务。在用电高峰,光储…...
TDengine 新功能 VARBINARY 数据类型
1. 背景 VARBINARY 数据类型用于存储二进制数据,与 MySQL 中的 VARBINARY 数据类型功能相同,VARBINARY 数据类型长度可变,在创建表时指定最大字节长度,使用进按需分配存储,但不能超过建表时指定的最大值。 2. 功能说明…...