自己在配置grafana,把用到的部分总结一下,方便记录和学习
1 grafana主要由datasource(数据源)、dashboard(展示面板)组成,数据源支持zabbix、influxdb、mysql等,
支持的数据源https://grafana.com/grafana/plugins,共享的dashboard地址
grafana自己测试dashboardhttps://play.grafana.org/d/000000063/prometheus-templating?query=&search=open&orgId=1
大家共享的dashboard https://grafana.com/grafana/dashboards?pg=community&plcmt=topnav
官文 https://grafana.com/docs/grafana/latest/
2 默认配置zabbix数据源,不再赘述,然后进入,注意这里可以导入自带的dash board
3 增加dashboard变量部分https://grafana.com/docs/grafana/latest/variables/filter-variables-with-regex/
这部分很重要,变量可以是常量,时间,从datasource 查询的值,设置多级变量的时候,新版grafana的设置略微不同,以zabbix为例
创建group变量,注意Name是变量名称,Label是显示的名字,Hide选择label隐藏Label,选择variable隐藏这个变量,在Group那一栏,正则匹配所有,也可以过滤一些,比如过滤掉Templates开头的
/^(?!Templates).*/
点击add然后继续添加host,注意group那里填$group,Values groups/tags那里需要添加$group.*,其他的类似我不再赘述
最后的效果如图
4 完善
发现Host的地方只是上报的名字,对于ip和名字希望都支持,能够过滤
4.1 思路1:尝试在variables或者datasources里面配置,未果
4.2 思路2: 尝试改dashboard的jsonModel,未果
4.3 思路3:直连数据库,配置很简单,用MySQL的datasource就可以
group的部分很简单
host的部分,对应sql需要join,SQL,注意zabbix的表结构
hosts表–hosts的信息(没有groupid)
hstgrp表-groups的信息
这个表示咋找到的也有来头,如何查一个column的名字对应的表结构^_^
SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'groupid'
hosts_groups表(hostid, groupid) 这是关联表
select concat(name,'--',host) from hosts where hostid IN (select hostid from hosts_groups INNER JOIN hstgrp ON hosts_groups.groupid=hstgrp.groupid and hstgrp.name="$group")
concat是连接字符串,先把hosts_groups和hstgrp join一下,把hstgrp的name沾进hosts_groups的column里(因为hosts_groups只有groupid),沾完以后过滤选定的group并成为新表
从hosts里面搜满足的hostsid从而对应hosts信息拿到对应的ip并连上
但是有个问题,我原来的datasource一套用的都是$host,那个$host是只有名字的,所以图不会显示,问题来了
思路1:dashboard硬改,看看Host地方能不能正则过滤掉,失败
思路2:添加一个variable,原来的改成host1,然后这个variable做截取,失败
思路3:mysql再取回来,哈哈
原来的host变量改成host1,
创建新的host变量,取回来的sql逻辑很简单,就是怎么拿来怎么取回
select name from (select concat(name,'--',host) AS name_ip, name AS 'name' from hosts AS c) AS b where name_ip="$host1";
这个时候就支持item了
如果是具体的item也可以这样把host刷回来
具体的dashboard json分享下
见我评论地址