Grafana 教程

日志(Logs)

日志可视化显示来自支持日志的数据源(如 Elastic、Influx 和 Loki)的日志行。通常情况下,您会在图形可视化旁边使用此可视化来显示相关流程的日志输出。

1681214082f5c6c159170353f3b8eb2d_1709528970350-b2f91c4a-822d-48e9-9720-d76971c20c78.png

日志可视化显示在查询选项卡中输入的查询结果。多个查询的结果会合并,并按时间排序。如果数据源返回的行数多于可同时显示的行数,可以在面板内滚动。

要限制显示的行数,可以使用查询选项中的最大数据点设置。如果没有设置,数据源通常会执行默认限制。

一个示例

该示例使用 mysql 作为数据源,假如我们存在如下数据表格:

image.png

该数据库表的 SQL 如下:

CREATE TABLE `logs_data` (
  `id` varchar(50) NOT NULL,
  `time` datetime DEFAULT NULL,
  `labels` varchar(200) DEFAULT NULL,
  `line` varchar(200) DEFAULT NULL,
  `tsNs` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

对应的数据 SQL 语句如下:

INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177000_1000', '2024-05-01 12:30:00', '{\"id\": \"100\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"200\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177000');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177001_1001', '2024-05-02 12:30:00', '{\"id\": \"101\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"201\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177001');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177002_1002', '2024-05-03 12:30:00', '{\"id\": \"102\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"202\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177002');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177003_1003', '2024-05-04 12:30:00', '{\"id\": \"103\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"203\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177003');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177004_1004', '2024-05-05 12:30:00', '{\"id\": \"104\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"204\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177004');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177005_1005', '2024-05-06 12:30:00', '{\"id\": \"105\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"205\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177005');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177006_1006', '2024-05-07 12:30:00', '{\"id\": \"106\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"206\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177006');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177007_1007', '2024-05-08 12:30:00', '{\"id\": \"107\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"207\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177007');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177008_1008', '2024-05-09 12:30:00', '{\"id\": \"108\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"208\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177008');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177009_1009', '2024-05-10 12:30:00', '{\"id\": \"109\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"209\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177009');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177010_1010', '2024-05-11 12:30:00', '{\"id\": \"110\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"210\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177010');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177011_1011', '2024-05-12 12:30:00', '{\"id\": \"111\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"211\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177011');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177012_1012', '2024-05-13 12:30:00', '{\"id\": \"112\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"212\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177012');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177013_1013', '2024-05-14 12:30:00', '{\"id\": \"113\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"213\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177013');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177014_1014', '2024-05-15 12:30:00', '{\"id\": \"114\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"214\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177014');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177015_1015', '2024-05-16 12:30:00', '{\"id\": \"115\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"215\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177015');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177016_1016', '2024-05-17 12:30:00', '{\"id\": \"116\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"216\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177016');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177017_1017', '2024-05-18 12:30:00', '{\"id\": \"117\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"217\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177017');
INSERT INTO `logs_data` (`id`, `time`, `labels`, `line`, `tsNs`) VALUES ('17177018_1018', '2024-05-19 12:30:00', '{\"id\": \"118\",\"title\": \"labels title\",\"summary\": \"labels summary\"}', '{\"id\": \"218\",\"title\": \"line title\",\"summary\": \"line summary\"}', '17177018');

打开 Grafana,创建日志图表,使用如下 SQL 作为图表的数据:

SELECT labels, UNIX_TIMESTAMP(time) as time, line, tsNs, id FROM `logs_data`

然后,点击“image.png”按钮,查询数据,用来渲染图表,渲染后的效果如下图:

image.png

Log level(日志级别)

对于指定了级别标签的日志,我们会使用标签值来确定日志级别,并相应地更新颜色。如果日志没有指定级别标签,我们会尝试查找其内容是否与任何支持的表达式相匹配。日志级别总是由第一个匹配项决定。如果 Grafana 无法确定日志级别,则会以未知日志级别显示。

提示:如果您使用的是 LOKI 数据源,并且“Level”是日志行的一部分,则可以使用解析器 (JSON、logfmt、regex、..)。将级别信息提取到用于确定级别值的级别标签中。这将允许直方图将各种日志级别显示为单独的条形图。

下表是支持的日志级别以及日志级别缩写和表达式的映射:

日志级别颜色支持的表达式
critical 严重错误日志purple 紫色emerg, fatal, alert, crit, critical
error 错误日志red 红色err, eror, error
warning 警告日志yellow 黄色warn, warning
infogreen 绿色info, information, informational, notice
debug 调试日志blue 蓝色dbug, debug
tracelight blue 浅蓝色trace
unknowngrey 灰色*

Log details(日志详情)

每行日志都有一个可扩展区域,其中包含标签和检测字段,以便进行更强大的交互。每个字段或标签都有一个统计图标,用于显示与所有显示日志相关的临时统计数据。

Data links(数据链接)

通过使用数据链接,您可以将日志信息的任何部分转化为内部或外部链接。创建的链接在日志详细信息视图中的链接部分以按钮的形式显示。

Display options(显示选项)

image.png

使用这些设置完善您的日志可视化:

  • Time - 显示或隐藏时间列,这是数据源报告的与日志行相关的时间戳。

  • Unique labels - 显示或隐藏唯一标签列,该列只显示不常用的标签。

  • Common labels - 显示或隐藏通用标签。

  • Wrap lines - 切换换行。

  • Prettify JSON - 将此设置为 "true" 打印出的所有 JSON 日志都是格式化后的,格式良好的。此设置不会影响 JSON 以外的任何格式的日志。

  • Enable log details - 切换选项以查看每行日志的日志详细信息视图,默认设置为 true。

  • Order - 按降序或升序时间顺序显示结果。默认为降序,首先显示最新日志。设置为升序则首先显示最旧的日志行。

News(新闻)

新闻可视化会显示 RSS 源。默认情况下,它显示来自 Grafana Labs 博客的文章,用户可以通过输入不同的 RSS 源 URL 进行更改。

在 "显示" 部分的 URL 字段中输入 RSS 的 URL。此可视化类型不接受任何其他查询,用户不应期望能够使用此可视化以任何方式过滤或查询 RSS 源数据。

在 8.5 版中,我们停止了 Grafana 新闻可视化的 "Use Proxy" 选项。因此,未配置为由 Grafana 前端请求的 RSS 订阅(带有相应的 CORS 标头)可能无法加载。

如果在加载 RSS 源时遇到困难,可以尝试将 RSS 源重新托管到不同的服务器上或使用 CORS 代理。CORS 代理是一种工具,可让你绕过 CORS 限制,以你的名义向 RSS 源发出请求。你可以在网上找到更多关于使用 CORS 代理的信息。

如果无法使用新闻可视化显示 RSS 源,可以尝试使用社区 RSS/Atom 数据源插件 RSS/Atom 数据源,并结合动态文本社区面板动态文本。这样就能以不同的方式显示 RSS 源。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号