从现在开始,我们的监控之旅启程了!
不能说很简单,只能说简单得一P,再加上我这手把手的内容,相信各位道友闭着眼睛都能学会。
监控的学习内容主要是当前流行的Grafana+Prometheus+Alertmanager。
对于监控这个系列的内容,主要是学习怎么用,不会像解析Spring源码,各种原理之类的那么晦涩难懂。
这个东西我们学会了,那就是会了!加油!道友!
概述
无论在什么时候,什么场景,什么地点,貌似都离不开监控,甚至是你上班都在考虑着有没有什么东西监控着你。看吧,即便是在普通的世界里监控已是如此的重要,那在IT的世界里,监控更是重中之重。
版本号
当前学习的Grafana版本号为v9.4.3(cf0a135595)
如图所示:
Grafana是啥
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。
基本概念
Data Source:grafana确切地说是一个前端展示工具,将数据以非常美观直接的图形展示出来。那么这些数据必须有 一个来源吧,grafana获取数据的地方就称为Data Source。
DashBoard:仪表盘,就像汽车仪表盘一样可以展示很多信息,包括车速,水箱温度等。Grafana的DashBoard就 是以各种图形的方式来展示从Datasource拿到的数据。
Row:DashBoard的基本组成单元,一个DashBoard可以包含很多个row。一个row可以展示一种信息或者多种信息的组 合,比如系统内存使用率,CPU五分钟及十分钟平均负载等。
Query Editor:用来指定获取哪一部分数据。类似于sql查询语句,比如你要在某个row里面展示test这张表的数据, 那么Query Editor里面就可以写成select *from test。这只是一种比方,实际上每个DataSource获取数据的方式都不 一样,所以写法也不一样,比如像zabbix,数据是以指定某个监控项的方式来获取的。
Organization:org是一个很大的概念,每个用户可以拥有多个org,grafana有一个默认的main org。用户登录后可以 在不同的org之间切换,前提是该用户拥有多个org。不同的org之间完全不一样,包括datasource,dashboard等都不 一样。创建一个org就相当于开了一个全新的视图,所有的datasource,dashboard等都要再重新开始创建。
User:这个概念应该很简单,不用多说。Grafana里面用户有三种角色admin,editor,viewer。admin权限最高,可以 执行任何操作,包括创建用户,新增Datasource,创建DashBoard。在2.1版本及之后新增了一种角色read only editor(只读编辑模式),这种模式允许用户修改DashBoard,但是不允许保存。每个user可以拥有多个 organization。
数据源
Grafana支持以时间序列存储数据的相关数据源,每个数据源都有一个特定的查询编辑器,该编辑器针对特定数据源公开的功能进行自定义。
Grafana默认支持以下数据源:Graphite、InfluxDB、OpenTSDB、Promethenus、Elasticsearch、CloudWatch等数据源,如果在Add data source
页面没有想要的数据源,也可以滑到最底部,点击find more data source plugins from grafana.com
去到插件官网去下载支持对应数据源的插件。
不同的数据源的查询语言和功能是不同的,Grafana可以将不同的数据合并到单个Dashboard中。但每个面板都要与属于特定Org
(看基本概念)的数据源相关联。换句话说就是每个panel只能使用属于当前组织的数据源
本文将以目前流行的Prometheus作为数据源为例进行接入。
架构图
以Promemtheus作为数据源,架构图如下所示:
如图所示:
-
最左边的一列是我们需要进行监控的对象,如Linux,Mysql,Redis,Container等。 -
虚线框中的是针对不同的监控对象,由prometheus提供的对应的Exporter。不同的监控对对象由不同的Exporter采集对应的metrics,相当于一个agent。 -
Exporter采集到指标,并提供统一的接口,Promethus主动进行接口的调用,采集Exporter的数据,进行存储。 -
grafana对接Prometheus作为数据源,针对不同的数据类型,图形化展示对应的指标数据。 -
Alert告警功能,可以针对某一个仪表盘设置告警的条件。
prometheus提供了很多的Exptoter。具体种类请参考以下网址。
https://prometheus.io/docs/instrumenting/exporters
Grafana 工作原理
Grafana 是一个监控仪表盘,而仪表盘必然就是用来展示数据的。但是Grafana 本身并不对数据源进行假设,它只是针对不同的数据源,提供了查询对应的数据源的能力,让它可以获取到来自不同数据源的数据。如 Prometheus,数据源才是负责存储和查询数据的。
也就是说,Grafana 每次要展现一个仪表盘的时候,会向 Prometheus 发送一个查询请求。
仪表盘
在 Grafana 里,仪表盘的配置可以通过图形化界面进行,但配置好的仪表盘是以 JSON 存储的。这也就是说,一个仪表盘就是一份json数据,这份json数据就包含这个仪表盘的一些信息,告诉仪表盘这个数据该怎么展示,比如是折线图还是柱状图,绘图的数据的提取方式等信息。
也就是说当你使用别个做好的仪表盘时,你实际上只是导入了描述这个仪表盘的json信息。
以下是Grafana 的仪表盘市场:
https://grafana.com/grafana/dashboards
比如说针对以下一些服务的标准仪表盘就可以在这里找到
-
JVM -
Spring Boot -
MySQL 监控
如果没有喜欢的仪表盘,也可以通过自定义的方式,自行去创建自定义的仪表盘。
接入准备
为了安装和管理方便,本次操作全部以容器方式运行,用到容器工具Docker
,以及容器编排工具docker-compose
.
文件清单
由于容器在被删除后,信息会丢失,所以一些重要的配置文件,以及数据文件会以卷的方式挂载进容器,以便容器被删除之后,重新启动后依然能够恢复删除之前的状态。
docker-compose.yml: docker-compose文件
grafana.ini: grafana配置文件
prometheus.yml: prometheus配置文件
文件明细
docker-compose.yml
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: service
hostname: service
ports:
- 9100:9100
grafana:
user: root ## root 身份启动,防止挂载的数据目录无权限
image: grafana/grafana
container_name: grafana
hostname: grafana
ports:
- 3000:3000
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini
- ./data/grafana:/var/lib/grafana ## 数据目录
该文件为docker-compose的配置文件,定义所需要的服务,以及其用到的镜像,和其他一些配置。
其中使用到的镜像,都可以在对应的官方网站找到,没有版本号,默认拉取最新image。
prom/prometheus
: Prometheus的镜像,用来作为Grafana的数据源。
prom/node-exporter
: Prometheus提供的一个监控主机数据的Exporter,比如CPU,内存,磁盘,网卡等信息。用于向Prometheus提供数据(实际上数据还是由Prometheus主动拉取的)。
grafana/grafana
:Grafana镜像,用于启动Grafana服务。
prometheus.yml
global:
scrape_interval: 10s
scrape_configs:
- job_name: node
static_configs:
- targets: ['service:9100']
# - job_name: cAdviser
# static_configs:
# - targets: ['cAdviser:9200']
prometheus的配置文件,每一个不同Exporter都对应着一条一条的scrape_configs.job_name
的配置。比如我注释掉的部分。targets代表的就是不同Exporter对象暴露出来的获取指标数据的地址。比如Node Exporter的服务端口就是9100,cAdviser Exporter的服务端口是9200,Prometheus通过这个端口,向对应的Exporter服务发起调用,获取监控数据。
grafana.ini
本次测试该文件为空。
在docker-compose.yml
配置文件下,启动所有容器,就可以开始装逼了。
$ docker-compose up -d
检查
Grafana
http://192.168.2.13:3000/
访问网址,正常出页面就ok
Node-Exporter
http://192.268.2.13:9100/metrics
访问网址,返回所有指标,则说明服务正常
prometheus
http://192.168.2.13:9090/
访问网址,页面能打开。访问status->targets
可以看到配置的所有内容。并且所有的监控项State
都为UP
,如果不是UP,那说明Node-Exporter启动有问题,或者网络不通。
数据源接入
Prometheus
在grafana主界面–>添加数据源–>选择Prometheus. 进入prometheus数据源添加界面。填写连接prometheus的地址,其他默认就好。
配置之后,直接点保存,就为Grafana
添加了一个Prometheus
的数据源。
标准仪表盘
针对Node-Expoter,在Grafana的仪表盘库中已经有很多标准的仪表盘了,直接再进入仪表盘的库,选择一个标准的表盘就好。
选好仪表盘之后,有个仪表盘的id
,我们用这个id
就可以把仪表盘导入。我这里用id=1860
这个仪表盘。
Grafana菜单栏,Dashboard-->Import
,输入仪表盘id,点击load。
load之后会进入到配置界面。
Name: 仪表盘的名字,自定义即可
Folder: 放在那个文件夹下,文件夹需要在设置里面配置
UID: Dashboard唯一ID, 确定Dashboard的唯一性,可以自定义,不重复就行
prometheus: 选择一个已经添加的prometheus的数据源
填写好相关信息后,点击Import
,仪表盘就建好了,会直接跳转到仪表盘的页面,有图有真相:
就这样,第一个仪表盘就算是做好了,大家也算是认识了~
Good Luck…
原文始发于微信公众号(心猿易码):Grafana初识,你的第一个仪表盘
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133241.html