暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

专为Oracle设计!DB Monitor开源监控平台:实时性能追踪+智能预警

547

前言

DB monitor 是一款开源的数据库监控平台,提供完整可用的数据监控方案,告别冗长的SQL脚本、常用手册,复杂数据通过web页面即可轻易浏览,通过前后端分离架构,Python+Django+restframework提供后台API,celery定制数据采集策略,Iview作为前端展示。

功能简介

1、资源管理

  • Oracle/MySQL/Redis/Linux资源信息录入

  • 资源管理中各类设备信息作为采集设备来源,支持动态加入实例监控列表

2、实例列表

  • 查看各监控实例列表及详细信息

3、 监控告警

  • 告警配置及告警信息查看

4、数据库部署

  • 支持Oracle19c RAC/RAC One Node/单实例,MySQL5.7/8.0单实例部署

部署方式

本地部署

docker 离线部署

环境准备

主机: CentOS Linux release 7.9.2009

IP :192.168.20.253

dbmonitor: 下载地址

db_monitor_vue:下载地址

docker 离线部署:下载地址

以下演示如何使用docker 离线部署方式进行安装。

注意:部署时,dbmonitor和db_monitor_vue版本保持同步,docker 离线部署中的安装包可能较旧

部署步骤

介质上传

docker 离线安装文件包含,docker 安装rpm,docker 镜像,docker_dbmonitor服务,db_monitor_vue-master前端页面

[root@dmdem dbmonitor]# pwd
/soft/dbmonitor
[root@dmdem dbmonitor]# tree -L 2
.
├── db_monitor_vue-master.zip
├── db_monitor(docker).docx
├── docker_dbmonitor.zip
├── images
│   ├── docker_dbmonitor_django.tar
│   ├── docker_dbmonitor_nginx.tar
│   ├── mysql.tar.gz
│   └── redis.tar.gz
└── soft
    ├── compose-1.25.5.tar.gz
    ├── containerd.io-1.2.6-3.3.el7.x86_64.rpm
    ├── container-selinux-2.107-3.el7.noarch.rpm
    ├── docker-19.03.9.tgz
    ├── docker-ce-19.03.9-3.el7.x86_64.rpm
    ├── docker-ce-cli-19.03.9-3.el7.x86_64.rpm
    ├── docker-compose-Linux-x86_64
    ├── instantclient-basic-linux.x64-11.2.0.4.0.zip
    └── instantclient-basic-linux.x64-19.5.0.0.0dbru.zip

docker 环境部署

[root@dmdem soft]# pwd
/soft/dbmonitor/soft
[root@dmdem soft]# yum install docker-ce-cli-19.03.9-3.el7.x86_64.rpm container-selinux-2.107-3.el7.noarch.rpm containerd.io-1.2.6-3.3.el7.x86_64.rpm docker-ce-19.03.9-3.el7.x86_64.rpm

-- 启动docker
[root@dmdem soft]# systemctl start docker
[root@dmdem soft]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2025-03-31 09:43:41 CST; 20s ago
     Docs: https://docs.docker.com
 Main PID: 14276 (dockerd)
    Tasks: 13
   Memory: 34.1M
   CGroup: /system.slice/docker.service
           └─14276 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.141723314+08:00" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.141738643+08:00" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd...." module=grpc
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.141753569+08:00" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.210305004+08:00" level=info msg="Loading containers: start."
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.350606321+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon ...d IP address"
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.403862540+08:00" level=info msg="Loading containers: done."
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.438212977+08:00" level=info msg="Docker daemon" commit=9d988398e7 graphdriver(s)=overlay2 version=19.03.9
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.438368431+08:00" level=info msg="Daemon has completed initialization"
Mar 31 09:43:41 dmdem dockerd[14276]: time="2025-03-31T09:43:41.459861577+08:00" level=info msg="API listen on /var/run/docker.sock"
Mar 31 09:43:41 dmdem systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

[root@dmdem soft]# docker -v
Docker version 19.03.9, build 9d988398e7

-- 安装docker-compose
[root@dmdem soft]# mv docker-compose-Linux-x86_64 /usr/local/sbin/docker-compose
[root@dmdem soft]# docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6

加载镜像

[root@dmdem images]# pwd
/soft/dbmonitor/images

