共有ストレージ・パスの監視

(私も、仮想化、パブリック、プライベートクラウド、クラスターを果たしている)Iこれらの記事は、Googleのレベルの運用・保守の軽蔑のためかもしれないが何の監視は、運用・保守ませんが、これらは非常に地球にダウン実際のケースであり、費やすことはありません変化に変更し、初心者のためのお金は、最後の仕上げ、ケーキの上のアイシング効果を持っている大規模プロジェクトで使用されるマスターのために直接使用することができます。

テクノロジーは、より多くのプレーChuming唐を再生することです。

同様に、需要の簡単な背景:

それは、共有ストレージ上にない場合は今すぐいずれかの会社、(NASまたはEMCのいずれか、または分散型ディスクアレイのか、ISCSI、またはSANかどうか)、私はそれが原始社会にまだあると思います。

最も直感的なユーザログオンがネットワークパス\\ IPアドレスであるか、あまりにも一般的に使用する場合、ローカルにネットワークドライブをマップし、問題が来ました。

ちょうど彼らが失われたり、通常されていないファイルの共有作業パスに格納された文書を設計言って、数日、トラブルのボス設計部門に到着した(ファイル名を見ることができますが、サイズが0である)、私の最初の反応NASは問題ですが、経験は、QNAP NASの企業がそう飛んでいないされていない私に語りました、

設計部門での仕事は、直接ネットワークドライブ、またはネットワークディスクパスに直接ファイルを保存するための新しいデザイン・ソフトウェアから直接開いた2Dまたは3D設計ソフトウェア・デザイン・ファイルであることを学びました。

私の意見ではそうすることの目的は、ローカルに保存されたハードディスクの必要性を排除して、アップロードし、共有ストレージプロセス、不可能ではないにダウンロードするが、お勧めしません、そしてなぜ、怠惰になることですか?

ジッタそれならば、直接ネットワーク経由でオープンなネットワークディスクファイルに1、、ローカルエリアネットワークの安定性は、より良い、言いましたか?(時折、ジッタ、悪魔はそれを知っている?おろか原因を見つける)、文書の半分はそれを保存するための時間を無駄にしないでください。

2は、EMC SAN(高信頼性、高可用性、ハイスピード)上の一般的な企業や消極的のためではない愚かなお金もギガビットデバイスの場合、不正なインターネット回線工事の場合は、どこまで(高速スイッチでの一般的なエントリーレベルのNASを前方に置きます自動的に、また、)高速ギガビット未満に速度を10Mのネットワークディスクファイルのアップロードとダウンロードの速度を遅くし、文書を保存するためにローカルのハードディスクをオンにし、トラブルのビットを節約するために、単純に異なっている、数十Mを開きます3Dは半分ちょっと待っない、愚かではない愚かな、修正、あなたが見クラッシュには直接応答して描画します。

3、ジョブファイルを編集して、ローカルのハードディスクにして、ネットワークディスク・プロセスが明示的にアップロード、ダウンロード、失敗成功、明確な、直接ソフトウェアの仕事を通じて直接、ネットワークディスクプルにし、文書を保存するには、ソフトウェアの背景を作業、暗黙的ですあなたは、成功した場合、ソフトウェアのバグを知る方法を行いませんか、と明らかにソフトウェアが文書を保存しますが、表示はNAS上の正常ではありません。

I私が上記に要約したビューの運用・保守のポイントでのビジネス経験の豊富な、しかし、設計部門の上司は耳を傾けるが、認識されないために説明する時、上下に数回は、私は怒って、武装させる技術を使用する必要として、技術に従事する自分自身、彼のポイントを証明します。

だから、このチュートリアルでは、同僚への危害のすべての種類があることをこのとして理解していない人にそれを与えるだろう。

まず第一に、私は、のような、ビートのような仮想マシンのスナップショットを作成し、ファイルのディレクトリとサイズ、変更時間内のディスクの設計部門を共有遡及私のクエリのためのタイミングのスナップショットを取得する必要があると思います。

プレイLinuxのように、これは取り扱いが非常に簡単で、基本的な考え方は、使用のcrontabを取得するために、定期的な木のコマンドの実装に行き、その後、内部のlinuxをマウントするネットワークディスクを監視する必要があるということである、彼はそれが簡単になるか、いくつかのステップを行きます:

1、CentOSのマウントNAS共有ディスク:

写真.PNG

好ましくは自動的にマウントさそうオープン、内部/etc/rc.localの起動ファイルに追加し、

2、ログ出力ディレクトリのサイズにタイミングを合わせたスクリプトファイルを、編集します。

ツリー--charset UTF-8 /ルート/デザイン/設計/ -s -D -h -N> /root/design_monitor/design.dir 
ツリー--charset UTF-8 /ルート/デザイン/写真/ -s -D - H -N> /root/design_monitor/photo.dir

例えば、ディレクトリツリーの二つの主要なサーベイランス、このカタログのデザインを取るために、以下の図を共有してしまいますシェルスクリプトを実行して、オープンdesign.dirスクリプトファイル出力:

写真.PNG

ディレクトリモニタ(無料、高度な機能代)が、フリー基本バージョン:この問題の説明に十分な光がありません、私はスタッフがハードワークが報わ、ネットワークディスクに毎日行っている知っている必要があり、私は武器を見つけました、インターネットは十分割れていましたが、私は必要はありません。

写真.PNG

ウィンドウサーバーにソフトウェアをインストールした後、サーバは一年中をシャットダウンしていない、それはディレクトリの7X24時間監視に相当し、このようなものは、非常に強力な非常に専門的、(初心者用)もちろん、非常に白、使いやすいです。

写真.PNG

定義された監視パラメータと同様にログ出力パス位置(私は直接、共有ディスクの監視、簡単にアクセスでlinuxに入れて):

