SAP Solution Manager提供SAP商务套件和OS/DB的监控,很多企业发现Solution Manager 资源占用太重,所以都不愿意轻易部署在云端。亚马逊云科技发布了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 Launch Wizard for SAP
创建基于EC2的HANA。
创建好的HANA DB EC2如下:
它将托管我们的应用程序并将其指标转发到我们稍后将创建的 AMP 工作区。我们建议使用附加到实例的 IAM 角色,我们可以附加策略AmazonPrometheusRemoteWriteAccess来为实例提供最低限度的权限。
配置实例后,我们可以登录到我们的SAP HANA DB实例并安装 SAP HANA 数据库exporter。用 Python 编写的 Prometheus exporter,用于导出 SAP HANA 数据库指标。
先决条件
一个正在运行且可访问的 SAP HANA 数据库(单容器或多容器)。建议在运行 HANA 数据库的同一台机器上运行exporter。理想情况下,每个数据库都应由一个exporter监控。
作为SAP HANA DB exporter,您有两个选择:
dbapi (SAP/官方)
pyhdb (非官方/开源)
SAP Host 代理在 HANA 监控视图上收集了一些指标。确保已安装并运行它以访问所有监控指标。
指标标文件(Metrics file): exporter使用附加文件来了解将要导出的指标。访问Github有更多关于指标文件的信息
。https://github.com/SUSE/hanadb_exporter/blob/master/docs/METRICS.md
可通过以下两种方式可获得对应的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
创建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 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:
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
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 并输入工作区的名称。
创建后,该服务应该为我们提供一个远程写入 URL 和一个查询 URL。
要安装最新的稳定版 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的新文件,并使用亚马逊云科技控制台上的 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 是一个常用的 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现在应该显示并且可以使用了。
在这篇文章中,我们详细介绍了在非容器化环境中使用最近发布的 Amazon Managed Service for Prometheus 并使用 SAP HANA DB Exporter 设置指标收集架构。要在您的 EC2 实例上自动收集指标,您可以使用所有相关的依赖项预配置 AMI,或使用 AWS Systems Manager。从提供的链接中了解有关Amazon Managed Service for Prometheus 、
Amazon Managed Grafana和OpenTelemetry的更多信息。