[root@dmdem images]# docker load < mysql.tar.gz
cdb3f9544e4c: Loading layer [==================================================>]  58.44MB/58.44MB
6f8d38b0e2b6: Loading layer [==================================================>]  338.4kB/338.4kB
aae63f31dee9: Loading layer [==================================================>]  10.43MB/10.43MB
4801a487d51a: Loading layer [==================================================>]  4.471MB/4.471MB
c0c26734fb83: Loading layer [==================================================>]  1.536kB/1.536kB
94f8d8f5acbf: Loading layer [==================================================>]  46.11MB/46.11MB
8aeebb3964c1: Loading layer [==================================================>]  28.16kB/28.16kB
22b402e93939: Loading layer [==================================================>]  3.584kB/3.584kB
489bddb9c55e: Loading layer [==================================================>]  257.2MB/257.2MB
f8cb294d5d80: Loading layer [==================================================>]  9.728kB/9.728kB
a968f24d4187: Loading layer [==================================================>]  1.536kB/1.536kB
Loaded image: mysql:5.7.22
[root@dmdem images]# docker load < redis.tar.gz
42755cf4ee95: Loading layer [==================================================>]  130.9MB/130.9MB
8df2083a369f: Loading layer [==================================================>]  344.6kB/344.6kB
45054e60b3cc: Loading layer [==================================================>]   41.6MB/41.6MB
8a51b76b95be: Loading layer [==================================================>]  2.703MB/2.703MB
c5d99fc5fd1b: Loading layer [==================================================>]  16.84MB/16.84MB
f10162bd3fcb: Loading layer [==================================================>]  1.536kB/1.536kB
c70e9287563b: Loading layer [==================================================>]  4.608kB/4.608kB
Loaded image: redis:3.2.1
[root@dmdem images]# docker load < docker_dbmonitor_django.tar
613be09ab3c0: Loading layer [==================================================>]  211.1MB/211.1MB
0b0618c6ced8: Loading layer [==================================================>]  34.05MB/34.05MB
7da7d3716181: Loading layer [==================================================>]  20.99kB/20.99kB
a317a6aa16e0: Loading layer [==================================================>]  2.148MB/2.148MB
87365bb20418: Loading layer [==================================================>]  257.8MB/257.8MB
1ff796d14e4f: Loading layer [==================================================>]  162.3MB/162.3MB
5ddd6cd3032d: Loading layer [==================================================>]  16.38kB/16.38kB
72dc59b41d26: Loading layer [==================================================>]  18.94kB/18.94kB
51c3351a5d26: Loading layer [==================================================>]  12.26MB/12.26MB
1a846578eb30: Loading layer [==================================================>]  126.6MB/126.6MB
ec1577ab10fa: Loading layer [==================================================>]  3.072kB/3.072kB
beae4e05c5f3: Loading layer [==================================================>]  246.7MB/246.7MB
c5a5bceddded: Loading layer [==================================================>]  151.7MB/151.7MB
Loaded image: docker_dbmonitor_django:latest
[root@dmdem images]#  docker load < docker_dbmonitor_nginx.tar
d0fe97fa8b8c: Loading layer [==================================================>]  72.49MB/72.49MB
f14cffae5c1a: Loading layer [==================================================>]  64.53MB/64.53MB
280ddd108a0a: Loading layer [==================================================>]  3.072kB/3.072kB
fe08d9d9f185: Loading layer [==================================================>]  4.096kB/4.096kB
cdd1d8ebeb06: Loading layer [==================================================>]  3.584kB/3.584kB
0c0b010650ff: Loading layer [==================================================>]  3.072kB/3.072kB
b8726887f726: Loading layer [==================================================>]  3.584kB/3.584kB
Loaded image: docker_dbmonitor_nginx:latest

配置修改及其他处理

– 软件包部署

可以将docker_dbmonitor.zip放在/目录下,解压

[root@dmdem dbmonitor]# pwd
/soft/dbmonitor
[root@dmdem /]# cp docker_dbmonitor.zip /
[root@dmdem db_monitor]# cd /docker_dbmonitor/db_monitor
[root@dmdem db_monitor]# pwd
/docker_dbmonitor/db_monitor
[root@dmdem db_monitor]# mkdir soft
[root@dmdem db_monitor]# cd soft/
[root@dmdem soft]# pwd
/docker_dbmonitor/db_monitor/soft
[root@dmdem soft]# cp /soft/dbmonitor/soft/instantclient-basic-linux.x64-19.5.0.0.0dbru.zip ./
[root@dmdem soft]# unzip instantclient-basic-linux.x64-19.5.0.0.0dbru.zip

