连接到 Oracle 数据库数据源 - Amazon Managed Grafana

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

连接到 Oracle 数据库数据源

注意

此数据源仅适用于 Grafana Enterprise。有关更多信息,请参阅 管理对企业插件的访问权限

此外,在支持版本 9 或更高版本的工作空间中,此数据源可能需要您安装相应的插件。有关更多信息,请参阅 使用插件扩展您的工作空间

添加数据源

在 Grafana 的左侧面板上选择 “数据源”。

选择添加数据源:

输入oracle以查找数据源。

输入 Oracle 服务器的详细信息。

输入主机名(或 IP 地址)以及要连接的端口号以及用户名和密码。

切换 tnsnames 选项后,可以使用 tnsnames.ora 配置文件中找到的任何有效条目以及基本身份验证。

与前面的示例类似,但使用 Kerberos 进行身份验证。有关如何将操作系统或 docker 容器配置为使用 kerberos 的详细信息,请参阅 kerberos 特定的设置指南。

(可选)更改用于连接到 Oracle 服务器的时区以及支持时区的宏所使用的时区。默认设置为 UTC。

保存并测试数据源,您应该会看到一条绿色消息,上面写着 “数据库连接正常”

使用量

为了简化语法并允许使用动态部分,例如日期范围筛选器,查询可以包含宏。列名必须包含在双引号 (") 中。

宏观示例 描述
*$__time (dateColumn) * | 将替换为表达式,将该列重命名为 “时间”。例如,“dateColumn as time” *$__timeePoch (dateColumn) * 将替换为将列重命名为的表达式,time并将该值转换为 unix 时间戳(以毫秒为单位)。
*$__timeFilter (dateColumn) * | 将被使用指定列名的时间范围过滤器所取代。例如,`DateColumn TO_DATE ('19700101'、'yyyymmdd') + (1/24/60/60/1000) * 1500376552001 和 TO_DATE ('19700101','yyyymmdd') + (1/24/60/60/1000) * 1500376552002` *$__TimeFrom () * (1/24/60/60/1000) * 1500376552002` *$__TimeFrom () * 将替换为当前活动时间选择的开头转换为DATE数据类型。例如,TO_DATE('19700101','yyyymmdd') + (1/24/60/60/1000) * 1500376552001
*$__timeTo () * | 将被当前活动时间选择的结尾替换为 `DATE` 数据类型。 *$__TimeGroup(DateColumn,“500m”)* 将替换为 GROUP BY 子句中可用的表达式。
*$__timeGroup(dateColumn,“5m” [,fillvalue])* 将替换为 GROUP BY 子句中可用的表达式。提供 FillValue 为 NULL 或浮动值将自动用该值填充时间范围内的空序列。例如,ti m e G r o u p c r e a t e d A t、'1 m '、0。 *__TimeGroup(日期列,“5m”,0)*。
* t i m e G r o u p (d a t e C o l u m n、'5 m '、N U L L) * | S a m e a s a b o v e e a s a b o v e eb u t n U L L l w i l b e u s e d a s v a l u e f o r m i s s s i s s i s i s i n gp o i n t s。 *__TimeGroup(日期列,“5m”,之前的)* 与上面相同,但如果尚未看到任何值,则将使用该系列中的前一个值作为填充值。
*$__ unixEpochFilter (dateColumn) * | 将替换为使用指定列名的时间范围过滤器,时间以 unix 时间戳(以毫秒为单位)表示。例如,`dateColumn >= 1500376552001 和 dateColumn <= 1500376552002` *$__ () * unixEpochFrom 将被当前活动时间选择的开头替换为 unix 时间戳。例如,1500376552001
*$__unixEpochTo()* 将被当前活动时间选择的末尾替换为 unix 时间戳。例如,1500376552002

该插件还支持使用大括{}号表示法。当需要在参数内进行查询时,请使用此表示法。

注意

每个查询使用一种符号类型。如果查询需要大括号,则查询中的所有宏都必须使用大括号。

$__timeGroup{"dateColumn",'5m'} $__timeGroup{SYS_DATE_UTC("SDATE"),'5m'} $__timeGroup{FROM_TZ(CAST("SDATE" as timestamp), 'UTC'), '1h'}

查询编辑器有一个 “生成的 SQL” 链接,该链接在查询运行后即显示在面板编辑模式下。当您选择链接时,它会展开并显示已运行的原始插值 SQL 字符串。

表格查询

如果 “格式化为查询” 选项设置为 “”,则基本上可以执行任何类型的 SQL 查询。表格面板将自动显示您的查询返回的任何列和行的结果。您可以使用常规 as SQL 列选择语法来控制 “表” 面板列的名称。

时间序列查询

例如,如果您将 “格式设置为时间序列”,以便在 “图形” 面板中使用,则查询必须返回一个名为的列time,该列将返回 SQL 日期时间或任何以秒为单位表示 unix 纪元的数字数据类型。Grafana 将没有明确时区的日期和时间戳列解释为 UTC。除time和之外的任何列metric都被视为值列。您可以返回一个名为的列metric,该列用作值列的指标名称。

以下代码示例显示了该metric列。

SELECT $__timeGroup("time_date_time", '5m') AS time, MIN("value_double"), 'MIN' as metric FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY $__timeGroup("time_date_time", '5m') ORDER BY time

更多查询 — 使用 oracle-fake-data-gen

SELECT $__timeGroup("createdAt", '5m') AS time, MIN("value"), 'MIN' as metric FROM "grafana_metric" WHERE $__timeFilter("createdAt") GROUP BY $__timeGroup("createdAt", '5m') ORDER BY time

以下代码示例显示了 Fake Data 时间序列。

SELECT "createdAt", "value" FROM "grafana_metric" WHERE $__timeFilter("createdAt") ORDER BY "createdAt" ASC
SELECT "createdAt" as time, "value" as value FROM "grafana_metric" WHERE $__timeFilter("createdAt") ORDER BY time ASC

以下示例显示了一个有用的表格结果。

select tc.table_name Table_name ,tc.column_id Column_id ,lower(tc.column_name) Column_name ,lower(tc.data_type) Data_type ,nvl(tc.data_precision,tc.data_length) Length ,lower(tc.data_scale) Data_scale ,tc.nullable nullable FROM all_tab_columns tc ,all_tables t WHERE tc.table_name = t.table_name

模板化

与其在指标查询中对服务器、应用程序和传感器名称等内容进行硬编码,不如使用变量代替它们。变量显示为仪表板顶部的下拉选择框。这些下拉框可以轻松更改仪表板中显示的数据。

查询变量

如果添加该类型的模板变量Query,则可以编写一个 Oracle 查询,该查询可以返回显示为下拉选择框的测量名称、键名或键值之类的内容。

例如,如果您在模板变量 Query 设置中指定这样的查询,则可以有一个包含表中hostname列所有值的变量。

SELECT "hostname" FROM host

一个查询可以返回多列,Grafana 会自动根据这些列创建一个列表。例如,以下查询将返回一个包含hostname和值的列表hostname2

SELECT "host.hostname", "other_host.hostname2" FROM host JOIN other_host ON host.city = other_host.city

要使用与时间范围相关的宏(例如$__timeFilter("time_column")在查询中),需要将模板变量的刷新模式设置为 On T ime Range Ch ange。

SELECT "event_name" FROM event_log WHERE $__timeFilter("time_column")

另一种选择是可以创建键/值变量的查询。该查询应返回名为__text和的两列__value__text列值应该是唯一的(如果它不是唯一的,则使用第一个值)。下拉列表中的选项将具有文本和值,允许您将友好名称作为文本,将ID作为值。以下示例代码显示了以hostname文本和值id为值的查询。

SELECT "hostname" AS __text, "id" AS __value FROM host

您也可以创建嵌套变量。例如,如果你有另一个名为的变量region。然后,你可以让 hosts 变量仅通过这样的查询显示当前选定区域的主机(如果region是多值变量,则使用IN比较运算符而不是与多个值=进行匹配)。

SELECT "hostname" FROM host WHERE region IN('$region')

在查询中使用变量

仅当模板变量为 a 时,才会引用模板变量值multi-value

如果该变量是多值变量,则使用IN比较运算符,而不是与多个值=进行匹配。

有两种语法:

$<varname>带有名为的模板变量的示例hostname

SELECT "atimestamp" as time, "aint" as value FROM table WHERE $__timeFilter("atimestamp") AND "hostname" IN('$hostname') ORDER BY "atimestamp" ASC

[[varname]]带有名为的模板变量的示例hostname

SELECT "atimestamp" as time, "aint" as value FROM table WHERE $__timeFilter("atimestamp") AND "hostname" IN('[[hostname]]') ORDER BY atimestamp ASC