亚马逊AWS官方博客

使用AWS 托管的普罗米修斯监控SAP HANA

介绍

SAP Solution Manager提供SAP商务套件和OS/DB的监控,很多企业发现Solution Manager 资源占用太重,所以都不愿意轻易部署在云端。AWS发布了Amazon Managed Service for Prometheus (AMP) ,它允许您创建一个完全托管的、安全的、与普罗米修斯(Prometheus) 兼容的环境来摄取、查询和存储 Prometheus 指标,并整合基于云原生的Amazon Managed Grafana,提供轻量级监控,不仅支持监控传统软件,OS/DB,云原生和集群,而且提供大屏。在本文中,我们将演示如何将 AMP 用于这些系统,例如 SAP HANA 在Amazon Elastic Compute Cloud (Amazon EC2)或本地环境上运行的任何其他单体应用。

 

设置

在此示例中,我们将执行以下步骤:

  • 使用AWS Launch Wizard for SAP在运行 SUSE Linux 的 EC2 实例上启动 SAP HANA
  • 在 Prometheus 服务器上安装 SAP HANA DB Exporter,并使用 Prometheus 客户端库在/metrics下公开 Prometheus 端点。
  • 创建一个 Amazon Prometheus 服务 (AMP) 工作区
  • 运行 Prometheus 服务器以通过代理将 SAP HANA 指标导出到 AMP。
  • 在远程桌面上配置 Grafana 服务器以查询我们的 AMP 工作区。您也可以使用我们最近发布的用于 Grafana 的 Amazon Managed Service以查询 AMP。

 

对应的架构可以可视化如下:

图1 – 基于Prometheus的SAP HANA监控架构

 

在此示例中,我们选择了美国东部(弗吉尼亚北部)us-east-1 区域。请访问AWS 区域服务列表以查看该服务支持的 AWS 区域。

 

Amazone EC2上创建HANA

本演练的第一步是使用AWS Launch Wizard for SAP 创建基于EC2的HANA。

创建好的HANA DB EC2如下:

 

它将托管我们的应用程序并将其指标转发到我们稍后将创建的 AMP 工作区。我们建议使用附加到实例的 IAM 角色,我们可以附加策略AmazonPrometheusRemoteWriteAccess来为实例提供最低限度的权限。

 

SAP HANA DB Exporter安装

配置实例后,我们可以登录到我们的SAP HANA DB实例并安装 SAP HANA 数据库exporter。用 Python 编写的 Prometheus exporter,用于导出 SAP HANA 数据库指标。

 

先决条件

  1. 一个正在运行且可访问的 SAP HANA 数据库(单容器或多容器)。建议在运行 HANA 数据库的同一台机器上运行exporter。理想情况下,每个数据库都应由一个exporter监控。
  2. 作为SAP HANA DB exporter,您有两个选择:
  1. SAP Host 代理在 HANA 监控视图上收集了一些指标。确保已安装并运行它以访问所有监控指标。
  2. 指标标文件(Metrics file): exporter使用附加文件来了解将要导出的指标。这里有更多关于指标文件的信息

 

Exporter安装

可通过以下两种方式可获得对应的exporter:

 

  • 方式一:通过RPM获取

在 openSUSE 或 SUSE Linux Enterprise 上使用zypper包管理器:

zypper install prometheus-hanadb_exporter

  • 方式二:采用手动克隆

Exporter是为与 Python3 一起使用而开发的。如果 SUSE linux版本的 repon 中没有Phthon3 ,请遵循Build Python from source 进行创建。

# zypper install git #If the git has not been installed 
git clone https://github.com/SUSE/hanadb_exporter
cd hanadb_exporter # project root folder
# pip install virtualenv #If the virtualenv has not been installed
virtualenv virt
source virt/bin/activate
# uncomment one of the next two options (to use hdbcli, you will need to have the HANA client folder where this python package is available)
# pip install pyhdb
# pip install path-to-hdbcli-N.N.N.tar.gaz
pip install .
# pip install -e . # To install in development mode
# deactivate # to exit from the virtualenv

 

如果您愿意,可以将PyHDB SAP HANA 连接器作为RPM包安装(例如 Tumbleweed,但可用于其他版本):

# All the commands must be executed as root user
zypper addrepo https://download.opensuse.org/repositories/network:/ha-clustering:/sap-deployments:/devel/openSUSE_Tumbleweed/network:ha-clustering:sap-deployments:devel.repo
zypper ref
zypper in python3-PyHDB

 

配置 Exporter