–修改端口配置(可选)


mysql默认使用3306端口,可以通过修改docker-compose.yml来适应不同端口。
  db:
    image: mysql:5.7.22
    expose: 
      - "3307"
    ports:
      - "3307:3306"
    volumes:
      - ./mysql:/var/lib/mysql:rw
    environment:
      - MYSQL_DATABASE=db_monitor
      - MYSQL_ROOT_PASSWORD=mysqld
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

打包前端文件

根据后端服务器的地址修改前端配置文件,此步骤重要,另外需要通过yarn重新打包,所以需要自行安装yarn环境

可参考Windows下安装yarn的三种方法 进行安装。

调整 baseUrl的dev,pro中的IP为本机IP

C:\db_monitor_vue-master\src\config

export default {
  /**
   * @description 配置显示在浏览器标签的title
   */
  title: 'DBmoitor 数据库监控平台',
  /**
   * @description token在Cookie中存储的天数,默认1天
   */
  cookieExpires: 1,
  /**
   * @description 是否使用国际化,默认为false
   *              如果不使用,则需要在路由中给需要在菜单中展示的路由设置meta: {title: 'xxx'}
   *              用来在菜单中显示文字
   */
  useI18n: false,
  /**
   * @description api请求基础路径
   */
  baseUrl: {
    // dev: 'https://www.easy-mock.com/mock/5add9213ce4d0e69998a6f51/iview-admin/',
    dev: 'http://192.168.20.253:8000/',
    pro: 'http://192.168.20.253:8000/'
  },
  /**
   * @description 默认打开的首页的路由name值,默认为home
   */
  homeName: 'home',
  /**
   * @description 需要加载的插件
   */
  plugin: {
    // 'error-store': {
    //   showInHeader: false, // 设为false后不会在顶部显示错误日志徽标
    //   developmentOff: false // 设为true后在开发环境不会收集错误信息,方便开发中排查错误
    // }
  }
}

进行打包

C:\db_monitor_vue-master>yarn build
yarn run v1.22.22
$ vue-cli-service build

C:\db_monitor_vue-master>dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 04BF-E783

 C:\db_monitor_vue-master 的目录

2025/03/31  10:38    <DIR>          .
2025/03/31  10:38    <DIR>          ..
2021/03/17  19:28                38 .babelrc
2021/03/17  19:28               147 .editorconfig
2021/03/17  19:28                 0 .eslintignore
2021/03/17  19:28               469 .eslintrc.js
2021/03/17  19:28               327 .gitignore
2021/03/17  19:28                59 .postcssrc.js
2021/03/17  19:28                85 .travis.yml
2021/03/17  19:28                50 cypress.json
2025/03/31  10:38    <DIR>          dist   <========
2021/03/17  19:28             1,068 LICENSE
2025/03/31  10:37    <DIR>          node_modules
2025/03/31  10:36           841,893 package-lock.json
2021/03/17  19:28             1,773 package.json
2021/03/17  19:28    <DIR>          public
2021/03/17  19:28               555 README.md
2021/03/17  19:28    <DIR>          src
2021/03/17  19:28    <DIR>          tests
2021/03/17  19:28             1,724 vue.config.js
              13 个文件        848,188 字节
               7 个目录 19,341,185,024 可用字节

上传打包后的dist文件

[root@dmdem db_monitor_vue]# pwd
/docker_dbmonitor/db_monitor_vue
[root@dmdem db_monitor_vue]# ll
total 0
drwxr-xr-x 6 root root 88 Mar 31 10:30 dist
drwxr-xr-x 6 root root 88 Feb 24  2021 distbak

如果打包中遇到如下错误,

C:\Users\Administrator>cd C:\db_monitor_vue-master

C:\db_monitor_vue-master>yarn build
yarn run v1.22.22
$ vue-cli-service build
'vue-cli-service' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

解决

C:\db_monitor_vue-master>yarn global add @vue/cli
C:\db_monitor_vue-master>npm config set registry https://registry.npmmirror.com
# 重新安装依赖
C:\db_monitor_vue-master>npm install

sh 文件转换(可选)

从windows上传到Linux的sh脚本,可能存在内部换行码,需要在Linux 手动转换

