自学内容网 自学内容网

微服务监控工具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 main

import (
"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 main

import (
"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指标:


原文地址:https://blog.csdn.net/weixin_43996530/article/details/144827919

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!