创建config.json配置文件。 config.json.example中提供的config.json示例。这里配置文件中最重要的项目:

  • listen_address:prometheus exporter将被暴露的地址(默认为 0.0.0.0)
  • exposition_port:prometheus exporter将暴露的端口(默认为 9968)
  • multi_tenant:从其他租户导出指标。要使用它,必须使用系统数据库(端口 30013)完成连接
  • timeout:连接数据库的超时时间。在这段时间之后,应用程序将失败(即使在守护程序模式下)
  • hana.host:SAP HANA 数据库的地址
  • hana.port:暴露 SAP HANA 数据库的端口
  • hana.userkey:存储的用户密钥。如果您不想在配置文件中包含密码,这是安全选项。如果设置了这两个选项,则用户密钥和用户/密码是第一个默认值
  • hana.user:拥有 SAP HANA 数据库访问权限的现有用户
  • hana.password:现有用户的密码
  • hana.ssl:启用 SSL 连接(默认为 False)。仅适用于 dbapi 连接器
  • hana.ssl_validate_cert:启用 SSL 证书验证。 HANA 云必填字段。仅适用于 dbapi 连接器
  • hana.aws_secret_name:包含用户名和密码的秘密名称。如果 SAP HANA 数据库存储在 AWS 上,这是使用 AWS Secrets Manager 的安全选项。 aws_secret_name 和用户/密码是独占的,如果设置了这两个选项,则 aws_secret_name 是默认值
  • logging.config_file:Python 日志系统配置文件(默认 WARN 和 ERROR 级别的消息将发送到 syslog)
  • logging.log_file:日志文件(默认为/var/log/hanadb_exporter.log)

 

日志配置文件遵循 python 标准日志系统样式: Python logging

使用默认配置文件,它将日志重定向到json 配置文件中分配的文件和系统日志(仅记录级别高达警告)。

 

使用存储的用户密钥

如果我们想保持数据库安全,这是推荐的选项(对于开发环境,可以使用具有SYSTEM用户的用户/密码,因为它设置起来更快)。要使用userkey选项,必须安装 dbapi(通常存储在/hana/shared/PRD/hdbclient /hdbcli-NNNtar.gz并可以使用 pip3 安装)。它不能从其他不同的客户端使用(密钥存储在客户端本身)。这将引发hdbcli.dbapi .Error : (-10104, ‘Invalid value for KEY’)错误。为此,必须使用运行 python 的用户创建一个新的存储用户密钥。为此(请注意hdbclient与dbapi python 包相同):

/hana/shared/PRD/hdbclient/hdbuserstore set yourkey host:30013@SYSTEMDB hanadb_exporter pass

一些技巧:

  • 将SYSTEMDB设置为默认数据库,这样Exporter将知道从哪里获取租户数据。
  • 不要使用为备份创建的存储用户密钥,因为这是使用sidadm用户创建的。
  • 建议使用只能访问监视表的用户,而不是使用 SYSTEM 用户。
  • 如果使用具有监视角色的用户,则该用户必须存在于所有数据库中( SYSTEMDB+tenants )。

 

创建具有监控角色的新用户

运行以下命令以创建具有监视角色的用户(这些命令必须在所有数据库中执行):

su - hdbadm
hdbsql -u SYSTEM -p pass -d SYSTEMDB #(HDB for the tenant in this example)
CREATE USER HANADB_EXPORTER_USER PASSWORD MyExporterPassword NO FORCE_FIRST_PASSWORD_CHANGE;
CREATE ROLE HANADB_EXPORTER_ROLE;
GRANT MONITORING TO HANADB_EXPORTER_ROLE;
GRANT HANADB_EXPORTER_ROLE TO HANADB_EXPORTER_USER;

 

运行Exporter

通过运行以下命令启动Exporter:

hanadb_exporter -c config.json -m metrics.json
# Or
python3 hanadb_exporter/main.py -c config.json -m metrics.json

如果config.json配置文件存储在/etc/hanadb_exporter中,则Exporter也可以使用以下命令启动:

hanadb_exporter --identifier config # Notice that the identifier matches with the config file without extension

 

作为Daemon进程运行

hanadb_exporter可以使用systemd执行。为此,最好的选择是使用 rpm 包安装项目,如安装中所述

 

之后,我们需要创建配置文件/etc/hanadb_exporter/my-exporter.json(文件的名称是相关的,因为我们将使用它来启动守护程序)。 config.json 可以用作示例(示例文件也存储在/usr/etc/hanadb_exporter文件夹中)。

默认指标文件存储在/usr/etc/hanadb_exporter/metrics.json中。 如果新的metrics.json存储在/etc/hanadb_exporter中,这将被使用。

日志配置文件也可以更新以自定义更改新的配置文件logging.config_file条目(默认一个在/usr/etc/hanadb_exporter/logging_config.ini中可用)。

