以下のように表示されます。 #!/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
目次序文原因現象なぜ?分析要約する序文今日は、非常に典型的な MySQL の「落とし穴」についてお話...
開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...
mysql のデフォルトのストレージ ディレクトリは/var/lib/mysql/です。以下は、デフ...
HTML のフォームを使用して、ユーザーからさまざまな種類の入力情報を収集できます。フォームは、実際...
Yum経由でJenkinsをインストールする1. インストール # yum ソースをインポート wg...
目次1. データベース内の MySQL ステータスを確認します。 2. 設定ファイルを変更します。 ...
最も人気のあるフロントエンド フレームワークの 1 つとして、Vue は多くのフロントエンド開発エン...
目次1. マップ方式2. 応用背景:需要開発プロセス中に、一部のインターフェースは、ページに表示する...
html ¶ <html></html> html:xml ¶ <ht...
nginx が proxy_pass を設定する場合、末尾に "/" がある U...
目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...
Founder Type Library は、Founder Type Library ビジネス チ...
forループ基本的な構文形式: for(変数の初期化; 条件式; 演算式){ループ本体ステートメント...
背景一部のショッピング モールの Web ページで商品の詳細を開くと、購入数量を選択するためのカウン...
<br /> テキスト、シンボル、リンクの 3 つの側面に焦点を当て、主に中国語で、私の...