写真.PNG

このようなディレクトリの操作ログに何かを取得します。

写真.PNG

我这人很懒,这么闹心的一件事,我不想每天都惦记着,我得让它自动化,每天发个邮件把上面所有的东东作为附件到我和那位设计部老大的邮箱里,啥时候出现问题,自己去追溯,不要说我没有证据,想仿照DiretoryMonitor一样不用打开附件就直接能看到漂亮的操作日志,就做一下html格式化。

那么,在linux下面又弄个python程序去做这件事,直接上干货:

# !/usr/bin/python3

import smtplib
import os , time
from email.mime.text import MIMEText
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart

today = time.localtime(time.time())
today = time.strftime('%Y%m%d', today)

def lastestfile(path):
        filenamelist = os.listdir(path)
        tm = os.stat(path + filenamelist[0])
        name = filenamelist[0]
        for item in filenamelist:
                temp = os.stat(path + item)
                if tm.st_ctime < temp.st_ctime:
                        tm = temp
                        name = item

        return name

design_log_path = '/root/design/Log/design_log/'
design_log_name =  lastestfile(design_log_path)
design_log_path = design_log_path + design_log_name

photo_log_path = '/root/design/Log/photo_log/'
photo_log_name =  lastestfile(photo_log_path)
photo_log_path = photo_log_path + photo_log_name

def htmlContent(path):

    log_text = open(path, 'r',encoding='utf-8')
    lines = log_text.readlines()
    head = "<table border='0' align='center'  style='font-size:14px;word-break: keep-all'><tr bgcolor='3F48CC'><th><font color='ffffff'>操 作</font></th><th><font color='ffffff'>执 行 时 间</font></th><th><font color='ffffff'>文 件 路 径</font></th></tr>"

    tmp = ""

    for line in lines:
        if line.find("新增")>=0:
            t = line.index(' ')
            tmp = tmp + "<tr bgcolor='9DF9B8'><td align='center'   width = 45><font color='198A3A'><b>" + line[0:t] + "</b></font></td><td width = 150><font color='000000'>" + (line[t + 1:].split(': '))[0] + "</font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[1] + "</font></td></tr>"

        elif line.find("修改")>=0:
            t = line.index(' ')
            tmp = tmp + "<tr bgcolor='BDE8FA'><td align='center'   style= 'word-break: keep-all'><font color='3F48CC'><b>" + line[0:t] + "</b></font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[0] + "</font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[1] + "</font></td></tr>"

        elif line.find("重命名")>=0:
            t = line.index(' ')
            tmp = tmp +  "<tr bgcolor='FCFAD1'><td align='center'  style= 'word-break: keep-all'><font color='E37C35'><b>" + line[0:t] + "</b></font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[0] + "</font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[1] + "</font></td></tr>"
         elif line.find("删除")>=0:
            t = line.index(' ')
            tmp = tmp + "<tr bgcolor='FCDEDF'><td align='center'  style= 'word-break: keep-all'><font color='ED1C24'><b>" + line[0:t] + "</b></font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[0] + "</font></td><td><font color='000000'>" + (line[t + 1:].split(': '))[1] + "</font></td></tr>"

        else:

            pass


    htmlContent=head + tmp + "</table>"
    return htmlContent




sent_content = "<table border='0' align='center' nowrap><caption>Directory Monitor---【design】</caption><tr><td>" + htmlContent(design_log_path) + "</td></tr></table><br><table border='0' align='center' ><caption>Directory Monitor---【photo】</caption><tr><td>" + htmlContent(photo_log_path) + "</td></tr></table>"

_user = "邮箱账号"
_pwd = "密码"
_to = "设计部和我的邮箱群组"


msg = MIMEMultipart()
msg["Subject"] = "Design-Dep NAS File Snapshot"
msg["From"] = _user
msg["To"] = _to


part = MIMEText(sent_content, 'html', 'utf-8')
msg.attach(part)


part = MIMEApplication(open('/root/py_script/design_monitor/design.dir', 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename="design_" + today + ".dir")
msg.attach(part)


part = MIMEApplication(open('/root/py_script/design_monitor/photo.dir', 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename="photo_" + today + ".dir")
msg.attach(part)


part = MIMEApplication(open(design_log_path, 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=design_log_name)
msg.attach(part)

part = MIMEApplication(open(photo_log_path, 'rb').read())
part.add_header('Content-Disposition', 'attachment', filename=photo_log_name)
msg.attach(part)

S = smtplib.SMTP( "メールボックスサーバアドレス"、タイムアウト= 30)
s.login(_user、_pwd)
s.sendmail(_user、_to、msg.as_string())
S。CLOSE()

最後のショーのレンダリング:

写真.PNG

何が良いです、そして最後に、上司は再び設計ドキュメントのデザインが異常であることを訴え次回、と私は(自分の文書は、ログを見ずに、彼はおそらく知っている場合は、この文書が作成された日常の操作ログを検索します)行われたときに、

新しい一日を見つけるためにログを操作することにより、その後、ファイルツリーコマンドは、一日の貧しい出力ディレクトリツリーを押収した日は、誰のせいにしていないソフトウェアは、ネットワークディスクを節約するために適切に設計されていないことを示す、珍しい作成することであることがわかりましたそして、設備;

スポットは何が正常に保存されていないことを確認した上で行っていないその設計、ソフトウェア設計およびネットワークドライブ上の重要な書類の保存に彼にあまりにも多くの信仰を責め非難します。

このように、彼らの口からしつこいデザイン学科は時々説明なしで、私の耳をきれいにするために、シャットダウン、彼らは証明したいです。

写真.PNG

おすすめ

転載: blog.51cto.com/kingda/2425831