Memantau Oracle dengan Grafana dan Prometheus
Anda dapat mengumpulkan metrik Oracle di Google Cloud dengan Grafana dan Prometheus.
Berikut adalah contoh diagram arsitektur:
Menyiapkan virtual machine
Pertama, buat virtual machine (VM) untuk menghosting Grafana dan Prometheus:
- Login ke Cloud Console.
- Luncurkan instance VM di virtual private cloud (VPC)/subnet yang Anda gunakan untuk mengakses Oracle Database. Jika memiliki beberapa database di beberapa VPC, Anda mungkin perlu menambahkan rute statis di VPC.
Menginstal Prometheus
Untuk menginstal Prometheus di VM yang Anda siapkan:
Download software Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
Ekstrak file yang Anda download:
tar xvf prometheus-2.19.2.linux-amd64.tar.gz
Buat layanan Prometheus di VM:
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/*
Buat file layanan Prometheus:
cd /lib/systemd/system sudo touch prometheus.service
Tambahkan konten file ini ke file
prometheus.service
dengan editor teks pilihan Anda.[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
Aktifkan dan mulai layanan
prometheus
:sudo systemctl enable prometheus sudo systemctl start prometheus
Menginstal Grafana
Grafana digunakan untuk penyiapan dasbor dan alarm.
Buat repo yum untuk memudahkan penginstalan Grafana:
touch /etc/yum.repos.d/grafana.repo
Tambahkan baris berikut ke
/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
Instal Grafana melalui
yum install
dan aktifkan layanan:yum install grafana sudo systemctl start grafana-server sudo systemctl status grafana-server
Menginstal pengekspor klien Prometheus di server database
Anda memerlukan eksportir klien untuk mendapatkan data dari Oracle ke Prometheus. Ada dua opsi yang dapat dipilih:
Oracle DB Exporter
Download biner dan ekstrak:
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
Buat skrip shell seperti ini dalam konten di bawah. Anda harus memastikan bahwa
tnsping
me-resolve TNSname DB di bawah sebagaidbrman
. Ubahtnsnames.ora
jikatnsping
tidak dapat me-resolvedbrman
.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
Jalankan skrip sebagai latar belakang dan pantau
nohup.out
untuk melihat apakah ada error yang dihasilkan:nohup ./start_mon.sh &
Periksa metrik yang dikumpulkan:
curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
Prometheus Oracle Exporter
Ekspor Oracle ini memerlukan langkah tambahan dan Anda harus mem-build-nya. Pertama, instal Go 1.14 atau yang lebih tinggi. Jika Anda sudah menginstal Go versi lama, hapus untuk menghindari error.
Pastikan untuk menambahkan jalur biner Go ke Oracle dan pengguna 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
Instal paket yang diperlukan untuk build Go. Anda dapat mendownload klien instan Oracle rpm 12.2 karena paket ini menggunakan klien instan 1.2. Selain itu,jangan lewati 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
Instal Oracle OCI8 dengan langkah-langkah berikut.
pkg-config --cflags --libs oci8
Pertama, Anda akan mengalami error ini jika baru saja menginstal paket OCI8. Masalah ini dijelaskan dalam link portal ini.
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
Untuk menginstal OCI8, ada beberapa paket yang perlu Anda instal sebelum mem-build eksportir, jadi ikuti langkah-langkah berikut untuk memperbaiki masalah.
Salin oci8.pc dari github ke direktori ini yang bernama
/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 ```
Coba instal OCI8 lagi setelah mengekspor variabel env.
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
Buat pengekspor:
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
Setelah berhasil di-build, Anda dapat mengubah file
~/prometheus_oracle_exporter/oracle.conf
untuk menyertakan database yang ingin dipantau: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 menggunakan format stempel waktu Oracle lama. Harap, ubah stempel waktu database Anda ke format lama jika Anda menjalankan versi RDBMS 12.2 dan yang lebih baru. Jika tidak, fitur pemantauan error
alert.log
tidak akan berfungsi karena masalah stempel waktu.alter system set UNIFORM_LOG_TIMESTAMP_FORMAT=FALSE scope=both;
Mulai pengekspor. Buat skrip shell sebagai berikut:
vi star_mon_free_db.sh
Tambahkan baris berikut:
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
Di lingkungan RAC, Anda dapat menggunakan nama TNS sebagai instance tertentu seperti contoh di bawah. Jadi, Anda dapat menghubungkan setiap instance untuk mengumpulkan metrik khusus instance.
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) ) )
Mulai daemon:
nohup ./star_mon_free_db.sh &
Menambahkan target di server Prometheus
Di VM tempat Anda menginstal layanan Prometheus, ubah file
/etc/prometheus/prometheus.yml
agar berisi informasi endpoint berikut. Pastikan untuk menggunakan spasi, bukan tab, dalam file yml. Nama tugasoracle_short
adalah node pertama RAC dan,oracle_short2
adalah node kedua.- 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}"
Mulai ulang layanan
prometheus
untuk mengambil perubahan baru:systemctl status prometheus
Membuat dasbor di Grafana menggunakan Prometheus sebagai sumber data
ID pengguna dan sandi Grafana default adalah
admin
. Pertama, nonaktifkan login anonim dan izinkan pendaftaran dengan menetapkan diaktifkan ke salah.vi /etc/grafana/grafana.ini
enable anonymous access ;enabled = false disable user signup / registration ;allow_sign_up = false
Mulai ulang Grafana:
systemctl restart grafana-server
Ubah sandi admin menjadi sandi Anda sendiri.
Buat DataSource dengan langkah-langkah berikut.
Buka **Konfigurasi > Sumber Data > Tambahkan Sumber Data > Pilih Prometheus
Tambahkan URL** sebagai endpoint Server Prometheus Anda. Dalam contoh ini,
--web.listen-address=0.0.0.0:9090
adalah pemroses layanan, sehingga URL endpoint-nya adalahhttp://localhost:9090
.Prometheus Oracle Explorer memiliki beberapa contoh dasbor untuk pemantauan Oracle. Kita akan mengimpor dan menggunakannya. Anda dapat membuat dasbor sendiri dan menampilkan metrik yang tersedia atau membuat metrik kustom baru dan menampilkannya ke dasbor baru.
Klik Dashboard > Manage > Import > Upload.json file, lalu pilih file JSON yang Anda download dari freenetdigital.
Klik Muat dan Impor.
Periksa apakah dasbor menampilkan metrik. Klik Dasbor > Umum, lalu klik Dasbor yang Anda impor.
Ringkasan
Kami membuat contoh solusi pemantauan dengan software open source dari mengambil metrik dan menampilkan metrik tersebut melalui dasbor yang Anda miliki.
Anda dapat melindungi metrik ini dengan menerapkan peningkatan berikut:
- mTls di antara setiap endpoint.
- Mengenkripsi sandi Oracle.
- Lindungi endpoint Grafana dengan SSL load balancer GCP dan IP yang diizinkan.