1. 前言
本文记录使用Grafana时遇到的一些问题,备忘。
2. Grafana Dashboard相关问题
2.1. 常用的Dashboard
问:Grafana常用的Dashboard有哪些?
答:
- node exporter:1860
- cAdvisor:3125
- dcgm exporter:12239
更多的Dashboard,可以到网站Grafana Dashboards上查找。
2.2. 数据源和Dashboard
问:一个prometheus数据源中,会包含不同类型exporter采集的metrics数据,grafana中的一个dashboard怎样知道哪些数据是自己应该展示的?
答:和exporter无关,grafana只关心metrics,grafana根据指标名称和标签过滤自己需要的数据。
2.3. 复制Dashboard后,怎样更换数据源?
问:Dashboard的设置中,选择Save As保存到另外一个文件夹,但是数据源并不会发生变化。如果想要替换数据源,应该怎样配置?
答:编辑JSON Model,查找uid
对应的value,全部替换成新的数据源uid。
数据源uid获取方法:打开配置,数据源配置,点击数据源进入编辑页面,此时浏览器地址栏 /edit/
后面的就是数据源的uid。
2.4. Node Exporter Full 显示问题
问:Node Exporter Full 中,当选择的时间范围小于24小时的时候,CPU Basic和Network Traffic Basic的内容为空,该怎么解决?
答:修改Grafana数据源抓取时间间隔为30s或者1m。
Grafana中默认的数据源抓取数据时间间隔是15s,而Prometheus中抓取数据时间间隔可能是1m,这时就会出现问题。
参考文档:No data available when interval is less than 24 hours
2.5. Docker monitoring 显示问题
问:Docker monitoring - alicek106 revision中,一个容器的 Network Rx 和 Network Tx 对应两条线,是怎么回事?
答:正常现象,说明该容器存在多个网卡。
查看query语句
1 | irate(container_network_receive_bytes_total{image!="", instance=~"$server", name=~"$container"}[5m]) |
在explore页面使用PromQL查询,可以发现指定容器查询可以查询出两个结果,分别有 eth0 和 tunl0 两张卡。
1 | container_network_receive_bytes_total{id="/system.slice/docker-cff8168986d12d8399fde55d3e65a056af56bcf6e67187d926a9d974b4a2c1c2.scope", image="gcr.dockerproxy.com/cadvisor/cadvisor:v0.47.1", instance="192.168.56.101:9101", interface="eth0", job="cadvisor", name="cadvisor"} |
比较好的处理方式:修改Options中的Legend,修改为 {{name}}-{{interface}}
,这样图表就清晰了。
3. Grafana Variables相关问题
3.1. label_values函数
问:Grafana的Dashboard中,可以创建Variables用来筛选数据,其中Query经常使用 label_values
,这个函数是Grafana自带的,还是PromQL自带的?
答:Grafana自带的,PromQL中用不了。
label_values(node_uname_info, job)
详解:
label_values()
函数用于从指定指标中提取指定标签的唯一值列表。node_uname_info
是一个指标名称,代表了包含有关节点操作系统和内核的信息的指标。job
是要提取的标签名称,这里表示作业或服务的标识。
label_values的一个典型应用:在cAdvisor的3125
的dashboard中增加一个根据容器名称的二级筛选。
3125
的dashboard,默认有一个变量为server,能够根据主机筛选出主机上的所有容器。但是容器时不方便观察,最好能够根据容器名称再进行一层筛选。
1、新增一个变量
Settings,Variables,New
2、配置变量
- Name:container
- Type:Query
- Data source:prometheus
- Refresh:On dashboard load
- Query:
label_values(container_cpu_usage_seconds_total{instance="$server"},name)
3、调整PromQL配置
1 | rate(container_cpu_user_seconds_total{image!="", instance=~"$server", name=~"$container"}[5m]) * 100 |
3.2. Regex的作用是什么?
问:配置Variables时,Query Options中有一个Regex,它的作用是什么?
答:使用Query中的表达式筛选出的数据,可能不符合预期,这时可以使用Regex对这些数据进一步过滤。
3.3. 怎样允许多选?
问:在dashboard页面,想要选中多个主机,该怎样配置?
答:修改Variables配置,启用 Selection options 中的 Multi-value
3.4. 怎样显示所有选项?
问:在dashboard页面,通过变量筛选一个主机后,想要返回查看全部的主机,但是并没有这个选项,该怎样配置?
答:修改Variables配置,启用 Selection options 中的 Include All option, Custom all value 设置一个值。
Custom all value 一般设置为 blank = auto
,能够根据用户的选择动态地显示或隐藏”全部”选项。
Custom all value 也会经常设置 .+
,以便dashboard中的PromQL能否匹配到所有的主机。
4. Prometheus相关问题
4.1. Dashboard变量和Panel缺失数据问题
问:Docker monitoring - alicek106 revision中,变量和Panel都缺失数据,该怎么解决?
答:通过kubernetes-cadvisor获取到的指标,是经过过滤的,可能导致数据缺失。
确认方法:访问Prometheus Web,查询变量和Panel中用到的指标。
如果确认是指标缺失,那么就需要修改ServiceMonitor的定义,开放获取更多指标。
1 | kubectl edit servicemonitor prometheus-kube-prometheus-kubelet -n prometheus |
参考无法显示数据的Panel的表达式,修改 metricRelabelings.regex 部分,例如针对3125 Dashboard,需要如下修改:
1 | spec: |
和默认配置相比,regex中添加了 container_last_seen|machine_memory_bytes|container_cpu_user_seconds_total|
4.2. 部分cAdvisor Endpoind DOWN问题
问:Docker monitoring - alicek106 revision中,缺少了一些Endpiont,通过Prometheus Targets页面查看,发现缺失的Endpoint处于 DOWN 状态,该怎样解决?
答:同样的配置,部分正常,部分DOWN,大概率是超时问题。建议interval改成30s,timeout改成5s。
1 | kubectl edit servicemonitor prometheus-kube-prometheus-kubelet -n prometheus |
4.3. node-exporter主机名和IP问题1
问:K8S中的Prometheus,获取集群外部的 node-exporter 指标,instance 的 value 默认配置为 IP:PORT
,怎样把 instance 的 value 改成 IP
?
答:通过relabel_configs实现。
1 | - job_name: 'node-exporter' |
具体修改方法,参考文档《主机、Docker和K8S统一配置监控告警方案A》中的【kube-prometheus监控集群外部服务】部分。
4.4. node-exporter主机名和IP问题2
问:K8S中的Prometheus, node-exporter servicemonitor 把 instance 的 value 配置为 主机名
,怎样把 instance 的 value 改成 IP|主机名
?
答:instance的value,是通过relabelings实现的赋值,需要修改配置。
1 | kubectl edit servicemonitor node-exporter -n prometheus |
原配置为:
1 | spec: |
修改为:
1 | spec: |
该方法同样适用于cadvisor和dcgm。