Grafana

概述

Grafana 是一个开源的,可以用于大规模指标数据的可视化项目,甚至还能对指标进行报警。基于友好的 Apache License 2.0 开源协议,目前是prometheus监控展示的首选。优点如下:

1.使用:

  • 配置方便:支持Dashboard、Panel、Row等组合,且支持折线图、柱状图等多种图例

  • 图表漂亮:可以选择暗黑系或纯白系,你也可以自己定义颜色

  • 模板很多:grafana模板很活跃,有很多用户贡献的面板,直接导入就能用

  • 支持多种数据源:grafana作为展示面板,支持很多数据源,如Graphite、ES、Prometheus等

  • 权限管理简单:有admin、viewer等多种角色管控

2.二次开发:

如果默认的grafana不能满足你的需求,要二次开发,官方也提供了很多支持:

  • 协议为Apache License 2.0:商业友好,随便改吧,改完拿去卖也行。

  • 完善的API调用:权限、面板、用户、报警都支持api调用。

  • 多种鉴权方式:OAuth、LADP、Proxy多种方式,你可以接入自己公司的鉴权系统

  • 插件开发:如果你不想直接改代码,可以做自己的插件

  • go+Angular+react:常用的技术栈,方便二次开发

prometheus + grafana 做为监控组合很方便,很强大,改造了鉴权之后更加香。一开始我们还尝试使用grafana自带的报警功能,可惜比较鸡肋,无法用于生产,报警的issue一大堆官方也不想修改,作罢

部署

步骤一:安装grafana

Grafana提供了很多种部署方式,如果你的展示报警是在K8S集群外,可以二进制直接部署,如果grafana本身在集群内,或者管理端也是k8s集群,可以用yaml部署:

Deployment配置:

Service配置:

grafana配置文件的字段含义:

注意的几个点:

  1. 对所有的资源都做request、limit限制,防止耗尽主机资源

  2. grafana的一些配置可以通过变量传入:如admin的密码GF_SECURITY_ADMIN_PASSWORD

  3. 如果要对grafana的数据进行持久化,建议挂volume或者外部存储,持久化的内容一般都是面板配置。监控面板的配置可以导入导出

  4. securityContext:因为版本问题,如果提示grafana的权限不足,可以配置runAsUser: 0

创建了grafana之后,可以通过service暴露的端口地址查看页面:

登录成功后,会显示需要初始化的内容

步骤二:配置数据源

grafana支持多种数据源,可以在“type”的下拉框选项中看到,这里我们选择prometheus作为数据源。HTTP的访问方式选择proxy,URL填写grafana能访问到的地址。

  • Metric:比较重要,配指标表达式和指标线的地方,上边已经举例

  • Axes:配置数据轴的地方,如偏移缩放,格式转换

  • Legend:图例,是否限制以及显示的方式

  • Display: 展示相关的配置,如线条宽度,排序方式、空值处理

  • Alert: 报警配置,grafana算是少有的展示图表支持报警的,但他的报警只支持到单图表,无法嵌套模板,有点鸡肋。如左上角有筛选node的下拉框,图表又传入了变量时,如果配置报警,是配置失败的。报错为:“Template variables are not supported in alert queries”

  • TimeRange: 配置单图表的展示时间,如24h内的数据

更多详细的配置可以查看:https://grafana.com/docs/features/panels/graph/

变量配置:

对于一些复杂场景,可能需要传入变量,如有多台机器,每台机器都要展示其cpu内存等指标。而机器列表又是动态的,这个时候就可以使用变量,示例:

首先在该面板的setting中选择variables,注意是该面板的设置,不是全局设置

填写名称,下拉框选项的数据获取表达式,刷新周期,是否有ALL选项等,然后保存

接下来在具体的图表中使用该变量

在metric中,将变量$Node写在表达式中做匹配即可。

grafana的变量支持高级匹配,如$Node.*代表以Node开头的字符,利用变量的方式,可以实现多级筛选,满足更复杂的需求,如pod资源的查看

关于变量的更多信息:what-is-a-variable

报警配置

grafana在v4.0版本开始引入了报警功能。

还是以Node节点数为例,我们配置一条规则:

alert支持avg、sum等表达式,不过持续时间依赖数据本身的采集频率。需要多测试一下。

Notifications:配置报警的收件组和详细内容。而报警收件人的配置在专门的Alerting页面上

Alert Rules:已经配置的报警规则,并展示其触发状态。

报警邮件的样式:

模板变量报警

以上的报警配置方式只适合没有变量传入的图表,如果遇到上边提到的选择node,传入变量的图表,就没办法支持了。

相关issue:https://github.com/grafana/grafana/issues/9334

官方对这个功能解释了一堆,最新版本仍然没有支持。借用issue的一句话哈哈哈

本文为容器监控实践系列文章,完整内容见:container-monitor-book

Last updated

Was this helpful?