选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

连接到 SAP HANA 数据来源

聚焦模式
连接到 SAP HANA 数据来源 - Amazon Managed Grafana

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

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

SAP HANA 是一种高性能的内存数据库,可加快数据驱动的实时决策和操作。它由 SAP 开发和销售。SAP HANA 数据来源插件可帮助您将 SAP HANA 实例与 Grafana 连接起来。

借助 SAP HANA Grafana Enterprise 插件,您可以在 Grafana 中将您的 SAP HANA 数据,与 Grafana 中的所有其他数据来源以及上下文中的日志和指标数据一起可视化。该插件包括内置的查询编辑器,它支持注释,并允许您设置警报阈值,控制访问权限,设置权限等。

注意

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

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

特征

  • 查询编辑器:该插件带有内置的 SQL 查询编辑器,具有语法突出显示功能,使您能够可视化时间序列或表数据,并自动完成基本的 Grafana 宏。

  • 数据来源权限:控制谁可以在 Grafana 中查看或查询 SAP HANA 数据。

  • 注释:在任何 Grafana 图表上叠加 SAP HANA 事件或数据,将事件与其他图表数据关联起来。

  • 警报:在 SAP HANA 中设置基于警报的指标存储。

  • 查询变量:在 Grafana 中创建基于 SAP HANA 数据的模板变量,并在 SAP HANA 查询中包含变量以使控制面板具有交互性。

添加数据来源

  1. 在 Amazon Managed Grafana 工作区中打开 Grafana 控制台,并确保您已登录。

  2. 配置(齿轮图标)下的侧边菜单中,选择数据来源

  3. 选择添加数据来源

    注意

    如果您在侧边菜单中看不到数据来源链接,则表示您当前的用户没有 Admin 角色。

  4. 从数据来源列表中选择 SAP HANA

  5. 在配置编辑器中,输入以下信息:

    • 对于服务器地址,提供 SAP HANA 实例的地址。示例:xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx.hana.trial-us10.hanacloud.ondemand.com

    • 对于服务器端口,提供 SAP HANA 实例的端口。

    • 对于用户名,输入用于连接到 SAP HANA 实例的用户名。

    • 对于密码,输入该用户的密码。

    • (可选)如果您想跳过 TLS 验证,请启用跳过 TLS 验证

    • (可选)如果您需要提供客户端证书和密钥,请启用 TLS 客户端身份验证

    • (可选)如果您要启用自签名 TLS 证书的验证,请启用使用 CA 证书

    • (可选)对于默认架构,输入要使用的默认架构。如果省略此项,则需要在每个查询中指定架构。

访问权和权限

要将 Grafana 连接到 SAP HANA,请使用专用凭证。仅向用户提供所需的权限。首先,使用用户名和密码创建一个受限用户。以下查询是创建受限用户的示例。此查询还会禁用强制密码更改。

CREATE RESTRICTED USER <USER> PASSWORD <PASSWORD> NO FORCE_FIRST_PASSWORD_CHANGE;

接下来,允许用户通过诸如 Grafana 之类的客户端连接系统,连接时会涉及以下内容:

ALTER USER <USER> ENABLE CLIENT CONNECT;

最后,允许用户访问所需的视图、表和架构。

ALTER USER <USER> GRANT ROLE PUBLIC; GRANT SELECT ON SCHEMA <SCHEMA> TO <USER>;

用户级权限

单击数据来源配置页面中的“权限”选项卡以启用数据来源权限,从而限制对 SAP HANA 的访问权限。在权限页面上,管理员可以启用权限并将查询权限限制为特定的用户和团队。

查询编辑器

SAP HANA Grafana 插件附带一个 SQL 查询编辑器,您可以在其中输入任何 HANA 查询。如果您的查询返回时间序列数据,则可以将其格式化为时间序列,以便在图表面板中对其进行可视化。查询编辑器为支持的 Grafana 宏提供自动完成功能,并突出显示 SQL 查询的语法。

Annotations

您可以使用 SAP HANA 查询作为 Grafana 注释的来源。您的注释查询应至少返回一个时间列和一个文本列。有关注释的详细信息,请参阅Annotations

从 SAP HANA 创建注释
  1. 选择控制面板设置齿轮图标。

  2. 从左侧菜单中选择注释新建

  3. 数据来源下拉菜单中,选择您的 SAP HANA 数据来源实例。

  4. 查询字段中,输入至少返回一个时间字段和一个文本字段的 SAP HANA 查询。

  5. 格式化为下拉菜单中,选择时间序列

  6. 为每个注释配置字段。

模板和变量

