微服务监控工具Grafana
目录
前言
服务介绍
Grafana:数据可视化和展示
Prometheus:时序数据监控
Loki:日志管理
工具使用
安装
配置 Grafana 数据源编辑
Go Web 项目上报数据
Prometheus 指标上报
Loki 日志上报
数据查看
前言
随着微服务的盛行,微服务的监控也变得更加困难,这里介绍一个微服务常用的监控工具Grafana,Grafana (官网:Grafana: The open and composable observability platform | Grafana Labs)是一个开源的数据可视化和监控工具,能够通过美观的仪表盘展示来自多种数据源(如 Prometheus、InfluxDB、Elasticsearch 等)的数据。

Grafana是一个开源的数据可视化和监控工具,可以集成多种数据源的数据,对数据源进行整合并且做可视化展示,Grafana提供了很多美观的仪表盘和友好的用户使用界面。Grafana必须配合数据源进行使用,而数据源就是我们业务项目所要监控的数据,项目监控主要有两种方向:业务日志和业务指标,这里主要介绍下Grafana这两种数据源Prometheus和Loki。
服务介绍
不管是Grafana还是它提供的数据源,都是一个监控服务,业务项目往数据源服务发送告警,Grafana集成数据源进行界面的展示。


Grafana:数据可视化和展示
Grafana 是一个开源的数据可视化和监控工具,能够通过美观的仪表盘展示来自多种数据源(如 Prometheus、InfluxDB、Elasticsearch 等)的数据。其主要特点包括:
- 数据可视化
Grafana 提供了强大的可视化功能,支持多种图表类型(如折线图、柱状图、饼图、热图等),可以将 Prometheus 中的时序数据以多种形式展示,帮助用户快速了解系统的健康状态、性能指标等。 - 数据源整合
Grafana 支持多种数据源,最常用的就是 Prometheus,此外还支持如 InfluxDB、Elasticsearch、MySQL 等其他存储系统。
- 仪表盘和报警
Grafana 提供了灵活的仪表盘功能,用户可以根据自己的需求创建和定制不同的监控视图。此外,Grafana 还可以设置报警规则,在某些条件下发送通知。 - 用户友好的界面
Grafana 提供一个用户友好的 Web 界面,方便用户查看监控数据、调整图表和仪表盘,进行数据分析。
Prometheus:时序数据监控
Prometheus 是一个开源的监控和报警工具,主要用于收集、存储和查询时间序列数据(即带时间戳的度量数据)。它的工作方式通常是 拉取式(pull),通过周期性地向配置的目标(例如服务、容器、主机等)发送 HTTP 请求,获取指标数据,Prometheus有以下特点:
-
时序数据存储
Prometheus 内置了时序数据库(TSDB),专门用于存储和查询时间序列数据。它将每个数据点视为一个时间戳和一组标签(label)的组合。 -
PromQL
Prometheus 提供了强大的查询语言 PromQL(Prometheus Query Language),使得用户能够高效地从存储的指标数据中进行聚合、查询和分析。 -
拉取式收集
Prometheus 通过定期向服务端点发起 HTTP 请求拉取数据。它也支持向外部发送指标数据(推送)。 -
报警规则
Prometheus 支持自定义报警规则,能够根据查询结果触发报警,例如系统负载过高或某个服务宕机。
使用场景:
- 系统性能监控(如 CPU 使用率、内存使用、请求数、响应时间等)。
- 容器和服务监控(如 Kubernetes、Docker 等环境)。
- 集成应用程序的指标(例如,数据库查询时间、API 请求量等)。
Loki:日志管理
Loki 是一个开源的日志聚合系统,专门用于收集、存储和查询日志数据。它的设计理念是与 Prometheus 紧密集成,并且尽量降低资源消耗,使日志查询与时间序列数据监控的体验一致。Loki有哦以下特点:
- 日志聚合和存储
Loki 专注于从分布式系统收集日志数据。与传统的日志管理工具不同,Loki 设计简化了存储和查询结构,通常将日志数据存储在简单的对象存储系统(如 S3、GCS)中。 - 标签化日志
类似于 Prometheus,Loki 使用标签(labels)来对日志进行标识和分类。每条日志都有与其相关的标签,而不是全文索引,这使得 Loki 在存储上更加高效。 - 与Prometheus集成
Loki 的查询语言(LogQL)与 PromQL 类似,允许用户基于时间和标签来查询日志数据。Loki 本身不存储日志的全文,而是将日志条目与时间和标签一起存储,因此可以高效地进行聚合和查询。 - 易于扩展
Loki 可以与现有的日志代理(如 Fluentd、Promtail 等)配合使用,方便地收集来自各个源的日志数据,并将其发送到 Loki。
使用场景:
- 日志聚合:收集和存储来自多个应用程序和服务的日志数据。
- 故障排查:结合 Prometheus 的监控数据,Loki 可以帮助开发和运维人员通过日志追踪问题和异常。
- 集群日志管理:适用于云原生环境(如 Kubernetes),集中式地收集和管理所有服务的日志。
工具使用
安装
微服务和监控工具现在都是部署在Kubernetest环境中,这里我们就用Helm来完成监控工具的部署,有关Helm的使用可以参考:Kubernetes# Helm工具使用-CSDN博客
- 添加Helm仓库
首先,添加 Loki 和 Prometheus 的官方 Helm 仓库:helm repo add grafana https://grafana.github.io/helm-charts helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update - 部署Prometheus
执行以下命令部署 Prometheus:
这会在helm install prometheus prometheus-community/prometheus \--namespace monitoring \--create-namespace \--set server.service.type=NodePort \--set server.service.nodePort=30900monitoring命名空间下部署 Prometheus,并将服务暴露在NodePort: 30900。
- 部署Loki
执行以下命令部署 Loki:helm install loki grafana/loki-stack \--namespace logging \--create-namespace \--set grafana.enabled=false \--set prometheus.enabled=false此命令会部署 Loki 及其相关组件,默认情况下 Loki 使用
3100端口。 -
部署Grafana
执行以下命令部署 Grafana:helm install grafana grafana/grafana \--namespace grafana \--create-namespace \--set service.type=NodePort \--set service.nodePort=30000 \--set adminUser=admin \--set adminPassword=admin这会将 Grafana 暴露在
NodePort: 30000。
配置 Grafana 数据源