现在,Exporter可以作为守护进程启动。由于我们可以在一台机器上运行多个hanadb_exporter实例,该服务是使用模板文件创建的,因此必须向systemd提供额外的信息(这是在服务名称后添加@关键字和配置文件的名称之前在/etc/hanadb_exporter/{name} .json 中创建):

# All the command must be executed as root user
systemctl start prometheus-hanadb_exporter@my-exporter
# Check the status with
systemctl status prometheus-hanadb_exporter@my-exporter
# Enable the exporter to be started at boot time
systemctl enable prometheus-hanadb_exporter@my-exporter

 

创建 AMP 工作区

要创建工作区,只需在 AWS 控制台上打开 AMP 并输入工作区的名称。

创建后,该服务应该为我们提供一个远程写入 URL 和一个查询 URL。

 

运行 Prometheus 服务器

要安装最新的稳定版 Prometheus,包括表达式浏览器,请参考Prometheus 指南。在此示例中,我们将在 Amazon Linux 上安装 Prometheus v2.26.0,如下所示:

wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar -xvf prometheus-2.26.0.linux-amd64.tar.gz
sudo cp prometheus-2.26.0.linux-amd64/prometheus /usr/local/bin/

 

创建一个名为prometheus.yaml的新文件,并使用 AWS 控制台上的 AMP 工作区中的工作区 ID 编辑remote_write配置。

global:
  scrape_interval: 15s
  external_labels:
    monitor: 'prometheus'
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:8000']

remote_write:
  - url: https://aps-workspaces.${AWS_REGION}.amazonaws.com/workspaces/${WORKSPACE_ID}/api/v1/remote_write
      sigv4:
        region: ${AWS_REGION}
      queue_config:
        max_samples_per_send: 1000
        max_shards: 200
        capacity: 2500

 

我们终于准备好运行 Prometheus 并将我们的 SAP HANA 数据库指标发送到 AMP。

prometheus --config.file=prometheus.yml

我们的指标现在正在发送到AMP。您应该在 Prometheus 服务器控制台中看到输出。

 

使用 Grafana 可视化指标

Grafana 是一个常用的 Prometheus 指标可视化平台。在本地机器上,让我们安装 Grafana并将我们的 AMP 工作区配置为数据源。

确保本地环境具有以下权限或更多权限以查询工作空间。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "aps:GetLabels",
                "aps:GetMetricMetadata",
                "aps:GetSeries",
                "aps:QueryMetrics"
                "aps:DescribeWorkspace"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}

我们将在运行 Grafana 之前启用 AWS SIGv4 身份验证,以便使用 IAM 权限签署对 AMP 的查询。

export AWS_SDK_LOAD_CONFIG=true
export GF_AUTH_SIGV4_AUTH_ENABLED=true
grafana-server --config=/usr/local/etc/grafana/grafana.ini \
  --homepath /usr/local/share/grafana \
  cfg:default.paths.logs=/usr/local/var/log/grafana \
  cfg:default.paths.data=/usr/local/var/lib/grafana \
  cfg:default.paths.plugins=/usr/local/var/lib/grafana/plugin

 

登录 Grafana 并转到数据源配置页面/数据源,将您的 AMP 工作区添加为数据源。 URL 最后应该没有/api/v1/query

启用SigV4 auth ,然后选择适当的区域并保存。

 

SAP HANA 指标监控

SAP HANA现在应该显示并且可以使用了。

 

总结

在这篇文章中,我们详细介绍了在非容器化环境中使用最近发布的 Amazon Managed Service for Prometheus 并使用 SAP HANA DB Exporter 设置指标收集架构。要在您的 EC2 实例上自动收集指标,您可以使用所有相关的依赖项预配置 AMI,或使用 AWS Systems Manager。从提供的链接中了解有关Amazon Managed Service for Prometheus Amazon Managed GrafanaOpenTelemetry的更多信息。

 

版本说明

该博客的AMP版本(截至 2022 年 3月 23日)支持将 Prometheus 指标提取到工作区,以及这些指标的存储和查询。它还支持与 AWS Identity and Access Management、Amazon Virtual Private Cloud 和 AWS CloudTrail 的集成, 支持Tagging, 支持基于规则和报警的管理,详见Amazon Managed Service for Prometheus用户指南

 

 

 

本篇作者

Ryan Yang

AWS 中国专业服务团队云基础架构师,在加入 AWS 之前,曾致力供职于 SAP和生态系统合作伙伴,并有15年以上的SAP大型项目的实施,升级和迁移经验。 现任职于 AWS 中国专业服务团队,主要为客户提供云上系统架构设计,SAP 上云迁移等咨询服务。