要添加新的 SAP HANA 查询变量,请参阅添加查询变量。使用 SAP HANA 数据来源作为数据来源。

以下示例查询将返回来自 users 表的 username 唯一列表。

select distinct("username") from "users"
注意

确保在变量查询中只选择一列。如果您的查询返回两列,则第一列将用作显示值,第二列将用作变量的实际值。如果您的查询返回的列超过两列,则它们将被拒绝。

模板和变量

您可以在查询中使用任何 Grafana 变量。以下示例说明如何在查询中使用单个/多个变量。

-- For example, following query select * from "users" where "city" = ${city} -- will be translated into select * from "users" where "city" = 'london' --- where you can see ${city} variable translated into actual value in the variable

与文本类似,变量也适用于数值字段。在下面的示例中,${age} 是一个文本框变量,它接受数字,然后与表中的数值字段进行比较。

select * from "users" where "age" > ${age} --- wil be translated into select * from "users" where "age" > '36'

如果您的变量返回多个值,则可以在 SAP HANA 查询的 in 条件中使用它,如下所示。请注意变量周围的方括号,以使 where in 条件在 SAP HANA 中有效。

select * from "users" where "city" in (${cities}) --- will be translated into select * from "users" where "city" in ('london','perth','delhi') --- where you can see ${cities} turned into a list of grafana variables selected. --- You can also write the same query using shorthand notation as shown below select * from "users" where "city" in ($cities)

  • $__timeFilter(<time_column>):在原始查询中使用 Grafana 的时间范围时,将其应用于指定列。适用于date/timestamp/long时间列。

  • $__timeFilter(<time_column>, <format>):同上。但是可以指定存储在数据库中的 time_column 的格式。

  • $__timeFilter(<time_column>, "epoch", <format>):同上,但可以在时间列处于纪元时使用。格式可以是“s”、“ms”和“ns”之一。

  • $__fromTimeFilter(<time_column>):同上,但可以在时间列处于纪元时使用。格式可以是“s”、“ms”和“ns”之一。

  • $__fromTimeFilter(<time_column>, <comparison_predicate>):同上,但能够指定 comparison_predicate。

  • $__fromTimeFilter(<time_column>, <format>):同上,但可以指定时间列的格式。

  • $__fromTimeFilter(<time_column>, <format>, <comparison_predicate>):同上,但能够指定 comparison_predicate。

  • $__toTimeFilter(<time_column>):根据 Grafana 的“到”时间返回时间段的时间条件。

  • $__toTimeFilter(<time_column>, <comparison_predicate>):同上,但能够指定 comparison_predicate。

  • $__toTimeFilter(<time_column>, <format>):同上,但可以指定时间列的格式。

  • $__toTimeFilter(<time_column>, <comparison_predicate>):同上,但能够指定 comparison_predicate。

  • $__timeGroup(<time_column>, <interval>):将时间列扩展为间隔组。适用于date/timestamp/long时间列...

$__timeFilter(<time_column>) 宏

以下示例解释了该 $__timeFilter(<time_column>) 宏:

- In the following example, the query select ts, temperature from weather where $__timeFilter(ts) --- will be translated into select ts, temperature from weather where ts > '2021-02-24T12:52:48Z' AND ts < '2021-03-24T12:52:48Z' --- where you can see the grafana dashboard's time range is applied to the column ts in the query.

$__timeFilter(<time_column>, <format>) 宏

在某些情况下,数据库中的时间列以自定义格式存储。以下示例解释了 $__timeFilter(<time_column>, <format>) 宏,它有助于基于 Grafana 的时间选择器筛选自定义时间戳:

SELECT TO_TIMESTAMP("TS",'YYYYMMDDHH24MISS') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYYMMDDHH24MISS") -- TS is in 20210421162012 format SELECT TO_TIMESTAMP("TS",'YYYY-MON-DD') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYY-MON-DD") -- TS is in 2021-JAN-15 format

在宏中,该格式可以是与您的时间戳列匹配的有效 HANA 格式之一。例如,当您的数据以 20210421162012 格式存储时,YYYYMMDDHH24MISS 是一种有效的格式。

$__timeFilter(<time_column>, "epoch" <format>) 宏

在某些情况下,时间戳作为纪元时间戳存储在数据库中。以下示例对 $__timeFilter(<time_column>, "epoch" <format>) 宏进行了说明,该宏有助于基于 Grafana 的时间选择器筛选纪元时间戳。在宏中,格式可以是 ms、s 或 ns 之一。如果未指定格式,则 s 将被视为默认格式。

SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","s") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- Example : TIMESTAMP field stored in epoch_ms format 1257894000000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000000000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ns") -- Example : TIMESTAMP field stored in epoch_nanoseconds format 1257894000000000000