Grafana 启动后,访问 <http://<Node-IP>:30000>,登录用户名和密码为 admin / admin。
-
配置 Prometheus 数据源
1、在 Grafana 左侧菜单中,选择 Configuration > Data Sources。
2、添加新数据源,选择 Prometheus。
3、填写http://<Prometheus-Service-Cluster-IP>:9090或http://<Node-IP>:30900。 -
配置 Loki 数据源
1、添加新数据源,选择 Loki。
2、填写http://<Loki-Service-Cluster-IP>:3100。
Go Web 项目上报数据
Prometheus 指标上报
安装 Prometheus 的 Go SDK:
在代码中引入prometheus的客户端sdk包,在项目中用这个client进行数据上报
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promhttp
在项目中添加上报示例代码:
package mainimport ("net/http""github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promhttp"
)var (httpRequests = prometheus.NewCounterVec(prometheus.CounterOpts{Name: "http_requests_total",Help: "Number of HTTP requests received",},[]string{"method", "endpoint"},)
)func init() {prometheus.MustRegister(httpRequests)
}func handler(w http.ResponseWriter, r *http.Request) {httpRequests.WithLabelValues(r.Method, r.URL.Path).Inc()w.Write([]byte("Hello, Prometheus!"))
}func main() {http.Handle("/metrics", promhttp.Handler())http.HandleFunc("/", handler)http.ListenAndServe(":8080", nil)
}
运行服务后,访问 http://<Go-Service-IP>:8080/metrics,可查看 Prometheus 指标。
Loki 日志上报
安装 Loki 的 Go 客户端:
go get github.com/grafana/loki-client-go/loki
在项目中添加日志上报代码:
package mainimport ("log""time""github.com/grafana/loki-client-go/loki"
)func main() {cfg := loki.Config{URL: "http://<Loki-Service-Cluster-IP>:3100/api/prom/push",}client, err := loki.New(cfg)if err != nil {log.Fatalf("Failed to create Loki client: %v", err)}defer client.Stop()for {err := client.Handle("app_logs", map[string]string{"job": "my-go-app",}, time.Now(), "This is a test log from Go app!")if err != nil {log.Printf("Failed to send log to Loki: %v", err)}time.Sleep(5 * time.Second)}
}
运行后,Loki 将接收到日志,Grafana 可通过 Loki 数据源查看。
数据查看
上报数据之后我们可以在Grafana上看统计的数据,在统计的界面我们可以选择查看Prometheus和Loki的数据:
查看Prometheus指标:

查看Loki指标:

