Grafana 中文入门教程 | 构建你的第一个仪表盘

news2025/2/28 18:21:52

Grafana 读音:/grəˈfɑːnˌɑː/
在这里插入图片描述

在大厂工作久了,时常对一些工具的存在觉得理所当然。

比如说,需要计算资源的时候,一个配置文件就可以要来两百台虚拟化好的机子。需要试下缓存?点下鼠标就可以要到几十个配置好的 Redis 结点。

最省心的是,这些工具都已经根据工作流配置好了:鉴权、优化、网络连接等等通通不用你操心。

但一切要自己撸起袖子干的时候,开始发现各种踩坑。拿 Grafana 和服务监控来说:

  1. 服务监控到底咋配置?怎样保证数据安全?
  2. 保证健康的服务到底应该监控些什么?
  3. 配置好后的仪表盘为啥消失了?
  4. 查询 Query 又该咋写?

等等问题迎面而来。

中文世界里关于 Grafana 的教程少得令人发指,于是在卡拉搜索搭建服务监控的期间,特意记录了一下搭建的过程,写下了这篇详细的教程。

这篇文章(包括之后的一系列文章)里,我通过还热乎的经验介绍下我们是怎样一步步给卡拉搜索[1]配好 Grafana,来监控我们的搜索服务的。我们详细介绍怎样配置权限,具体运维监控的准则保证服务健康,以及用配套的代码让你搭起来第一个仪表盘。同时我们也会介绍一些在卡拉搜索的系统监控应用实践。

我保证这篇教程不会像 99% 的 CSDN 文章一样只是复制粘贴一些简单步骤,而是更多从原理出发,配合实践,一步步让你开始用服务监控,并从中受益。

如果你喜欢我的文章的话,请链接回来,分享给朋友或关注我们的公众号(HiXieke)。

在卡拉搜索,我们用 Grafana 监控所有的服务状态,从引擎到索引。完善的监控帮助我们实时了解卡拉的搜索延迟,慢搜索,Docker
状态等等。如果你对搜索引擎、数据库搜索、App 内搜索感兴趣,也欢迎通过博客[2] 或 Demo[3] 进一步了解或试用卡拉搜索

本文的例子中,我们用的是 Prometheus(普罗米修斯时序数据库)作为时序数据库。但实际上你可以用任何 Grafana 支持的数据源,只需要稍微替换一下配置即可(文中会讲)

本文的代码放在 GitHub 上,请参考:Grafana 教程代码[4]

1. Grafana 是什么

开始前首先要问一个问题,Grafana 到底是什么。

Grafana 读音:/grəˈfɑːnˌɑː/, 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。

Grafana 支持的数据源

  • Prometheus 本文中的例子,你没听过也没关系不影响阅读,把它想象成带时间戳的 MySQL 就好
  • Graphite
  • OpenTSDB
  • InfluxDB
  • MySQL/PostgreSQL
  • Microsoft SQL Server
  • 等等

2. 什么情况下会用到 Grafana 或者监控仪表盘

通常来说,对于一个运行时的复杂系统,你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控。

用开车作为例子:车子本身是一个极其复杂的系统,而当你的车在高速上以 120 公里的速度狂奔时出现了噪音,你是不可能这时候边开车边打开发动机盖子来查原因的。通常来说,好一点的车会有内置电脑,在车子出问题时,告诉你左边轮胎胎压有问题,或是发动机缺水了之类。而这些检测,就是系统监控的一个例子。

对于驾驶员来说,他们开车时只关心几个指标:

  • 我的位置是哪里,在路中间么(当然这个无法通过监控系统实现,得看路)
  • 我的速度是多少 - 速度仪表盘
  • 我的油、发动机水温等等关键指标是多少 - 其它仪表盘

通过仪表盘,你不一定能清楚地了解车子出问题的具体原因,但至少可以给你一个大概的方向。比如- 说,如果水温很高时出现了问题,你大概率可以尝试加点水降温来尝试是否解决问题。

把上面的车换成计算机系统或者一个软件系统也是一样:仪表盘就是你的速度表和水温表,通过这些表盘你可以实时了解你的系统运行情况。

