夜莺监控新版表格配置实战:从零搭建机器监控仪表盘
1. 为什么你需要一个机器监控仪表盘如果你管着几台服务器或者像我一样负责一个小团队的几十台虚拟机、容器每天最怕的就是半夜被报警电话叫醒。打开监控系统面对一堆密密麻麻的曲线图CPU、内存、磁盘IO……每个指标一个图想快速定位哪台机器“病”得最重得来回切换、对比眼睛都看花了。这种体验相信很多运维兄弟都深有感触。所以一个清晰、直观的机器监控仪表盘对我们来说不是“锦上添花”而是“雪中送炭”。它能在一张表格里把所有机器的核心健康指标SLI并排摆出来谁CPU飙红了谁内存快满了谁磁盘要撑爆了一眼扫过去心里就有数了。这就像医院的病人监护大屏哪个床位的心跳异常了血压超标了护士站一眼就能看到不用挨个病房去查。夜莺监控从8.3版本开始推出了全新的表格Table图表类型目标就是对齐Grafana那个积累了多年的强大表格功能。我实测下来新版表格在数据关联、字段自定义展示上确实灵活了很多完全可以满足我们搭建一个专业级机器监控仪表盘的需求。今天我就手把手带你从零开始用夜莺的新版表格配置一个属于你自己的、能联动筛选、可视化效果拉满的机器监控仪表盘。无论你是刚接触夜莺的新手还是想升级老仪表盘的老鸟这篇实战指南都能帮到你。2. 环境准备与核心概念扫盲在动手敲配置之前咱们得先把“战场”打扫干净把“武器”认全了。别担心我会用最直白的话给你讲明白。2.1 你需要准备什么首先你得有一个正在运行的夜莺监控系统版本号必须是8.3或以上。怎么查版本登录夜莺前端通常在页面左下角或者“关于”页面里能看到。如果版本太低赶紧联系管理员升级新表格Table NG是Beta功能老版本可没有。其次你的机器上需要安装并运行数据采集器。这里我强烈推荐Categraf它是夜莺生态里的“官方御用”采集器轻量、高效和夜莺是天作之合。你需要确保Categraf的input.cpu、input.mem、input.disk这几个基础插件是开启的它们会采集我们后续要用到的核心指标。检查方法就是看Categraf的配置文件config.toml里对应插件的enabled是不是true。最后你需要一个Prometheus或VictoriaMetrics作为时序数据库用来存储Categraf上报的监控数据。夜莺本身不存数据它是个强大的“展示和分析前台”数据都来自后台的时序库。确保你的夜莺已经正确配置了数据源能查询到数据。2.2 理解两个关键“零件”变量与Join配置仪表盘尤其是带交互的仪表盘有两个概念必须吃透变量和数据关联Join。我打个比方变量就像仪表盘上的“旋钮”和“开关”。比如一个“数据源”旋钮让你选择看A集群还是B集群的数据一个“机器”开关让你选择只看某台机器或者全部机器。它的存在让一个静态的仪表盘变成了动态的、可交互的驾驶舱。数据关联Join我们的监控数据来自不同的指标。CPU使用率是一个指标序列内存使用率是另一个。但它们都属于同一台机器。怎么把属于同一台机器的CPU、内存数据放到表格的同一行里这就需要通过一个共同的“身份证”来关联。在监控领域这个身份证通常是ident标签Categraf默认会用机器的唯一标识作为ident标签。通过ident标签把多个指标的数据“拼”在一起就是Join操作。把这两个概念装进脑子里后面的操作就都是“按图索骥”了。3. 第一步创建仪表盘与配置联动变量万事开头难但配置变量这一步走稳了后面就一马平川。我们目标是做出一个能联动筛选的仪表盘先选数据源再根据选中的数据源动态列出机器列表。3.1 创建新仪表盘并添加变量登录夜莺点击“仪表盘”菜单然后点击“新建”。给你的仪表盘起个响亮的名字比如“全局机器健康状态一览表”。创建好后我们把目光移到仪表盘页面的右上角。把鼠标悬停在页面标题下方、图表区域上方的那一小块区域你会看到一个微小的齿轮图标或“设置”文字浮现出来点击它。在弹出的菜单里选择“变量”。没错变量的配置入口就在这里有点隐蔽但记住它。点击“新增变量”我们来配置第一个变量。3.2 配置数据源变量第一个“旋钮”第一个变量我们用来切换不同的数据源比如测试环境和生产环境的数据可能在不同的Prometheus里。变量名称填prom。注意这里一般用英文因为后面会作为引用标识。显示名称填数据源。这个就是最终在仪表盘下拉框里显示给用户看的名字用中文更友好。变量类型这是关键在下拉菜单里选择数据源Datasource。数据源类型因为我们监控数据来自Prometheus格式的时序库所以这里选择Prometheus。如果你用的是VictoriaMetrics也选这个。数据源过滤这个可以先不填。如果你的数据源列表很长只想展示其中一部分可以用正则表达式来过滤比如.*prod.*只显示名字里带“prod”的数据源。配置完点击“确定”或“应用”。现在你的仪表盘顶部应该出现了一个叫“数据源”的下拉框了。3.3 配置机器变量第二个“联动开关”再次点击“新增变量”配置第二个也是更核心的变量。变量名称填ident。显示名称填机器。变量类型选择查询Query。这意味着这个下拉框里的选项是通过查询时序数据库动态获取的。数据源这里就是联动魔法生效的地方不要直接选择某个具体的数据源而是点击输入框选择${prom}。这表示“机器”这个变量的数据源取决于上面“数据源”变量你选了谁。你切换数据源机器列表自动跟着变。变量定义这里我们输入查询表达式。对于Prometheus生态最常用的函数是label_values。我们输入label_values(cpu_usage_active, ident)cpu_usage_active这是一个指标名来自Categraf的CPU插件。用它作为查询的“锚点”因为通常每台机器都会上报这个基础指标。ident我们要从这个指标数据里提取出ident这个标签的所有不同值这些值就是我们的机器列表。其他选项多选建议勾上。这样你可以同时选择多台机器进行对比。包含全选选项也建议勾上。方便一键查看所有机器。配置好之后回到仪表盘页面。你应该能看到两个下拉框“数据源”和“机器”。试着切换一下“数据源”看看“机器”列表会不会刷新。如果会恭喜你联动变量配置成功了这是构建动态仪表盘的基石。4. 第二步添加新版表格并配置数据查询变量准备好了现在该上主菜——表格了。4.1 添加图表并选择类型在仪表盘编辑页面点击“添加图表”。在图表编辑面板的右上角找到“图表类型”选择框。重要不要选普通的“表格”要滚动找到表格NG (Beta)这个选项。这就是我们今天的主角新版表格。4.2 配置四个核心指标的查询我们的目标是展示每台机器的四个关键SLICPU使用率、内存使用率、根分区使用率和Categraf版本。这需要配置四个独立的查询。在图表编辑器的“查询”标签页里确保数据源选择了${prom}联动我们的变量。然后我们逐个添加查询CPU使用率查询表达式cpu_usage_active{ident~$ident}解释查询cpu_usage_active指标并且通过{ident~$ident}来过滤只显示在“机器”变量中选中的那些机器。~是正则匹配因为$ident变量可能包含多个值。内存使用率查询表达式100 - mem_available_percent{ident~$ident}解释Categraf的input.mem插件默认提供的是mem_available_percent可用内存百分比。我们通常更关心“已使用”的百分比所以用100减去它。同样用$ident变量进行过滤。根分区使用率查询表达式disk_used_percent{ident~$ident, mount/}解释查询disk_used_percent指标除了用ident过滤机器还加了一个mount/的条件确保我们只取根分区/的数据。对于服务器监控根分区使用率是关键风险点。Categraf版本查询表达式categraf_info{ident~$ident}解释这个指标是Categrafinput.self_metrics插件上报的自身元信息里面有一个version标签记录了Categraf的版本号。我们查询这个指标后续可以从数据中提取出版本信息。关键点每一个查询表达式里都必须包含{ident~$ident}。这是确保你的表格数据能与顶部的“机器”变量下拉框联动的关键如果你这里写死了某个ident值那么切换机器选择时表格数据就不会变了。5. 第三步数据转换与字段关联现在我们有了四列数据但它们还是孤零零的四条查询结果怎么让属于同一台机器的数据站到同一行呢这就需要“数据转换”功能。在图表编辑器的右侧找到“转换”标签页可能也叫“Transform”。点击“添加转换”在长长的转换函数列表里找到并选择Join by field按字段连接。连接字段在弹出的配置框中在“连接字段”里输入ident。这就是我们之前反复提到的“身份证”。连接模式选择Outer join外连接。这个模式能确保即使某台机器的某个指标暂时没有数据比如刚上线还没采集到磁盘数据这台机器仍然会在表格中显示只是对应字段为空。这比内连接Inner join更友好不会因为单点数据缺失而“丢”掉整台机器。点击应用后你会发现表格数据一下子规整了原本可能每个查询返回多行数据现在被神奇地合并了每一行代表一台机器列则对应我们查询的四个指标。不过这时候表格可能还有很多多余的字段比如__name__,job,mount等等看起来有点乱。别急下一步我们就来打扫战场只留下我们想要的。6. 第四步字段定制与可视化优化这是让表格从“能用”变得“好看又好用”的关键一步。我们通过“字段覆盖”功能对每一列进行精装修。6.1 隐藏无用字段重命名关键列首先在“字段覆盖”区域通常在编辑器下方找到“添加字段覆盖”的按钮。我们添加一条覆盖规则匹配字段选择“通过正则表达式匹配”。字段名称输入(value|__name__|job|mount|path)。这是一个正则表达式用来匹配那些我们不想在最终表格里显示的原始字段名。属性找到“自定义”下的“隐藏”选项把它打开设为true。这样一来那些技术性的、对查看无帮助的字段就从表格视图里消失了界面瞬间清爽。接下来为我们关心的四列数据设置好记的名字。分别添加四条覆盖规则匹配字段cpu_usage_active设置“显示名称”为CPU使用率(%)。匹配字段表达式100 - mem_available_percent注意这里匹配的是经过计算后的字段名设置“显示名称”为内存使用率(%)。匹配字段disk_used_percent设置“显示名称”为根分区使用率(%)。匹配字段categraf_info设置“显示名称”为Categraf版本。6.2 为数值列添加炫酷的可视化单纯的数字不够直观我们给CPU、内存、磁盘加上颜色背景或迷你图表。CPU使用率颜色背景添加一条针对cpu_usage_active字段的覆盖。找到“单元格显示模式”选择“彩色背景”或“渐变背景”。然后配置“阈值”。这是核心比如绿色value 70健康黄色value 70 and value 85警告红色value 85危险这样CPU使用率就会根据数值范围显示不同颜色的背景一眼就能发现“红温”的机器。内存使用率与根分区使用率量表图对于内存使用率(%)和根分区使用率(%)我们可以用更直观的迷你量表图。分别添加字段覆盖找到“单元格显示模式”选择“量表”。在量表设置里你可以定义量表的范围如0-100、颜色主题通常绿-黄-红渐变以及当前值指针。一个配置得当的量表能让你在数字之外瞬间感知到使用率是“轻松”、“紧张”还是“爆表”。Categraf版本纯文本这个字段我们只需要显示版本号文本。但默认categraf_info查询返回的是指标值通常是1版本信息在version标签里。所以我们需要为这个字段添加一个特殊的覆盖找到“值映射”或“转换”选项。在夜莺表格NG中通常可以在字段覆盖里找到“自定义显示”或“提取标签”的功能。你需要添加一个规则将categraf_info这个字段的显示内容从其version标签中提取。具体配置路径可能是“覆盖” - “为该字段添加转换” - 选择“从字段中提取标签值”然后指定源字段为categraf_info提取的标签名为version。这样表格中显示的就是具体的版本号如v0.4.0而不是无意义的数字1了。经过这一番配置你的表格应该已经脱胎换骨行是机器列是清晰命名的核心指标CPU列有颜色告警内存和磁盘列有直观的量表版本号也正确显示。你可以通过顶部的下拉框切换数据源、筛选机器表格内容会实时联动变化。7. 进阶技巧与避坑指南配置基本跑通了但想用得顺手还得知道一些“骚操作”和容易踩的坑。7.1 实现多级变量联动我们之前实现了数据源-机器的联动。但有时候需求更复杂。比如我想先选机器再根据机器动态列出这台机器上的网卡然后查看某块网卡的流量。这需要第三个变量并且它要引用第二个变量。按照3.3的步骤创建第三个变量名称比如interface显示名“网卡”。在它的“变量定义”里可以这样写label_values(net_bits_recv{ident~$ident}, interface)这个表达式的意思是查询net_bits_recv网络接收流量指标但只查询那些ident标签匹配当前选中的机器$ident的数据然后从这些数据中提取出interface网卡名标签的所有值作为下拉选项。这样当你改变“机器”选择时“网卡”下拉框里的选项会自动刷新只显示那台机器上的网卡。这就是多级联动让你的仪表盘检索能力更精准。7.2 处理数据缺失与Join异常有时候配置完表格里会出现空行或者数据对不上。常见原因和解决办法ident标签不一致确保你所有查询的指标中机器的标识都使用同一个标签键比如都是ident。如果有的指标用instance有的用hostnameJoin就会失败。可以在Categraf配置中统一全局标签。指标不存在某台机器可能因为采集器配置问题没有上报categraf_info或disk_used_percent指标。使用Outer join可以保证机器仍显示但对应单元格为空。你可以考虑在字段覆盖中为空的单元格设置一个默认显示文本如“N/A”。查询性能优化如果你的机器数量很大上千台在变量定义中使用label_values(metric_name, label)可能会比较慢。可以尝试在查询中增加一个时间范围过滤例如label_values(metric_name[5m], label)表示只查询最近5分钟有活跃数据的机器能有效提升下拉框加载速度。7.3 从机器监控到万物监控这个表格模板的威力远不止监控物理机或虚拟机。它的核心思路是通过一个关键标签如ident,instance,cluster关联多个指标集中展示监控对象的健康状态。你可以举一反三监控MySQL实例用instance或db_host作为关联标签关联查询mysql_up存活状态、mysql_global_status_queries查询数、mysql_global_status_threads_connected连接数、mysql_info_schema_version版本等指标。监控Kubernetes Pod用pod作为关联标签关联CPU、内存使用量、重启次数、状态等指标。监控交换机端口用device和ifName作为关联标签展示端口的入/出流量、错误包数、状态up/down。本质上任何你能用同一个标签关联起来的监控实体都可以用这套方法做成一个一目了然的监控表格。我在实际工作中就用这个方式为数据库团队、中间件团队定制了他们的专属实例健康视图告别了在无数个曲线图里大海捞针的痛苦。