微服务监控工具Grafana
目录
前言
随着微服务的盛行,微服务的监控也变得更加困难,这里介绍一个微服务常用的监控工具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=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>: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 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)!