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

微服务监控工具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这两种数据源PrometheusLoki

服务介绍

不管是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 可以与现有的日志代理(如 FluentdPromtail 等)配合使用,方便地收集来自各个源的日志数据,并将其发送到 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=30900
    这会在 monitoring 命名空间下部署 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>:9090http://<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&#xff1a;数据可视化和展示 Prometheus&#xff1a;时序数据监控 Loki&#xff1a;日志管理 工具使用 安装 配置 Grafana 数据源​编辑 Go Web 项目上报数据 Prometheus 指标上报 Loki 日志上报 数据查看 前言 随着微服务的盛行&…...

用户界面的UML建模06

4.1 抽象表示层的结构&#xff08;Abstract Presentation Structure&#xff09; 如图6 所示&#xff0c;抽象表示层模型具有一个顶层的容器&#xff08;container&#xff09;&#xff0c;《apm》AbstractForm&#xff0c;其包含了许多组件&#xff0c;《apm》AbstractCompon…...

【力扣刷题第一天】63.不同路径Ⅱ

63.不同路径Ⅱ &#x1f680; 题目 题目来源&#xff1a;leetcode 63. 不同路径Ⅱ&#xff1a;63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09;&#xff1b; 给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角&#xff08;即 obstacleGrid[0][0]&#xf…...

如何优化Python网络爬虫的数据清洗流程,以提升数据质量并有效应对网站反爬虫机制?

优化爬虫数据清洗流程&#xff0c;应对反爬虫机制 一、数据清洗的重要性 在网络爬虫中&#xff0c;数据清洗是关键环节。打个比方&#xff0c;我们从网页抓取到的原始数据就像一堆杂乱的杂物&#xff0c;里面有各种格式、错误和重复信息。比如抓取到的文本可能包含HTML标签、…...

svn 相关应用与管理

文章目录 SVN 概要svn 权限控制svn 实操实例svn 备份 SVN 概要 一、SVN简介 Subversion&#xff08;SVN&#xff09;是一个开放源代码的版本控制系统&#xff0c;用于管理文件和目录的版本。它采用集中式的版本控制方式&#xff0c;即有一个中央仓库存储所有文件的版本信息&a…...

THM:Mouse Trap[WriteUP]

目录 连接至THM服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取扫描结果中的端口号 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机UDP常用端口进行开放扫描 使用smbmap尝试枚举靶机…...

Nginx详细安装配置过程

目录 1.nginx环境准备 1.1 在配置好yum源之后&#xff0c;安装如下的编译工具 1.2 安装nginx所需的依赖库 1.3 关闭防火墙&#xff0c;selinux&#xff0c;并确保网络正常 2.nginx的编译安装 2.1从nginx官网复制下载链接&#xff0c;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 高通边缘智能创新应用大赛聚焦不同细分领域的边缘智能创新应用落地&#xff0c;共设立三大热门领域赛道——工业智能质检赛道、智能边缘计算赛道和智能机器人赛道。本文为智能边缘计算赛道冠军项目《端侧大模型智能翻译机》的开发思路与成果分享。 赛题要求 聚焦边缘智能…...

tcpdump 网络数据包分析工具

简介 用简单的话来定义tcpdump&#xff0c;就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…...

鱼眼相机模型与去畸变实现

1.坐标系说明 鱼眼相机模型涉及到世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换关系。对于分析鱼眼相机模型&#xff0c;假定世界坐标系下的坐标点,经过外参矩阵的变换转到相机坐标系&#xff0c;相机坐标再经过内参转换到像素坐标&#xff0c;具体如下 进一步进…...

【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.页面调度作业 前言 &#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f33e;&#x1f4dd;记录学习成果&#xff0c;以…...

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. 创建…...

算法每日双题精讲 —— 滑动窗口(水果成篮,找到字符串中所有字母异位词)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#xff01;&#x1f4aa;…...

C++ 设计模式:享元模式(Flyweight Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 单例模式 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过共享尽可能多的相同对象来减少内存使用和提高性能。享元模式适用于大量细粒度对象的场景&#xff0c;这些对象之…...

Docker+Portainer 离线安装

1. Docker安装 步骤一&#xff1a;官网下载 docker 安装包 步骤二&#xff1a;解压安装包; tar -zxvf docker-24.0.6.tgz 步骤三&#xff1a;将解压之后的docker文件移到 /usr/bin目录下; cp docker/* /usr/bin/ 步骤四&#xff1a;将docker注册成系统服务; vim /etc/sy…...

Linux第100步_Linux之设置LCD作为终端控制台和LCD背光调节

KMS是Kemmel Mode Setting的缩写&#xff0c;内核显示模式设置。它主要负责显示的控制&#xff0c;包括屏幕分辨率、屏幕刷新率和颜色深度等等。 CRTC是指显示控制器&#xff0c;在DRM里有多个显存&#xff0c;通过操作CRTC来控制要显示那个显存。 KMS包含了FB框架。DRM驱动默…...

Chapter09 国际化i18n 和 数据校验:Validation

文章目录 1 Java国际化2 Spring6国际化3 使用Spring6国际化4 数据校验&#xff1a;Validation实验一&#xff1a;通过Validator接口实现实验二&#xff1a;Bean Validation注解实现实验三&#xff1a;基于方法实现校验实验四&#xff1a;实现自定义校验 1 Java国际化 示例&…...

活动预告 | Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...