Memantau Oracle dengan Grafana dan Prometheus

Anda dapat mengumpulkan metrik Oracle di Google Cloud dengan Grafana dan Prometheus.

Berikut adalah contoh diagram arsitektur:

Penerapan Grafana dan Prometheus

Menyiapkan virtual machine

Pertama, buat virtual machine (VM) untuk menghosting Grafana dan Prometheus:

  1. Login ke Cloud Console.
  2. 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.

Permintaan Peluncuran VM

Menginstal Prometheus

Untuk menginstal Prometheus di VM yang Anda siapkan:

  1. Download software Prometheus:

    wget https://github.com/prometheus/prometheus/releases/download/v2.19.2/prometheus-2.19.2.linux-amd64.tar.gz
    
  2. Ekstrak file yang Anda download:

    tar xvf prometheus-2.19.2.linux-amd64.tar.gz
    
  3. 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/*
    
  4. Buat file layanan Prometheus:

    cd /lib/systemd/system
    sudo touch prometheus.service
    
  5. 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
    
  6. Aktifkan dan mulai layanan prometheus:

    sudo systemctl enable prometheus
    sudo systemctl start prometheus
    

Menginstal Grafana

Grafana digunakan untuk penyiapan dasbor dan alarm.

  1. Buat repo yum untuk memudahkan penginstalan Grafana:

    touch /etc/yum.repos.d/grafana.repo
    
  2. 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
    
  3. 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

  1. 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
    
  2. Buat skrip shell seperti ini dalam konten di bawah. Anda harus memastikan bahwa tnsping me-resolve TNSname DB di bawah sebagai dbrman. Ubah tnsnames.ora jika tnsping tidak dapat me-resolve dbrman.

    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
    
  3. Jalankan skrip sebagai latar belakang dan pantau nohup.out untuk melihat apakah ada error yang dihasilkan:

    nohup ./start_mon.sh &
    
  4. Periksa metrik yang dikumpulkan:

    curl -s http://YOUR RDBMS IP ADDRESS:9161/metrics | grep oracle
    

Prometheus Oracle Exporter

  1. 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
    
  2. 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
    
  3. 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
    
  4. Untuk menginstal OCI8, ada beberapa paket yang perlu Anda instal sebelum mem-build eksportir, jadi ikuti langkah-langkah berikut untuk memperbaiki masalah.

  5. 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
     ```
    
  6. 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
    
  7. 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
    
  8. 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
    
  9. 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;
    
  10. 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)
      )
    )
    
  11. Mulai daemon:

    nohup ./star_mon_free_db.sh &
    

Menambahkan target di server Prometheus

  1. 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 tugas oracle_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}"
    
  2. Mulai ulang layanan prometheus untuk mengambil perubahan baru:

    systemctl status prometheus
    

Membuat dasbor di Grafana menggunakan Prometheus sebagai sumber data

  1. 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
    
  2. Ubah sandi admin menjadi sandi Anda sendiri.

  3. 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 adalah http://localhost:9090.

  4. 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.

  5. Klik Muat dan Impor.

  6. 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.