使用 Grafana 和 Prometheus 監控 Oracle
您可以使用 Grafana 和 Prometheus 收集 Oracle 指標。 Google Cloud
以下是架構圖範例:
設定虛擬機器
首先,請建立虛擬機器 (VM) 來代管 Grafana 和 Prometheus:
- 登入 Cloud 控制台。
- 在用於存取 Oracle Database 的虛擬私有雲 (VPC)/子網路上啟動 VM 執行個體。如果您在多個 VPC 中有多個資料庫,可能需要在 VPC 中新增靜態路由。
安裝 Prometheus
如要在設定的 VM 上安裝 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
在 VM 上建立 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 DB 匯出工具
下載二進位檔並解壓縮:
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
在以下內容中建立類似的殼層指令碼。您必須確保
tnsping
將下方的 DB 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 和 root 使用者。
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 Exporter 使用舊版 Oracle 時間戳記格式。如果您執行的是 12.2 RDBMS 以上版本,請將資料庫時間戳記改為舊格式。否則,
alert.log
錯誤監控功能將因時間戳記問題而無法運作。alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
啟動匯出工具。建立殼層指令碼,如下所示:
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) ) )
啟動 Daemon:
nohup ./star_mon_free_db.sh &
在 Prometheus 伺服器上新增目標
在安裝 Prometheus 服務的 VM 上,修改
/etc/prometheus/prometheus.yml
檔案,以便納入下列端點資訊。請務必在 yml 檔案中使用空格,而非 Tab 鍵。工作名稱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
將管理員密碼變更為自己的密碼。
請按照下列步驟建立 DataSource。
依序前往「Configuration」>「Data Sources」>「Add Data Source」>「Choose Prometheus」
將網址** 新增為 Prometheus 伺服器端點。在這個範例中,
--web.listen-address=0.0.0.0:9090
是服務事件監聽器,因此端點網址為http://localhost:9090
。Prometheus Oracle Explorer 提供一些 Oracle 監控範例資訊主頁。我們會匯入並使用這些資料。您可以自行建立資訊主頁並顯示可用的指標,或是建立新的自訂指標並顯示至新資訊主頁。
依序點選「Dashboard」>「Manage」>「Import」>「Upload.json」檔案,然後選取從 freenetdigital 下載的 JSON 檔案。
按一下「載入並匯入」。
檢查儀表板是否顯示指標。依序點選「Dashboard」>「General」,然後點選您匯入的 Dashboard。
摘要
我們使用開放原始碼軟體建立了監控解決方案範例,擷取指標並透過您擁有的資訊主頁顯示這些指標。
您可以實施下列強化措施,保護這些指標:
- 各個端點之間的 mTLS。
- 加密 Oracle 密碼。
- 使用 GCP 負載平衡器 SSL 和許可清單 IP 保護 Grafana 端點。