全栈工程师开发手册 (作者:栾鹏) 架构系列文章
prometheus原理可以参考:https://blog.csdn.net/luanpeng825485697/article/details/82318204
k8s上的部署可以参考: https://blog.csdn.net/luanpeng825485697/article/details/83755430
一、Data Source — 数据源 Grafana支持多种不同的时序数据库数据源,Grafana对每种数据源提供不同的查询方法,而且能很好的支持每种数据源的特性。
Grafana默认支持的数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch
Grafana支持同时绑定多套数据源,根据自己需求管理即可。
数据源添加入口:
http://:3000/datasources/new
添加InfluxDB数据源 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lua1XtDK-1603291446169)(https://img.ken.io/blog/grafana/grafana-datasources-add.png-kwrb.png)]
其中主要需要关注的是Name、Type、HTTP Settings,以及InfluxDB Details
配置项 ken.io 的解释 Name 数据源名称,建议以数据源类型+用途命名 Type 数据源类型,选择对应的InfluxDB即可 URL 填写InfluxDB对应的API地址即可,如果Grafana跟InfluxDB不在同一台机器,将localhost换成IP即可 Access API访问方式,一共有Direct和Proxy两个选项。建议选择Proxy Access-Direct 浏览器直连数据源API,然后由Grafana解析返回的数据 Access-Proxy Grafana后端通过API访问数据源,然后返回给浏览器展示 Database InfluxDB数据源对应数据库名称 User InfluxDB数据源账号密码
数据源添加/更新成功后会有如下提示:
添加elasticsearch数据源
默认Grafana是安装了ES插件的,如果没装需要安装相应data source插件。
点击Data Sources–>+ Add data source–> Type–>elasticsearch
Metric查询编辑器
Elasticsearch查询编辑器允许选择多个指标和组由多个条款或过滤器。在右边使用加号和减号图标来添加/删除索引或按子句分组。有些度量值和组子句都有选项,单击选项文本以展开视图并按选项编辑公制或组。
Query:Lucence查询语法,跟kibana的查询一样,详情请查阅ES的官方文档。
Metric:计量的标准,可以取最大、最小、平均值或者count条目数等,Options可以进行脚本的计算,这里我把value的值乘以8,来进行网络Byte和bite的换算。
Group by:排序标准。可以以时间轴进行排序,也可以以自定义的term进行排序。需要这里需要注意一点,ES里如果需要以自定义的字符串term进行排序,会报错:“Fielddata is disabled on text fields by default.”; 解决办法是用"keyword"进行排序,需要手动加入后缀’.keyword’,参考文档如下:https://www.elastic.co/guide/en/elasticsearch/reference/current/fielddata.html
Query里也可以用变量来代替,变量是在templating里预先定义好的。后面再详细介绍templating的概念。
二、Organization — 组织 Grafana为了支持多种部署模式支持多组织,包括使用一个单一的Grafana实例为多个潜在的不受信任的组织提供的服务。
在许多情况下,Grafana将部署一个单一的组织。
每个组织可以有一个或多个数据源。
所有的仪表板是由一个特定的组织拥有的。
三、User — 用户 用户在Grafana与账户是一个概念。
一个用户可以属于一个或多个组织,可以通过角色来分配不同的权限。
Grafana支持多种用户认证的方式。
更多的用户管理详情,可以看 文档的User Auth 部分。
四、Row — 行 行是Grafana在仪表盘界面的逻辑分区器,用于将多个面板连接在一起。
行一般是12个单位宽度。
单位宽度是Grafana为了支持不同分辨率的屏幕所采取的一种策略,这样Grafana可以在不同分辨率的显示器上拥有良好的展示效果。
五、Panel — 面板 面板是Grafana最基本的展示单位。
每个面板提供一个查询编辑器(依赖于面板中选择的数据源),允许您利用查询编辑器来编辑出一个完美的展示图像。
面板提供各种各样的样式和格式选项,而且支持拖拽来在仪表盘上重排,并且可以调整大小。
目前有四个面板类型:图像,状态,面板列表,表格 等类型,而且也支持文本类型。
面板(或整个仪表板)可以以多种方式轻松共享,既可以通过链接分享,也可以导出JSON等文本文件。
六、Query Editor — 语句管理 Query Editor 顾名思义,就是语句管理,每个面板都提供一个Query Editor,我们可以通过编写语句来控制面板展示不同的图表。
七、Dashboard — 仪表盘 仪表盘是Grafana里面最重要的展示部分。
仪表盘可以视为一组一个或多个面板组成的一个集合,来展示各种各样的面板。
仪表盘也可以通过 注释 来标记出各种各样的事件。
仪表盘也支持通过多种不同的方式来共享,支持通过链接的方式共享或者导出JSON等格式的文件。
仪表盘还可以使用 模板 来允许用户交互式的选择数据来展示。
仪表盘由行(Row)+图表面板(Panel)组成。
Panel主要支持:Graph,Singlestat,Dashlist,Table和Text。
仪表盘(Dashboard)添加入口:
http://:3000/dashboard/new
添加仪表盘(Dashboard)
点击设置(齿轮图标)对仪表盘(Dashboard)进行设置
通常只需要关注Name这个选项即可,填写完毕后,点击保存按钮保存 或者使用快捷键(Ctrl+S)保存设置/完成创建
添加面板(Panel)
仪表盘(Dashboard)创建完成后,只有一个空行 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cuhfIKda-1603291446190)(https://img.ken.io/blog/grafana/grafana-dashboard-row-empty.png-kwrbm.png)]
将鼠标移动到行左上角的菜单图标,就会显示行操作菜单
这里我们选择Add Panel即可
这里我们以曲线图(Graph)为例
图表面板配置 鼠标单击图表标题可以呼出图表菜单
点击Edit进入编辑视图,默认是Metric设置
主要配置项说明
配置项 ken.io 的说明 DataSource 选择Grafana已配置的数据源 FROM-Default 默认Schema,保持不变即可 FROM-measurement 对应的InfluxDB的表名 WHERE WHERE条件,根据自己需求选择 SELECT-Field 对应选的字段,可根据需求增减 SELECT-mean() 选择的字段对应的InfluxDB的函数 GroupBY-time() 根据时间分组 GROUPBY-fill() 当不存在数据时,以null为默认值填充
以下是配置示例: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vgd668b6-1603291446193)(https://img.ken.io/blog/grafana/grafana-dashboard-row-panel-graph-setting-metrics-example.png-kwrb.png)]
所有的配置项都会被解析生API请求的语法,具体解析的内容可以通过查询检查器(Query Inspector)查看
接下来配置通用配置项(General)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PbIUAt5X-1603291446194)(https://img.ken.io/blog/grafana/grafana-dashboard-row-panel-graph-setting-general.png-kwrb.png)]
ken.io 这里只将Title设置为CPU-Load不做其他调整
图表面板的配置完成后,不要忘记保存仪表盘(Dashboard)
grafana镜像重新封装 由于官方grafana镜像支持的数据源或者展示面板不够丰富,所以我们需要重新封装镜像
Dockerfile文件内容如下
FROM grafana/grafana:latest# 时钟图 Run grafana-cli plugins install grafana-clock-panel # 饼图 Run grafana-cli plugins install grafana-piechart-panel # 气泡图 Run grafana-cli plugins install digrich-bubblechart-panel # Run grafana-cli plugins install raintank-worldping-app # json数据 Run grafana-cli plugins install grafana-simple-json-datasource #zabbix报警 Run grafana-cli plugins install alexanderzobnin-zabbix-app
prometheus 基本查询语法 1,查看指标
直接输入指标名字就行了,grafana会自动补全
2,查看某个指标的使用率,比如cpu使用率
用到rate函数,rate用来计算两个间隔时间内发生的变化率。如
rate(指标名{筛选条件}[时间间隔])
比如查看1分钟内非idle的cpu使用率
rate(node_cpu_seconds_total{mode!=“idle”}[1m])
3,求和算法
函数为sum,比如上面得到各个指标的cpu使用率,如果我想计算总的cpu使用率怎么办?
sum(rate(node_cpu_seconds_total{mode!=“idle”}[1m])) by (instance_name)
by的含义表示将结果根据instance_name来进行区分。跟mysql语句中 group by差不多。
参考官网:https://prometheus.io/docs/prometheus/latest/querying/basics/
重新封装grafana镜像 由于官方带的grafana镜像可能还不能满足你的需求,我们可以选择重新封装来安装更多的数据源和面板
DockerFile文件内容如下,我安装了一些插件
# docker build -t luanpeng/lp:grafana . FROM grafana/grafana:latest USER root # 时钟图 Run grafana-cli plugins install grafana-clock-panel # 饼图 Run grafana-cli plugins install grafana-piechart-panel # 气泡图 Run grafana-cli plugins install digrich-bubblechart-panel # 世界地图 Run grafana-cli plugins install raintank-worldping-app # json数据 Run grafana-cli plugins install grafana-simple-json-datasource #zabbix报警 Run grafana-cli plugins install alexanderzobnin-zabbix-app # k8s监控应用 Run grafana-cli plugins install grafana-kubernetes-app # WindRoseby 极坐标图 Run grafana-cli plugins install fatcloud-windrose-panel #雷达图 Run grafana-cli plugins install snuids-radar-panel # 世界地图热力图 Run grafana-cli plugins install ovh-warp10-datasource # 选点监控 Run grafana-cli plugins install natel-usgs-datasource # es数据监控 Run grafana-cli plugins install stagemonitor-elasticsearch-app # Plotly直接坐标系散点图 Run grafana-cli plugins install natel-plotly-panel # 组织结构图 Run grafana-cli plugins install digiapulssi-organisations-panel # ajax请求更新数据 Run grafana-cli plugins install ryantxu-ajax-panel
grafana的邮件报警Alerting grafana 4版本以上支持了alert功能,这使得利用grafana作为监控面板更为完整,因为只有alert功能才能称得上监控。 email报警前设置SMTP服务: 配置模板如下:打开/usr/share/grafana/conf/defaults.ini配置
#################################### SMTP / Emailing ##################### [smtp] enabled = true host = smtp.exmail.qq.com: user = luan.peng@intellif.com # 如果密码中包含#或则; 你需要使用三个双引号将他引起来,例如 """#password;""" password = xxxxxxx cert_file = key_file = skip_verify = true from_address = luan.peng@intellif.com from_name = Grafana ehlo_identity =[emails] welcome_email_on_sign_up = false templates_pattern = emails/*.html .....#################################### Alerting ############################ [alerting] # Disable alerting engine & UI features enabled = true # Makes it possible to turn off alert rule execution but alerting UI is visible execute_alerts = true ....
其他地方可以不改,将配置文件通过configmap配置到pod中,这样就可以成功发送报警了。测试一下
发送不成功的时候,记得去看下打印的错误日记,好进行排查
在面板中添加报警要求不能有模板变量,所有的目标变量都必须指定才能设定报警。 例如下面的B可以进行报警,而A不能进行报警。Data Source还必须是明确的数据源,也不能是模板
注意:prometheus套装中的k8s系统信息收集,默认设置了面板配置不可修改,所以我们最好新建一个监控,流量查询和k8s中一样,并且添加自己的报警内容,然后保存,报警才能生效
修改密码 在容器中命令行,直接执行
grafana-cli admin reset-admin-password yourpassword
则admin账号密码被重置为yourpassword
八、总结 以上只是对Grafana里的基本概念做了一个简单的介绍,主要目的是帮助大家建立起对Grafana的基本印象,在以后的使用中,能做到心中有数。
参考:https://ken.io/note/grafana-quickstart-influxdb-datasource-graph https://www.kancloud.cn/huyipow/prometheus/525003