[root@dmdem db_monitor]# chmod u+x *.sh
[root@dmdem db_monitor]# pwd
/docker_dbmonitor/db_monitor
[root@dmdem db_monitor]# dos2unix celery_shutdown.sh 
dos2unix: converting file celery_shutdown.sh to Unix format ...
[root@dmdem db_monitor]# dos2unix celery_start.sh    
dos2unix: converting file celery_start.sh to Unix format ...
[root@dmdem db_monitor]# dos2unix web_start.sh 
dos2unix: converting file web_start.sh to Unix format ...
[root@dmdem db_monitor]# dos2unix web_shutdown.sh 
dos2unix: converting file web_shutdown.sh to Unix format ...

未转换报错

[root@dmdem db_monitor]# pwd
/docker_dbmonitor/db_monitor
[root@dmdem db_monitor]# sh web_start.sh 
  File "manage.py", line 16
    ) from exc
         ^
SyntaxError: invalid syntax
  File "manage.py", line 16
    ) from exc
         ^
SyntaxError: invalid syntax
web_start.sh: line 3: $'\r': command not found

启动db_monitor

[root@dmdem docker_dbmonitor]# pwd
/docker_dbmonitor
[root@dmdem docker_dbmonitor]#  docker-compose up -d
Starting docker_dbmonitor_db_1 ... 
Starting docker_dbmonitor_db_1 ... done
Creating docker_dbmonitor_django_1 ... done
Creating docker_dbmonitor_nginx_1  ... done

[root@dmdem docker_dbmonitor]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED              STATUS              PORTS                              NAMES
46f0f4700ed0        docker_dbmonitor_nginx    "/docker-entrypoint.…"   14 seconds ago       Up 13 seconds       80/tcp, 0.0.0.0:8001->8001/tcp     docker_dbmonitor_nginx_1
b898e395e12a        docker_dbmonitor_django   "container-entrypoin…"   14 seconds ago       Up 13 seconds       0.0.0.0:8000->8000/tcp, 8080/tcp   docker_dbmonitor_django_1
795dbd64d15c        redis:3.2.1               "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:6379->6379/tcp             docker_dbmonitor_redis_1
f8fbf2cf4cf2        mysql:5.7.22              "docker-entrypoint.s…"   About a minute ago   Up 14 seconds       0.0.0.0:3306->3306/tcp             docker_dbmonitor_db_1

–初始化数据

MySQL数据库导入initdata

注:如果MySQL数据库未重新初始化则不需要执行导入,默认的mysql文件夹中已有数据库

日志查看

db_monitor/logs/celery_worker.log --可以查看具体的celery任务执行情况,如数据库安装时的执行细节

db_monitor/logs/django-web.log

[root@dmdem logs]# pwd
/docker_dbmonitor/db_monitor/logs
[root@dmdem logs]# ls -lrt
total 12
-rw-r--r-- 1 root root    0 Mar 31 10:32 check.log
-rw-r--r-- 1 root root  760 Mar 31 10:32 celery-beat.log
-rw-r--r-- 1 root root  291 Mar 31 10:32 django-web.log
-rw-r--r-- 1 root root 3838 Mar 31 10:32 celery-worker.log

-- 进入docker_dbmonitor_django容器

[root@dmdem logs]# docker exec -it b898e395e12a bash

(app-root) bash-4.2# celery -A db_monitor worker -l info     
/opt/app-root/lib/python3.6/site-packages/celery/platforms.py:801: RuntimeWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!

Please specify a different user using the --uid option.

User information: uid=0 euid=0 gid=0 egid=0

  uid=uid, euid=euid, gid=gid, egid=egid,
 
 -------------- celery@django v4.3.0 (rhubarb)
---- **** ----- 
--- * ***  * -- Linux-3.10.0-1160.31.1.el7.x86_64-x86_64-with-centos-7.8.2003-Core 2025-03-31 10:35:19
-- * - **** --- 
- ** ---------- [config]
- ** ---------- .> app:         db_monitor:0x7f413dbd76d8
- ** ---------- .> transport:   redis://redis:6379/2
- ** ---------- .> results:     redis://redis:6379/1
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[tasks]
  . db_monitor.celery.debug_task
  . oracle.tasks.create_oracle_report
  . system.tasks.main_check
  . system.tasks.oracle_onenode_setup
  . system.tasks.oracle_rac_onenode_setup
  . system.tasks.oracle_rac_setup