仪表盘应用极广,我能想到的一些例子:

  • 阿里在双十一控制室用了监控仪表盘,因此所有双十一的新闻基本上都可以看到这个仪表盘
  • 各酷炫公司大厅里常常放一个仪表盘来展示实力(用户数啦、营收啦之类)
  • 你的 PC 上的资源管理器、Mac 上的 Activity Monitor 都是某种意义上的仪表盘

用一个卡拉搜索的实践作例子:

我们希望卡拉搜索能提供游戏级的搜索性能,比 Elastic Search 还快十倍。那么这就要求我们 99% 的搜索结果在 5-10 毫秒内要完成。因此,我们就需要添加这么一个仪表盘,能实时知道用户搜索的延迟,并且当搜索延迟超过 10 毫秒时通知到我们。

综上,在任何需要监控系统运行状况的地方就大概率会用到仪表盘,而用到仪表盘的时候就可以用 Grafana (不管你用什么语言)

3. 安装和配置 Grafana

为了简化各种系统不一致的乱七八糟问题,我们用 Docker 来安装 Grafana。(如果还没有安装 Docker 可以参考我们的教程 [如何安装 Docker](/tutorials/how-to-install-and-use-docker-on-ubuntu)。

Docker 的配置文件如下,就算你从来没用过 docker 也不用操心,我会在下文里一行一行讲明白。请不要复制粘贴代码,直接到本文的 GitHub 页 clone 代码即可,我会保证 GitHub 上的代码处理最新状态:https://github.com/Kalasearch/grafana-tutorial[5]

version: '3.4'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    hostname: prometheus
    ports:
      - 9090:9090
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
  prometheus-exporter:
    image: prom/node-exporter
    container_name: prometheus-exporter
    hostname: prometheus-exporter
    ports:
      - 9100:9100
  grafana:
    image: grafana/grafana
    container_name: grafana
    hostname: grafana
    ports:
      - 3000:3000
    volumes:
      - ./grafana.ini:/etc/grafana/grafana.ini

在这里我们启动了三个服务

  • Prometheus 普罗米修斯时序数据库,用来存储和查询你的监控数据
  • Promethues-exporter 一个模拟数据源,用来监控你本机的状态,比如有几个 CPU,CPU 的负载之类
  • Grafana 本尊
    在 clone 了代码之后,在你的本地运行 docker-compose up,应该会看到类似:
    在这里插入图片描述

那么就说明服务已经跑起来了。注意,在之后的所有步骤中,你的 docker 应该处于运行状态。

在跑起来服务之后,到你的浏览器中,复制 http://localhost:3000 应该就可以看到 Grafana 跑起来的初始登录界面。初始的用户名是 admin,密码也是 admin。输入之后,会要求你改密码

在这里插入图片描述

然后就可以进入 Grafana 的主界面了:
在这里插入图片描述

到这里,你的 Grafana 就已经搭起来了。注意到 Docker 的配置文件中我们创建了三个服务,这三个服务之间分别有什么关系呢?

或者说,Grafana 和时序数据库,数据源之间有什么关系呢?请看下文 Grafana 工作原理

4. Grfana 工作原理

上面说到,Grafana 是一个仪表盘,而仪表盘必然是用来显示数据的。

Grafana 本身并不负责数据层,它只提供了通用的接口,让底层的数据库可以把数据给它。而我们起的另一个服务,叫 Prometheus (中文名普罗米修斯数据库)则是负责存储和查询数据的。

也就是说,Grafana 每次要展现一个仪表盘的时候,会向 Prometheus 发送一个查询请求。

那么配置里的另一个服务 Prometheus-exporter 又是什么呢?

这个就是你真正监测的数据来源了,Prometheus-exporter 这个服务,会查询你的本地电脑的信息,比如内存还有多少、CPU 负载之类,然后将数据导出至普罗米修斯数据库。

在真实世界中,你的目的是监控你自己的服务,比如你的 Web 服务器,你的数据库之类。

那么你就需要在你自己的服务器中把数据发送给普罗米修斯数据库。当然,你完全可以把数据发送给 MySQL (Grafana 也支持),但普罗米修斯几乎是标配的时序数据库,强烈建议你用。

用一张图[6]来说明它们之间的关系:
在这里插入图片描述

这里,最左边的 Docker 服务会将服务的数据发送给中间的普罗米修斯(对应上文的 Prometheus-exporter),而最右边的 Grafana 会查询中间的普罗米修斯,来展示仪表盘。

关于普罗米修斯本身也可以写一篇很长的教程了,这里我们先暂时略去不表。请关注我们的技术博客[7]或公众号 (HiXieke),之后我们会继续展开讲。

5. 搭建你的第一个仪表盘

现在我们来搭建你的第一个仪表盘。

第 1 步 - 设置数据源

进入 Grafana 后,在左侧你会发现有一个 Data Source 即数据源选项
在这里插入图片描述

点击后进入,点 Add Data Source 即添加数据源,选择 Prometheus
在这里插入图片描述

之后设置数据源 URL。请注意,Promethues 的工作原理(下一个教程中会讲)是通过轮询一个 HTTP 请求来获取数据的,而 Grafana 在获取数据源的时候也是通过一个 HTTP 请求,因此这个地方你需要告诉 Grafana 你的 Prometheus 的数据端点是什么。

这里我们填入 http://prometheus:9090 就可以了。

你可能会问,为什么不是 localhost:9090 呢?原因是,我们用了 docker-compose 起的三个服务,可以把它们想象成三台独立的服务器,因此需要用一个域名来互相通信。我们在 docker-compose.yml 中设置的普罗米修斯服务器的名字就叫 prometheus,因此这里需要用前者。

在这里插入图片描述

点确认时一定要确认出现 Data source is working 这个检测,这时表明你的 Grafana 已经跟普罗米修斯说上话了

第 2 步 - 导入 Dashboard

在 Grafana 里,仪表盘的配置可以通过图形化界面进行,但配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人导入就可以直接导入同样的仪表盘(前提是你们的监测数据一样)。

对于我们的例子来说,回忆一下,因为我们用了 prometheus-exporter 也就是本机的系统信息监控,那么我们可以先找一个同样用了这个数据源的仪表盘。在 Grafana 网站上,你其实可以找到很多别人已经做好的仪表,可以用来监测非常多标准化的服务。

Grafana 的仪表盘市场:https://grafana.com/grafana/dashboards[8]

比如说针对以下一些服务的标准仪表盘就可以在这里找到

  • JVM
  • Spring Boot
  • MySQL 监控
  • Laravel 监控

那么,这里我们就用一个标准的仪表盘:https://grafana.com/grafana/dashboards/1860[9]

在左侧的加号里,点 Import 即导入,在出现的界面中填入 1860 即我们要导入的仪表盘编号即可。
在这里插入图片描述

然后填入你需要的信息,比如仪表盘名字等

在这里插入图片描述

确认之后 Grafana 就会根据你的本机信息,生成类似 CPU 负载,内存和 I/O 之类的信息。我的磁盘状况如图:
在这里插入图片描述

要注意的是,这里的信息真正监控的是你的 Docker 中的系统信息。如果你只给你的 Docker 分配 1 个核和 2G 内存,那么这里应该看到的就是 1 个核和 2G 内存

第 3 步 - 生成和创建新的仪表盘

最后,在上面导入信息的基础上,你就可以开始创建和你的服务、业务相关的仪表盘了。

但在这步之前,你需要先在你的服务中开始记录一些数据。

如何在各种语言中记录你关注的数据?
拿卡拉搜索举例子,我们关注用卡拉搜索的 APP 的搜索响应速度,所以自然我们需要在所有搜索请求处记录延迟。

对于你的服务,你需要根据自己的业务确认哪些数据是重要的,关于如何记录数据,如何思考运维等,我会在之后的博客中继续深入讨论。如果你想更深入地了解这个领域,推荐阅读 Google 运维手册这本书,英文名叫《Google SRE Book》,免费的书。

包括如何用 Prometheus 查询数据
普罗米修斯本身也是个非常大的话题,我们会在之后的博客中继续讨论。普罗米修斯包括所有其它时序数据库通常都会定义一个查询语言,比如说 PromQL,如果需要熟练地构建仪表盘的话,需要对这个查询语言有一定了解。

如何手动生成一个仪表盘
假设你已经按上面的步骤生成了一个基本的仪表盘,那么现在可以开始手动添加仪表盘了。同样是点左侧的加号,点 Dashboard 就可以进入添加仪表盘的界面。

这里我们选择一个数据叫 scrape_duration_seconds,先不用管它的含义是什么,就当它是双 11 的销售额好了:

在这里插入图片描述

添加好后点右上角的 Apply 或 Save 你的仪表盘就被保存了。这时候,用一个大屏幕展示一下,庆祝一下双十一又过了千亿吧

6. 总结

这篇文章里我们从头到尾介绍了如何用 Grafana 生成仪表盘,如何配置和连接数据源,以及如何导入和创建一个仪表盘。

之后的文章中,我们会介绍在卡拉搜索,我们是怎样监测服务健康状态的,同时我们会介绍 Prometheus 即普罗米修斯时序数据库的用法,欢迎继续关注我们的博客和公众号 (HiXieke)。

如果你的 App 或小程序需要搜索功能,也可以到卡拉搜索首页[10]了解一下我们的托管搜索服务。花 5 分钟接入,我们就可以帮你为你的用户提供比 ElasticSearch 还快 10 倍的搜索体验,提高转化率和用户留存。

本文参考了以下文章:

  • How to explore prometheus with easy hello world projects[11]
  • Node Exporter Guide[12]
  • Grafana Tutorials[13]
  • Grafana Simple Synthetic Monitoring[14]
  • Grafana 快速入门[15]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/191534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单高效的字符串匹配算法

Quick Search算法 算法简介 Quick Search算法属于Sunday算法的一种。Sunday算法由Daniel M Sunday在1990年提出。论文原文:A VERV FAST SU6STRINC SEARCH ALGORITHM 在论文中,作者提出了三个不同的算法:Quick Search算法、Maximal Shift算…

IO流——字符缓冲流

复制文本文件–一次读写一个字符 –一次读写一个字符数组 不带参数: package com.demo03;import java.io.FileReader; import java.io.FileWriter; import java.io.IOException;/** 需求:* 把项目路径下的FileWriterDemo.java中的内容复制到项目路径…

上门服务小程序怎么开发-上门服务小程序源码功能

目前上门服务类型新型行业已经占据了很大的市场所在,上门家政服务,上门做饭,上门按摩,上门私教,上门美容没发等等一些列的,目前上门系列的在市场分额还是特别大的,趋势比较大,今天就…

Docker 安装镜像与使用命令

按照阿里云的操作文档安装 docker:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 这里仅写 Windows 版的,其他版本见上面的链接 1. 安装/升级Docker客户端 对于Windows 10以下的用户,推荐使用Docker ToolboxWin…

一文带你了解UI自动化测试框架

PythonSeleniumUnittestDdtHTMLReport分布式数据驱动自动化测试框架结构 1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_page import Login_Page from H…

九龙证券|首月定增市场“开门红” 上市公司密集融资谋扩产

2023年首月,A股定增市场迎来“开门红”。 据上海证券报记者统计,年初至今,已有35家公司完成定增,合计募资986.86亿元,较上年同期的477.3亿元大幅增长超100%,延续了2022年末的高位运行态势。同时&#xff0c…

前端项目发布后,如何使正在使用的用户更新为最新的版本?

1.背景 每次项目上线后,异常监控总是零零散散报一些资源加载或者解析失败的告警 仔细对比chunk的hash值会发现已经是上一版本的js文件为什么会出现这个问题呢?也不难想到,项目是单页应用,页面使用懒加载分多个chunk打包&#xff…

SDP零信任网络安全架构

安全狗零信任SDP接入解决方案基于“以身份认证为中心,以信任为基础,持续动态授权认证”的理念,打造企业全方位立体业务访问安全体系。 其SDP零信任网络安全架构如下图: SDP零信任产品优势 1、多维度终端环境感知 系统风险感知&…

浅谈--声调

声调 根据声调的有无,我们可以把世界上的语言分为声调语言和非声调语言两大类。 非声调语言,并不是说音节没有高低升降的音高变化,只是这种变化只能改变语气作用,并不能区别意义。如:在英语单词book,音高…

Nacos 初始

1.Nacos 的安装使用。 nacos的安装步骤 1.端口配置 Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。 如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口&am…

(考研湖科大教书匠计算机网络)第三章数据链路层-第五节:点对点协议PPP

专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:点对点协议(PPP)概述二:PPP协议组成部分三:PPP协议帧格式四:PPP协议的透明传输(1)字节填充法…

磨金石教育摄影技能干货分享|优秀摄影作品如何表现创意与思想的

在摄影活动中并不是简单的利用镜头把事物拍下来,而是要尽量的融入作者对当时当地事物的情意表达出来。利用摄影技术,因时制宜展现个人的创意,然后表达自己的思想。下面给大家分享一组摄影大赛获奖作品,看看这些获奖作品如何做到的…

vue(iviewui) 输入框历史记录

安装:npm install good-storage -S 缓存cache.js: /*把搜索的结果保存下来*/ /*用export把方法暴露出来*/ /*定义存储搜索的key _search_定义内部使用的key*/ let searches_list [] const SEARCH_MAX_LENGTH15 /*插入方法 arr存储的数据 val传入存储的值 comp…

leetcode-每日一题-1664-生成平衡数组的方案数(中等,动态规划)

时间长不做动态规划的题目,现在突然看过去有些生疏,第一眼看到这个题目想了一下暴力,然后突然注意到了题目的难度是中等,力扣里面的中等难度的题目都是没有暴力可以做出来的,目前我做这么多题来看的话,第一…

StarRocks荣获开源中国“2022 年度优秀开源技术团队”

近日,国内知名开源技术社区开源中国(OSCHINA),综合了平台上各大认证官方技术团队、开源社区账号年度发表的内容频率及质量、开展各种活动运营积极性等多方面表现,向StarRocks颁发了 OSCHINA“2022年度优秀开源技术团队…

编译原理学习笔记19——语义分析和中间代码生成4

编译原理学习笔记19——语义分析和中间代码生成419.1 常用的控制语句19.2 控制语句的属性文法19.3 控制语句的属性计算19.4 一遍扫描翻译控制语句19.5 一遍扫描翻译控制语句示例19.1 常用的控制语句 常用的控制语句 S → if E then S1S → if E then S1 else S2S → while E …

机器学习笔记之生成对抗网络(二)全局最优解的求解逻辑

机器学习笔记之生成对抗网络——全局最优解的求解逻辑引言回顾:生成对抗网络的判别过程关于生成对抗网络的一些特性最优解的求解过程引言 上一节介绍了生成对抗网络,并介绍了其判别过程,本节将介绍关于模型参数的求解逻辑。 回顾&#xff1…

建立建筑领域科学的碳排放核算方法(江亿)

中国工程院院士、清华大学江亿教授受邀参加2022年12月28日“2022中国建筑节能协会年会暨第五届全国建筑节能与绿色建筑技术创新大会”并作了题为“建立建筑领域科学的碳排放核算方法”的报告。 实现能源转型,由碳基能源转为零碳能源,是中央确定的未来战…

九龙证券|锂离子电池在安全性能上应当满足哪些条件?

锂离子电池具有分量轻、容量大、无回忆效应等优势,因而得到了普遍运用——今朝的许多数码设备都采用了锂离子电池作电源,虽然其价格相对来说比较昂贵。锂离子电池的能量密度很高,它的容量是同分量的镍氢电池的1.5~2倍,而且具有很低…

Redis集群搭建

Redis集群搭建1.单机安装Redis2.Redis主从集群2.1.集群结构2.2.准备实例和配置2.3.启动2.4.开启主从关系2.5.测试3.搭建哨兵集群3.1.集群结构3.2.准备实例和配置3.3.启动3.4.测试4.搭建分片集群4.1.集群结构4.2.准备实例和配置4.3.启动4.4.创建集群4.5.测试基于CentOS7下的Redi…