使用 Grafana 和 Prometheus 监控 Oracle
您可以使用 Grafana 和 Prometheus 在 Google Cloud 上收集 Oracle 指标。
以下是一个架构图示例:
设置虚拟机
首先,创建一个虚拟机 (VM) 来托管 Grafana 和 Prometheus:
- 登录 Cloud 控制台。
- 在用于访问 Oracle 数据库的虚拟私有云 (VPC)/子网上启动虚拟机实例。如果您在多个 VPC 中有多个数据库,则可能需要在 VPC 上添加静态路由。
安装 Prometheus
如需在您设置的虚拟机上安装 Prometheus,请执行以下操作:
下载 Prometheus 软件:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
解压缩下载的文件:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
在虚拟机上创建 Prometheus 服务:
sudo useradd -rs /bin/false prometheus cd prometheus-2.19.2.linux-amd64 sudo cp prometheus promtool /usr/local/bin sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo mkdir /etc/prometheus sudo cp -R consoles/ console_libraries/ prometheus.yml /etc/prometheus sudo mkdir -p data/prometheus sudo chown -R prometheus:prometheus data/prometheus /etc/prometheus/*
创建 Prometheus 服务文件:
cd /lib/systemd/system sudo touch prometheus.service
使用您选择的文本编辑器将这些文件内容添加到
prometheus.service
文件中。[Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] Type=simple User=root Group=root ExecStart=/usr/local/bin/prometheus \ --config.file=/etc/prometheus/prometheus.yml \ --storage.tsdb.path="/data/prometheus" \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.listen-address=0.0.0.0:9090 \ --web.enable-admin-api Restart=always [Install] WantedBy=multi-user.target
启用并启动
prometheus
服务:sudo systemctl enable prometheus sudo systemctl start prometheus
安装 Grafana
Grafana 用于信息中心和警报设置。
创建 yum 代码库以便轻松安装 Grafana:
touch /etc/yum.repos.d/grafana.repo
将以下代码行添加到
/etc/yum.repos.d/grafana.repo
:[grafana] name=grafana baseurl=https://packages.grafana.com/oss/rpm repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://packages.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt
通过
yum install
安装 Grafana 并启用服务:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
在数据库服务器上安装 Prometheus 客户端导出工具
您需要一个客户端导出工具才能将数据从 Oracle 导出到 Prometheus。有两种导出工具可供您选择:
Oracle 数据库导出工具
下载二进制文件并将其解压缩:
wget https://github.com/iamseth/oracledb_exporter/releases/download/0.2.2/oracledb_exporter.0.2.2.linux-amd64.tar.gz tar -zxf oracledb_exporter.0.2.2.linux-amd64.tar.gz cd oracledb_exporter.0.2.2.linux-amd64
在下面的内容中创建 shell 脚本,如下所示。您需要确保
tnsping
将下面的数据库 TNSname 解析为dbrman
。如果tnsping
无法解析dbrman
,请修改tnsnames.ora
。export ORACLE_HOSTNAME={your host name} export ORACLE_UNQNAME=dbrman export ORACLE_BASE=/apps/oracle/oracle_base export ORACLE_HOME=/apps/oracle/19.0.0/db_home_standalone export ORACLE_SID=dbrman export CUSTOM_METRICS=/home/oracle/oracledb_exporter.0.2.2.linux-amd64/custom-metrics.toml export PATH=/usr/sbin:$PATH export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/opt/glibc-2.14/lib export DATA_SOURCE_NAME=user/xxxxx@dbrman /home/oracle/oracledb_exporter.0.2.2.linux-amd64/oracledb_exporter -default.metrics=/home/oracle/oracledb_exporter.0.2.2.linux-amd64/default-metrics.toml -web.listen-address=0.0.0.0:9161
在后台运行脚本,并监控
nohup.out
以查看系统是否产生了任何错误:nohup ./start_mon.sh &
检查系统是否正在收集指标:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Prometheus Oracle 导出工具
您需要构建此 Oracle 导出工具并需要对其执行一些额外的步骤。首先,安装 Go 1.14 或更高版本。如果您已安装旧版 Go,请移除它以避免出现错误。
请务必将 Go 二进制路径添加到 Oracle 和根用户。
wget https://golang.org/dl/go1.14.6.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin source ~/.bash_profile go version go version go1.14.6 linux/amd64
安装 Go 版本所需的软件包。您可以下载 Oracle rpm 12.2 即时客户端,因为此软件包使用 1.2 即时客户端。另外,请勿跳过 Oracle SDK
oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm
。rpm -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm rpm -i oracle-instantclient12.2-tools-12.2.0.1.0-1.x86_64.rpm rpm -i oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm yum install git yum install gcc go get github.com/BurntSushi/toml go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/common/log go get gopkg.in/yaml.v2 go get github.com/sirupsen/logrus go get gopkg.in/alecthomas/kingpin.v2
按照以下步骤安装 Oracle OCI8。
pkg-config --cflags --libs oci8
首先,如果您只是安装 OCI8 软件包,就会遇到此错误。此门户链接中介绍了此问题。
Package oci8 was not found in the pkg-config search path. Perhaps you should add the directory containing oci8.pc to the PKG_CONFIG_PATH environment variable No package 'oci8' found
如需安装 OCI8,您需要在构建导出工具之前安装一些软件包,因此请按照以下步骤解决此问题。
将 oci8.pc 从 github 复制到目录
/usr/local/share/pkgconf
中mkdir /usr/local/share/pkgconfig cp {Downloaded unzipped directory}/oci8.pc /usr/local/share/pkgconfig cat oci8.pc
prefix=/usr includedir=${prefix}/include/oracle/12.2/client64 # <<== This is Oracle 12.2 instant client was installed via yum libdir=${prefix}/lib/oracle/12.2/client64/lib Name: oci8 Description: Oracle Instant Client Version: 12.2 Cflags: -I${includedir} Libs: -L${libdir} -lclntsh ```
导出环境变量后,尝试重新安装 OCI8。
export PKG_CONFIG_PATH=/usr/local/share/pkgconfig export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib go get github.com/mattn/go-oci8
构建导出工具:
git clone https://github.com/freenetdigital/prometheus_oracle_exporter.git cd {cloned directory} export GOPATH=/home/oracle/go pwd
/home/oracle/prometheus_oracle_exporter
export GOPATH=/home/oracle/go go get github.com/freenetdigital/prometheus_oracle_exporter cd /home/oracle/go/src/github.com/freenetdigital/prometheus_oracle_exporter/ ls
alertlog.go grafana LICENSE main.go misc.go oracle.conf.example README.md
go install go build
成功构建后,您便可以修改
~/prometheus_oracle_exporter/oracle.conf
文件以包含要监控的数据库:connections: - connection: user/password@dbrman database: dbrman instance: dbrman alertlog: - file: /apps/oracle/oracle_base/diag/rdbms/dbrman/dbrman/trace/alert_dbrman.log ignoreora: - ORA-00001 - ORA-01033 - ORA-01041 - ORA-01089 - ORA-01555 - ORA-28 - ORA-235 - ORA-609 - ORA-3136 queries: - sql: "select 1 as column1, 2 as column2 from dual" name: sample1 help: "This is my metric number 1" metrics: - column1 labels: - column2 - sql: "select 2 as column1 from dual" name: sample2 help: "This is my metric number 2" metrics: - column1
Prometheus Oracle 导出工具使用旧的 Oracle 时间戳格式。如果您运行的是 12.2 版 RDBMS 及更高版本,请将数据库时间戳更改为旧格式。否则,
alert.log
错误监控功能因时间戳问题而无法运作。alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
启动导出工具。按如下方式创建 Shell 脚本:
vi star_mon_free_db.sh
添加以下几行代码:
export PKG_CONFIG_PATH=/usr/local/share/pkgconfig export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib export TNS_ADMIN=/apps/oracle/19.0.0/db_home_standalone/network/admin export NLS_LANG=AMERICAN_AMERICA.UTF8 /home/oracle/prometheus_oracle_exporter/prometheus_oracle_exporter -configfile=/home/oracle/prometheus_oracle_exporter/oracle.conf -web.listen-address 0.0.0.0:9500 -defaultmetrics -recovery
在 RAC 环境中,您可以将 TNS 名称用作特定实例,如以下示例所示。因此,您可以连接每个实例以收集实例特定的指标。
ORCL1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = {node 2 IP address} )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME= orcl1) ) ) ORCL2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = {node 1 IP address} )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (INSTANCE_NAME= orcl2) ) )
启动守护程序:
nohup ./star_mon_free_db.sh &
在 Prometheus 服务器上添加目标
在安装了 Prometheus 服务的虚拟机上,修改
/etc/prometheus/prometheus.yml
文件以包含以下端点信息。确保在 yml 文件中使用空格而不是制表符。作业名称oracle_short
是 RAC 的第一个节点,oracle_short2
是第二个节点。- job_name: 'oracle_short' static_configs: - targets: ['{your DB IP}:9500'] relabel_configs: - source_labels: ['__address__'] target_label: instance regex: '(.*):\d+' replacement: "${1}" - job_name: 'oracle_short2' static_configs: - targets: - 192.168.1.11:9500 relabel_configs: - source_labels: ['__address__'] target_label: instance regex: '(.*):\d+' replacement: "${1}"
重启
prometheus
服务以让新更改生效:systemctl status prometheus
在 Grafana 中使用 Prometheus 作为数据源创建信息中心
默认的 Grafana 用户 ID 和密码是
admin
。首先,停用匿名登录,并将 enabled 设置为 false,以允许注册。vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
重启 Grafana:
systemctl restart grafana-server
将管理员密码更改为您自己的密码。
按照以下步骤创建数据源。
转到“配置”>“数据源”>“添加数据源”>“选择 Prometheus”
添加网址**作为您的 Prometheus 服务器端点。在此示例中,
--web.listen-address=0.0.0.0:9090
是服务监听器,因此端点网址为http://localhost:9090
。Prometheus Oracle Explorer 提供了一些用于 Oracle 监控的示例信息中心。我们将导入并使用它们。您可以创建自己的信息中心并显示可用的指标,也可以创建新的自定义指标并将其显示在新的信息中心内。
点击信息中心 > 管理 > 导入 > 上传 .json 文件,然后选择您从 freenetdigital 下载的 JSON 文件。
点击加载并导入。
检查信息中心是否显示指标。点击信息中心 > 常规,然后点击您导入的信息中心。
摘要
我们使用开源软件创建了一个示例监控解决方案,它可以捕获指标并通过您拥有的信息中心显示这些指标。
您可以通过实施以下增强功能来保护这些指标:
- 每个端点之间的 mTls。
- 加密 Oracle 密码。
- 使用 GCP 负载均衡器 SSL 和列入许可名单的 IP 来保护 Grafana 端点。