您可以使用 epoch_s、epoch_ms 或 epoch_ns 之一作为第二个参数,而不是使用 $__TimeFilter 的第三个参数。

SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- is same as SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch_ms")

$__ fromTimeFilter () 和 $__ toTimeFilter () 宏

$__fromTimeFilter() 宏根据 Grafana 时间选择器的“从”时间扩展到时间段的条件。

这将接受三个参数。第一个参数是时间字段名称。您可以传递 comparison_predicate 或时间列的格式作为第二个参数。如果您想同时传递这两个参数,那么格式就是第二个参数,并使用 comparison_predicate 作为第三个参数。

<format>如果未指定格式,插件将假定时间列为timestamp/date type. If your time column is stored in any other format than timestamp/date,然后将格式作为第二个参数传递。 <format>可以是 epoch_s、epoch_ms、epoch_ns 或任何其他自定义格式之一,例如。 YYYY-MM-DD

<comparison_predicate> 可选参数。如果未传递,插件将使用 > 作为比较谓词。<comparison_predicate> 可以是 =、!=、 <>、<、<=、>、>、>=

$__toTimeFilter()工作原理与 $__ fromTimeFilter () 相同。它不会使用 Grafana 的“从”时间,而是会使用 Grafana 的“到”时间。此外,默认比较谓词将为 <。

$__timeGroup(<time_column>, <interval>)

例如,在查询中,宏 $__TimeGroup(timecol,1h) 扩展为 SERIES_ROUND("timecol", 'INTERVAL 1 HOUR')。

以下示例解释了 $__timeGroup(<time_column>, <interval>) macro.

SELECT $__timeGroup(timestamp,1h), "user", sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp,1h), "user" ORDER BY $__timeGroup(timestamp,1h) ASC

这将被转换为以下查询,其中 $__timeGroup(timestamp,1h) 扩展为 SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR')

SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR') as "timestamp", "user", sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2020-01-01T00:00:00Z' AND "timestamp" < '2020-01-01T23:00:00Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR'), "user" ORDER BY "timestamp" ASC
注意

对 $__TimeGroup 宏使用分组依据时,请确保您的选择、排序依据字段与您的分组依据字段的名称相同。否则,HANA 可能无法识别查询。

如果您不想在 $__timeGroup() 函数中对间隔进行硬编码,那么您可以通过将 $__interval 指定为间隔来将其留给 Grafana。Grafana 将根据控制面板的时间范围计算该间隔。示例查询:

SELECT $__timeGroup(timestamp, $__interval), sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp, $__interval) ORDER BY $__timeGroup(timestamp, $__interval) ASC

该查询将根据控制面板的时间范围转换为以下查询。

SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE'), sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2019-12-31T23:09:14Z' AND "timestamp" < '2020-01-01T23:17:54Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ORDER BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ASC

警报

要在 Grafana 中设置 SAP HANA 警报
  1. 在控制面板中创建图表面板。

  2. 以时间序列格式创建 SAP HANA 查询。

  3. 选择警报选项卡并指定警报标准。

  4. 选择测试规则以测试警报查询。

  5. 指定警报收件人、消息和错误处理。

  6. 保存控制面板。

针对非时间序列数据发出警报

要针对非时间序列数据发出警报,请使用 TO_TIMESTAMP('${__to:date}') 宏将非时间序列指标转换为时间序列。这会将您的指标转换为单点时间序列查询。查询的格式如下所示

SELECT TO_TIMESTAMP('${__to:date}'), <METRIC> FROM <TABLEWHERE <YOUR CONDITIONS>

在以下示例中,表中有四个字段,分别是用户名、年龄、城市和角色。此表不提供任何时间字段。我们希望在具有开发角色的用户数量少于三时发出通知。

SELECT TO_TIMESTAMP('${__to:date}'), count(*) as "count" FROM ( SELECT 'John' AS "username", 32 AS "age", 'Chennai' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Jacob' AS "username", 32 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Ali' AS "username", 42 AS "age", 'Delhi' as "city", 'admin' as "role" FROM dummy UNION ALL SELECT 'Raja' AS "username", 12 AS "age", 'New York' as "city", 'ceo' as "role" FROM dummy UNION ALL SELECT 'Sara' AS "username", 35 AS "age", 'Cape Town' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Ricky' AS "username", 25 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Angelina' AS "username", 31 AS "age", 'London' as "city", 'cxo' as "role" FROM dummy ) WHERE "role" = 'dev'

本页内容

下一主题:

ServiceNow

上一主题:

Salesforce
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。