以下のように表示されます。 #!/usr/bin/env python3.5 psutilをインポートする mysql.connectorをインポートする argparseをインポートする jsonをインポート 日時をインポート def get_cpu_info(詳細): CPU情報={} 詳細度 >0 の場合: print("[cpu] CPU情報の収集を開始します...") データ = psutil.cpu_times_percent(3) cpu_info['ユーザー'] = データ[0] cpu_info['システム']=データ[2] cpu_info['アイドル']=データ[3] cpu_info['iowait']=データ[4] cpu_info['hardirq']=データ[5] cpu_info['softirq']=データ[6] cpu_info['cpu_cores'] = psutil.cpu_count() 詳細度 >0 の場合: print("{0}".format(json.dumps(cpu_info,ensure_ascii=False,indent=4))) print("[cpu] コレクションが完了しました...") cpu_infoを返す def get_mem_info(詳細): メモリ情報={} 詳細度 >0 の場合: print("[mem] メモリ情報の収集を開始します...") データ = psutil.virtual_memory() mem_info['total'] = データ[0]/1024/1024/1024 mem_info['変数']=データ[1]/1024/1024/1024 詳細>0の場合: print("{0}".format(json.dumps(mem_info,ensure_ascii=False,indent=4))) print("[mem] コレクションが完了しました...") mem_infoを返す def get_disk_info(詳細): ディスク情報={} 詳細度 >0 の場合: print("[ディスク] ディスク情報の収集を開始します...") パーティション = psutil.disk_partitions() パーティション=[(パーティション[1],パーティション[2])パーティション内のパーティションの場合、パーティション[2]!='iso9660'の場合] ディスク情報={} パーティション内のパーティションの場合: ディスク情報[パーティション[0]]={} disk_info[パーティション[0]]['fstype']=パーティション[1] disk_info.keys() の mount_point の場合: データ = psutil.disk_usage(マウントポイント) disk_info[マウントポイント]['合計']=データ[0]/1024/1024/1024 disk_info[マウントポイント]['使用率']=データ[3] 詳細度 >0 の場合: print("{0}".format(json.dumps(disk_info,ensure_ascii=False,indent=4))) print("[ディスク] コレクションが完了しました....") ディスク情報を返す def get_mysql_info(cnx_args, status_list): 設定={ 'ユーザー':cnx_args.ユーザー、 'パスワード':cnx_args.パスワード、 'ホスト':cnx_args.ホスト、 'ポート':cnx_args.ポート} cnx=なし カーソル=なし mysql_info={} 試す: cnx = mysql.connector.connect(**config) カーソル = cnx.cursor(準備済み = True) 範囲(len(status_list))内のインデックスの場合: status_list[インデックス].get_status(カーソル) ステータス=ステータスリスト[インデックス] mysql_info[ステータス名]=ステータス値 mysql_info['ポート'] = config['ポート'] mysql.connector.Error を err として除く: 印刷(エラー) ついに: カーソル!= Noneの場合: カーソルを閉じる() cnx != None の場合: cnx.close() mysql_infoを返す クラス Status(オブジェクト): def __init__(自分自身、名前): 自己.name = 名前 self._value=なし def get_status(self, カーソル): stmt="'{0}' のようなグローバル ステータスを表示します。"format(self.name) カーソル.execute(stmt) 値 = cursor.fetchone()[1].decode('utf8') self._value = int(値) @財産 定義値(自己): self._value==Noneの場合: 例外が発生します("get_status 関数を実行する前に値を取得できません") それ以外: self._value を返す IntStatus=ステータス クラス diskResource(オブジェクト): def __init__(self, マウントポイント, ステータス): self.mount_point=マウントポイント self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="stage-list"> <div class="stage-title"><span>{0}</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">フォーマットを区別する</span> <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">合計スペースサイズ</span> {2:8.2f}G </p> <p class="詳細リスト"> <span class="detail-title">空き容量 (%)</span> {3:8.2f} </p> <p class="詳細リスト"> </p> </div> </div>\n'''.format(self.mount_point,self.status['fstype'],self.status['total'],self.status['used_percent']) 結果を返す クラス diskResources(オブジェクト): def __init__(自分自身、ステータス): 自己ディスク = [] status.keys() の mount_point の場合: self.disks.append(ディスクリソース(マウントポイント、ステータス[マウントポイント])) __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>ディスク</span> </div> <div class="second-stage">\n''' 範囲(len(self.disks))内のインデックスの場合: 結果 = 結果 + self.disks[index].__str__() 結果=結果+''' </div> </div>\n''' 結果を返す クラス cpuResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>CPU</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>グローバル</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">ユーザースペースの使用率 (%)</span> <span class="detail-describe">{0}</span> </p> <p class="詳細リスト"> <span class="detail-title">カーネルスペースの使用率 (%)</span> <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">アイドル (%)</span> <span class="detail-describe">{2}</span> </p> <p class="詳細リスト"> <span class="detail-title">ハード割り込み (%)</span> <span class="detail-describe">{3}</span> </p> <p class="詳細リスト"> <span class="detail-title">ソフト割り込み (%)</span> <span class="detail-describe">{4}</span> </p> <p class="詳細リスト"> <span class="detail-title">io 待機時間 (%)</span> {5} </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>\n'''.format(self.status['user'],self.status['system'],self.status['idle'],self.status['hardirq'],self.status['softirq'],self.status['iowait']) 結果を返す クラス memResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>メモリ</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>グローバル</span></div> <div class="詳細"> <p class="詳細リスト"> <span class="detail-title">合計サイズ</span> {0:8.2f}G </p> <p class="詳細リスト"> <span class="detail-title">フリーサイズ</span> {1:8.2f}G </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>'''.format(self.status['total'],self.status['avariable']) 結果を返す クラスmysqlResources(オブジェクト): def __init__(自分自身、ステータス): self.status = ステータス __str__(自分)を定義します: 結果=''' <div class="list-item"> <div class="カテゴリ"> <span>MySQL</span> </div> <div class="第2段階"> <div class="ステージリスト"> <div class="stage-title"><span>{0}</span></div> <div class="詳細"> <p class="詳細リスト"> ログ待機 <span class="detail-describe">{1}</span> </p> <p class="詳細リスト"> <span class="detail-title">binlog_cache_use</span> <span class="detail-describe">{2}</span> </p> <p class="詳細リスト"> <span class="detail-title">temp_disk_table を作成します</span> <span class="detail-describe">{3}</span> </p> <p class="詳細リスト"> <span class="detail-title">遅いクエリ</span> <span class="detail-describe">{4}</span> </p> <p class="詳細リスト"> </p> </div> </div> </div> </div>'''.format(self.status['port'],self.status['Innodb_log_waits'],self.status['Binlog_cache_use'], self.status['Created_tmp_disk_tables']、self.status['Slow_queries']) 結果を返す クラスhostResources(オブジェクト): def __init__(self,cpu_info,mem_info,disk_info,mysql_info,report_title='MySQL 検査レポート'): self.cpu = cpuResources(cpu_info) 自己.mem = memResources(mem_info) self.disk = ディスクリソース(disk_info) self.mysql = mysqlResources(mysql_info) self.report_title = レポートタイトル __str__(自分)を定義します: 結果='''<!DOCTYPE html> <html lang="ja"> <ヘッド> <メタ文字セット="UTF-8"> <title>検査報告書</title> <スタイル> *{ マージン: 0; パディング: 0; } 。コンテンツ{ 幅:1000ピクセル; 高さ: 自動; マージン: 30px 自動; ボーダー下部:1px 実線 #b2b2b2; } .リスト項目{ 境界線:1px 実線 #b2b2b2; 下部境界線: なし; 移行: すべて .35; オーバーフロー: 非表示; ディスプレイ: フレックス; } .リスト項目:空{ 表示: なし; } .トップタイトル{ 行の高さ: 32px; フォントサイズ: 16px; 色: #333; テキストインデント: 10px; フォントの太さ: 600; } 。カテゴリ{ 幅:97px; 高さ: 自動; 右境界線: 1px 実線 #b2b2b2; フロート: 左; テキスト配置: 中央; 位置: 相対的; } .stage-title>スパン、 .カテゴリ>span{ 表示: ブロック; 高さ: 20px; 幅:100%; テキスト配置: 中央; 行の高さ: 20px; 位置: 絶対; 上位: 50%; 上マージン: -10px;左: 0; } .第2段階{ 幅:900ピクセル; フロート: 左; } .ステージリスト{ 下境界線: 1px 実線 #b2b2b2; ディスプレイ: フレックス; } .ステージリスト:最後の子{ 下境界線: 0; } .ステージタイトル{ 幅:99px; 右境界線: 1px 実線 #b2b2b2; 位置: 相対的; } 。詳細{ フレックス: 1; } .詳細リスト{ 下境界線: 1px 実線 #b2b2b2; 高さ: 40px; ディスプレイ: フレックス; 移行: すべて .35; } .詳細タイトル{ パディング: 10px; 高さ: 20px; 行の高さ: 20px; 右境界線: 1px 実線 #b2b2b2; 幅:200px; } .詳細説明{ フレックス: 1; パディング: 10px;行の高さ: 20px; } .詳細リスト:最後の子{ 下境界線: 0; } .list-item:hover{ 背景色: #eee; } .detail-list:hover{ 背景色: #d1d1d1; } </スタイル> </head> <本文> <div class="content"> <div class="リスト項目"> <p class="top-title">レポートタイトル</p> </div>\n''' 結果 = result.replace('report_title', self.report_title) 結果 = 結果 + self.cpu.__str__() 結果 = 結果 + self.mem.__str__() 結果 = 結果 + self.disk.__str__() 結果 = 結果 + self.mysql.__str__() 結果=結果+''' </div> </本文> </html>''' 結果を返す __name__=="__main__"の場合: パーサー = argparse.ArgumentParser() parser.add_argument('--verbose',type=int,default=1,help='出力の詳細') parser.add_argument('--user',default='chkuser',help='mysqlに接続するためのユーザー名') parser.add_argument('--password',default='123456',help='mysql に接続するためのユーザーパスワード') parser.add_argument('--host',default='127.0.0.1',help='mysql ホスト IP') parser.add_argument('--port'、デフォルト=3306、タイプ=int、ヘルプ='mysql ポート') parser.add_argument('--int-status',default=('Com_select,Com_insert,Com_update,Com_delete,Innodb_log_waits,' 'Binlog_cache_disk_use、Binlog_cache_use、作成されたtmp_disk_tables、' 'Slow_queries') 、help = 'mysql ステータスの値は int のように') parser.add_argument('--report-title',default='MySQL 検査レポート',help='レポートのタイトル') parser.add_argument('--output-dir',default='/tmp/',help='デフォルトのレポートファイル出力パス') 引数 = パーサー.parse_args() cpu_info = get_cpu_info(args.verbose) mem_info = get_mem_info(args.verbose) disk_info = get_disk_info(args.verbose) status_list=[IntStatus(name=item) args.int_status.split(',')] 内のアイテム mysql_info = get_mysql_info(引数、ステータスリスト) #dr=ディスクリソース(ディスク情報) #cr=cpuリソース(cpu_info) #mr=memResources(mem_info) #msr=mysqlリソース(mysql_info) hr = ホストリソース(cpu_info、mem_info、disk_info、mysql_info、args.report_title) now = str(datetime.datetime.now()).replace(' ','^') args.output_dir.endswith('/') != True の場合: args.output_dir = args.output_dir + '/' ファイル名=args.output_dir+'mysql_inspection_{0}.html'.format(現在) 出力としてopen(filename,'w')を使用します: 出力を書き込みます(hr.__str__()) print('[レポート] レポートが {0} に保存されました。OK.... ....'.format(filename)) 上記のMySQL検査スクリプト(必読)は、編集者が皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。 |
>>: サブメニューをクリックする効果を実現するJavaScript
WebRTC は、Web Real-Time Communication の略で、Web リアルタイ...
このステータス コードは、リクエストのステータスに関する情報を提供し、サイトとリクエストされたページ...
(1)サーバー構成: [root@localhost ~]# cd /usr/local/src/ ...
スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...
Debian の紹介Debian は、広い意味では、フリーなオペレーティング システムの作成に専念...
この記事では、MySQL 5.7.18アーカイブ圧縮版をインストールする具体的な方法を参考までに紹介...
乱雑なログ日常的に使用される Nginx は、静的リソース サーバーとリバース プロキシ サーバーの...
バックエンド管理システムで作業している場合、通常、メニュー権限制御に関連する問題に遭遇します。もちろ...
メインライブラリの実行 CREATE DATABASE test CHARACTER SET utf...
画像タグ: <img> ページに画像を挿入するには、「src」属性を持つ「img」タグを...
主な違い: 1. タイプSQL データベースは主にリレーショナル データベース (RDBMS) とし...
目次1. html2Canvasをインストールする2. 必要なVueコンポーネントを導入する3. ス...
次のように、Win10でMysqlの解凍バージョンをインストールします。環境: win10 64ビッ...
MySQL を長い間使用してきた多くの人は、これら 2 つのフィールド属性の概念をまだよく理解して...
目次1. 即時フィードバック1.1 ボタンからの即時フィードバック1.2 継続的なフィードバック1....