当前位置: 首页 > 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…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...