[2025-03-31 10:35:19,926: INFO/MainProcess] Connected to redis://redis:6379/2
[2025-03-31 10:35:19,943: INFO/MainProcess] mingle: searching for neighbors
[2025-03-31 10:35:20,971: INFO/MainProcess] mingle: sync with 1 nodes
[2025-03-31 10:35:20,973: INFO/MainProcess] mingle: sync complete
[2025-03-31 10:35:20,993: WARNING/MainProcess] /opt/app-root/lib/python3.6/site-packages/celery/fixups/django.py:202: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
  warnings.warn('Using settings.DEBUG leads to a memory leak, never '
[2025-03-31 10:35:20,994: INFO/MainProcess] celery@django ready.


(app-root) bash-4.2# celery -A db_monitor beat -l info      
celery beat v4.3.0 (rhubarb) is starting.
ERROR: Pidfile (celerybeat.pid) already exists.
Seems we're already running? (pid: 38)

登陆

默认访问地址为

ip:8001 --前端

访问 http://192.168.20.253:8001/

密码 admin/111111

clip.png

ip:8000/admin --后端

访问 http://192.168.20.253:8000/admin

密码 admin/111111

其他

后端Mysql登陆

[root@dmdem logs]# docker ps -a
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                              NAMES
46f0f4700ed0        docker_dbmonitor_nginx    "/docker-entrypoint.…"   6 minutes ago       Up 6 minutes        80/tcp, 0.0.0.0:8001->8001/tcp     docker_dbmonitor_nginx_1
b898e395e12a        docker_dbmonitor_django   "container-entrypoin…"   6 minutes ago       Up 6 minutes        0.0.0.0:8000->8000/tcp, 8080/tcp   docker_dbmonitor_django_1
795dbd64d15c        redis:3.2.1               "docker-entrypoint.s…"   7 minutes ago       Up 7 minutes        0.0.0.0:6379->6379/tcp             docker_dbmonitor_redis_1
f8fbf2cf4cf2        mysql:5.7.22              "docker-entrypoint.s…"   7 minutes ago       Up 6 minutes        0.0.0.0:3306->3306/tcp             docker_dbmonitor_db_1
[root@dmdem logs]# docker exec -it f8fbf2cf4cf2 bash
root@f8fbf2cf4cf2:/# mysql -uroot -pmysqld
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 132
Server version: 5.7.22 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db_monitor         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use db_monitor
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------------------------+
| Tables_in_db_monitor                |
+-------------------------------------+
| alarm_conf                          |
| alarm_info                          |
| alarm_info_his                      |
| alert_log                           |
| auth_group                          |
| auth_group_permissions              |
| auth_permission                     |
| authtoken_token                     |
| django_admin_log                    |
| django_celery_beat_clockedschedule  |
| django_celery_beat_crontabschedule  |
| django_celery_beat_intervalschedule |
| django_celery_beat_periodictask     |
| django_celery_beat_periodictasks    |
| django_celery_beat_solarschedule    |
| django_celery_results_taskresult    |
| django_content_type                 |
| django_migrations                   |
| django_session                      |
| linux_disk                          |
| linux_disk_his                      |
| linux_io_stat                       |
| linux_io_stat_his                   |
| linux_list                          |
| linux_stat                          |
| linux_stat_his                      |
| mysql_list                          |
| mysql_slowquery                     |
| mysql_stat                          |
| mysql_stat_his                      |
| oracle_controlfile                  |
| oracle_list                         |
| oracle_redolog                      |
| oracle_report                       |
| oracle_stat                         |
| oracle_stat_his                     |
| oracle_table_stats                  |
| oracle_tablespace                   |
| oracle_tablespace_his               |
| oracle_temp_tablespace              |
| oracle_temp_tablespace_his          |
| oracle_undo_tablespace              |
| oracle_undo_tablespace_his          |
| redis_list                          |
| redis_stat                          |
| redis_stat_his                      |
| setup_log                           |
| users                               |
| users_groups                        |
| users_user_permissions              |
+-------------------------------------+
50 rows in set (0.00 sec)

总结

DB monitor 作为一个轻量级的数据库监控平台,提供本地和docker两种部署方式,对于小型企业来说,相当友好,可以根据实际情况进行部署测试。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论