문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자.
== DB 모니터링 툴 개발 (WEB) == * Flask 웹서버를 이용해 Oracle DB 모니터링 결과를 실시간으로 jQuery DataTables에 표시하는 웹 애플리케이션 개발 {{요점 |내용=프로그램 요구사항 * `.json`: DB 접속 정보 * `.ini`: 모니터링 대상 SID 목록 * Flask 서버에서 Oracle 접속 후 테이블 정보 조회 * jQuery DataTables를 이용해 웹에서 시각화 * 웹브라우저로 `/` 접속 시 결과 확인 }} === 프로그램 파일 구성 === <source lang=bash> monitoring_flask/ ├── app.py ├── config/ │ ├── db_info.json │ └── target_db.ini ├── templates/ │ └── index.html └── static/ └── datatables/ └── (CDN 대체용, 오프라인용 구성 시 사용) </source> --- === 설정 파일 예시 === * DB접속 정보 : `config/db_info.json` <source lang=js> { "a": {"user": "scott", "password": "tiger", "host": "localhost", "port": "1521", "sid": "a"}, "b": {"user": "scott", "password": "tiger", "host": "localhost", "port": "1521", "sid": "b"}, "c": {"user": "scott", "password": "tiger", "host": "localhost", "port": "1521", "sid": "c"}, "d": {"user": "scott", "password": "tiger", "host": "localhost", "port": "1521", "sid": "d"}, "e": {"user": "scott", "password": "tiger", "host": "localhost", "port": "1521", "sid": "e"} } </source> * 작업 수행 DB 대상 : `config/target_db.ini` <source lang=js> [MONITOR] targets = a,b,c </source> --- === Flask 메인 로직 (`app.py`) === <source lang=python> from flask import Flask, render_template import cx_Oracle import json import configparser app = Flask(__name__) def load_db_info(): with open("config/db_info.json", "r") as f: return json.load(f) def load_target_sids(): config = configparser.ConfigParser() config.read("config/target_db.ini") return [sid.strip() for sid in config.get("MONITOR", "targets").split(",")] def get_table_info(conn): cursor = conn.cursor() cursor.execute(""" SELECT owner, table_name, tablespace_name, status FROM all_tables WHERE ROWNUM <= 100 """) columns = [desc[0] for desc in cursor.description] rows = cursor.fetchall() return columns, rows def connect(info): dsn = cx_Oracle.makedsn(info["host"], info["port"], sid=info["sid"]) return cx_Oracle.connect(info["user"], info["password"], dsn) @app.route("/") def index(): db_info = load_db_info() target_sids = load_target_sids() results = {} for sid in target_sids: try: info = db_info[sid] conn = connect(info) columns, rows = get_table_info(conn) results[sid] = {"columns": columns, "rows": rows} conn.close() except Exception as e: results[sid] = {"columns": ["ERROR"], "rows": [[str(e)]]} return render_template("index.html", db_results=results) if __name__ == "__main__": app.run(debug=True) </source> ---- === HTML 템플릿 (`templates/index.html`) === <source lang=html> <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>Oracle 모니터링</title> <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.13.4/css/jquery.dataTables.css"> <script src="https://code.jquery.com/jquery-3.7.1.js"></script> <script src="https://cdn.datatables.net/1.13.4/js/jquery.dataTables.js"></script> </head> <body> <h1>Oracle DB 모니터링</h1> {% for sid, result in db_results.items() %} <h2>DB SID: {{ sid }}</h2> <table id="table_{{ sid }}" class="display"> <thead> <tr> {% for col in result.columns %} <th>{{ col }}</th> {% endfor %} </tr> </thead> <tbody> {% for row in result.rows %} <tr> {% for item in row %} <td>{{ item }}</td> {% endfor %} </tr> {% endfor %} </tbody> </table> <hr> <script> $(document).ready(function () { $('#table_{{ sid }}').DataTable(); }); </script> {% endfor %} </body> </html> </source> --- === 참조사항 === ==== 의존 패키지 설치 ==== <source lang=bash> pip install flask cx_Oracle </source> * Oracle Instant Client 가 설치되어 있어야 cx\_Oracle 사용 가능합니다. --- === 실행 방법 === <source lang=bash> python app.py </source> * 웹 브라우저에서 [http://localhost:5000](http://localhost:5000) 접속 * 오프라인 환경에서 실행방법 ** DataTables와 jQuery 라이브러리는 `/static/` 디렉터리에 직접 다운로드하여 사용 가능 ** `index.html`의 CDN 주소를 static 경로로 변경하면 됩니다 === 관련글 === ==== [[DB 모니터링 툴 개발]] ==== [[분류:python]] [[분류:모니터링]]
문서 저장 미리 보기 차이 보기 취소