相关文章:
微服务监控工具Grafana
目录 前言 服务介绍 Grafana:数据可视化和展示 Prometheus:时序数据监控 Loki:日志管理 工具使用 安装 配置 Grafana 数据源编辑 Go Web 项目上报数据 Prometheus 指标上报 Loki 日志上报 数据查看 前言 随着微服务的盛行&…...
用户界面的UML建模06
4.1 抽象表示层的结构(Abstract Presentation Structure) 如图6 所示,抽象表示层模型具有一个顶层的容器(container),《apm》AbstractForm,其包含了许多组件,《apm》AbstractCompon…...
【力扣刷题第一天】63.不同路径Ⅱ
63.不同路径Ⅱ 🚀 题目 题目来源:leetcode 63. 不同路径Ⅱ:63. 不同路径 II - 力扣(LeetCode); 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 obstacleGrid[0][0]…...
如何优化Python网络爬虫的数据清洗流程,以提升数据质量并有效应对网站反爬虫机制?
优化爬虫数据清洗流程,应对反爬虫机制 一、数据清洗的重要性 在网络爬虫中,数据清洗是关键环节。打个比方,我们从网页抓取到的原始数据就像一堆杂乱的杂物,里面有各种格式、错误和重复信息。比如抓取到的文本可能包含HTML标签、…...
svn 相关应用与管理
文章目录 SVN 概要svn 权限控制svn 实操实例svn 备份 SVN 概要 一、SVN简介 Subversion(SVN)是一个开放源代码的版本控制系统,用于管理文件和目录的版本。它采用集中式的版本控制方式,即有一个中央仓库存储所有文件的版本信息&a…...
THM:Mouse Trap[WriteUP]
目录 连接至THM服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取扫描结果中的端口号 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机UDP常用端口进行开放扫描 使用smbmap尝试枚举靶机…...
Nginx详细安装配置过程
目录 1.nginx环境准备 1.1 在配置好yum源之后,安装如下的编译工具 1.2 安装nginx所需的依赖库 1.3 关闭防火墙,selinux,并确保网络正常 2.nginx的编译安装 2.1从nginx官网复制下载链接,wget 下载 2.2? 解压nginx源代码 2…...
目标检测入门指南:从原理到实践
目录 1. 数据准备与预处理 2. 模型架构设计 2.1 特征提取网络原理 2.2 区域提议网络(RPN)原理 2.3 特征金字塔网络(FPN)原理 2.4 边界框回归原理 2.5 非极大值抑制(NMS)原理 2.6 多尺度训练与测试原理 2.7 损失函数设计原理 3. 损失函数设计 4. 训练策略优化 5. 后…...
2024 高通边缘智能创新应用大赛智能边缘计算赛道冠军方案解读
2024 高通边缘智能创新应用大赛聚焦不同细分领域的边缘智能创新应用落地,共设立三大热门领域赛道——工业智能质检赛道、智能边缘计算赛道和智能机器人赛道。本文为智能边缘计算赛道冠军项目《端侧大模型智能翻译机》的开发思路与成果分享。 赛题要求 聚焦边缘智能…...
tcpdump 网络数据包分析工具
简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…...
鱼眼相机模型与去畸变实现
1.坐标系说明 鱼眼相机模型涉及到世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换关系。对于分析鱼眼相机模型,假定世界坐标系下的坐标点,经过外参矩阵的变换转到相机坐标系,相机坐标再经过内参转换到像素坐标,具体如下 进一步进…...
【Unity功能集】TextureShop纹理工坊(七)魔棒工具
项目源码:在终章发布 索引 魔棒工具PS魔棒工具魔棒工具功能点提炼TextureShop魔棒工具根据色差选取非连续区域中间镂空边框的流动虚线取消选区魔棒工具 魔棒工具,也既是通过颜色色差,在图像上选出自定义选区的工具(了解PS魔棒工具)。 PS魔棒工具 我们先来看看PS中的魔棒…...
ASP.NET Core Web API Hangfire
ASP.NET Core Web API Hangfire 前言一、安装二、相关代码1.代码片段2.代码片段3.运行效果 三、测试代码1.即发即弃作业2.延迟作业3.重复作业4.延续作业5.页面调度作业 前言 👨💻👨🌾📝记录学习成果,以…...
E-commerce .net+React(一)——项目初始化
文章目录 项目地址一、创建.Net环境1.1环境配置1.1.1 使用vscode创建webapi1.1.2 Clean architecture结构创建1.1.3 将创建好结构的项目添加到git里1.1.4 EF Core配置1. 在infrastructure里安装EF所需环境2. 创建Product数据模型3. 创建EF Core的DbContext 数据库上下文4. 创建…...
算法每日双题精讲 —— 滑动窗口(水果成篮,找到字符串中所有字母异位词)
🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…...
C++ 设计模式:享元模式(Flyweight Pattern)
链接:C 设计模式 链接:C 设计模式 - 单例模式 享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景,这些对象之…...
Docker+Portainer 离线安装
1. Docker安装 步骤一:官网下载 docker 安装包 步骤二:解压安装包; tar -zxvf docker-24.0.6.tgz 步骤三:将解压之后的docker文件移到 /usr/bin目录下; cp docker/* /usr/bin/ 步骤四:将docker注册成系统服务; vim /etc/sy…...
Linux第100步_Linux之设置LCD作为终端控制台和LCD背光调节
KMS是Kemmel Mode Setting的缩写,内核显示模式设置。它主要负责显示的控制,包括屏幕分辨率、屏幕刷新率和颜色深度等等。 CRTC是指显示控制器,在DRM里有多个显存,通过操作CRTC来控制要显示那个显存。 KMS包含了FB框架。DRM驱动默…...
Chapter09 国际化i18n 和 数据校验:Validation
文章目录 1 Java国际化2 Spring6国际化3 使用Spring6国际化4 数据校验:Validation实验一:通过Validator接口实现实验二:Bean Validation注解实现实验三:基于方法实现校验实验四:实现自定义校验 1 Java国际化 示例&…...
活动预告 | Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁
课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动,了解如何更好地在 Microsoft 365 Defen…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
Ubuntu系统多网卡多相机IP设置方法
目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
