オープンファルコンモニタリングウィンドウシステムを実装するためのPythonスクリプト

Xiaomiのオープンソース監視システムであるOpen-falconには、Linuxに関する多くの情報がありますが、Windowsシステムに関する情報は比較的少ないです。公式文書でさえ、Windowsシステム展開エージェントのすべてのコンテンツを要約するこれらの行しかありません。
ここに画像の説明を挿入ここに画像の説明を挿入
しかし、現在はWindowsサーバーを監視する必要があるため、このドキュメントによるとゆっくりとしかわかりません。
監視するエージェントをデプロイする必要がないと感じたため(実際、デプロイメントエージェントがエラーを報告し、調整するのが面倒だったため)、Pythonスクリプトを使用してウィンドウの基本情報を監視することにしました。

1.スクリプトをダウンロードします

collect.pyのダウンロードパスはhttps://github.com/freedomkk-qfeng/falcon-scripts/tree/master/windows_collectです

2つ目は、設定と構成の分離です。

スクリプトには、自分で定義および設定できるパラメーターがいくつかありますが、スクリプトは後で実行可能ファイルを生成する必要があるため、スクリプト内でパラメーターを変更するのは難しいため、構成は分離されています。
分離する必要のあるパラメーター
ここに画像の説明を挿入
は次のとおりです。これらのコンテンツをpush.iniという名前のファイルに個別に保存してから、次のコンテンツをスクリプトに追加します。

config = configparser.ConfigParser()
config.read("C:/Windows/work/push.ini",encoding = 'utf-8')
push_url = config.get('config','push_url')
endpoint = config.get('config','hostname')
cpu_interval = config.getint('config','cpu_interval')
push_interval = config.getint('config','push_interval')

Push_urlは、linxuエージェントがデプロイされているサーバーのアドレスに設定されます。

3、サービスとして設定

公式のオープンファルコンドキュメントとは、スクリプトをスケジュールされたタスクとして設定し、一定の時間に1回実行すること、つまりサーバー上でマウス操作を実行することを意味します。サーバーの数が比較的多い場合でも、ワークロードは比較的大きくなります。大きいので、スクリプトをサービスとして常にバックグラウンドで実行するように設定したいと思います(実際、コマンドラインを試してタイミングタスクを設定できるようです)。
まず、次のように、インターネット上でpythonファイル生成サービステンプレートを見つけることができます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import time

import win32api
import win32event
import win32service
import win32serviceutil
import servicemanager
import win32timezone


class WindowsCollectService(win32serviceutil.ServiceFramework):

    _svc_name_ = "WindowsCollectService"
    _svc_display_name_ = "Windows Collect Service"
    _svc_description_ = "Windows Collect Service"

    def __init__(self, args):
        self.log('init')
        win32serviceutil.ServiceFramework.__init__(self, args)
        self.stop_event = win32event.CreateEvent(None, 0, 0, None)

    def SvcDoRun(self):
        self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
        try:
            self.ReportServiceStatus(win32service.SERVICE_RUNNING)
            self.log('start')
            self.start()
            self.log('wait')
            win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
            self.log('done')
        except BaseException as e:
            self.log('Exception : %s' % e)
            self.SvcStop()

    def SvcStop(self):
        self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
        self.log('stopping')
        self.stop()
        self.log('stopped')
        win32event.SetEvent(self.stop_event)
        self.ReportServiceStatus(win32service.SERVICE_STOPPED)

    def start(self):
        time.sleep(10000)

    def stop(self):
        pass

    def log(self, msg):
        servicemanager.LogInfoMsg(str(msg))

    def sleep(self, minute):
        win32api.Sleep((minute*1000), True)

if __name__ == "__main__":
    if len(sys.argv) == 1:
        servicemanager.Initialize()
        servicemanager.PrepareToHostSingle(WindowsCollectService)
        servicemanager.StartServiceCtrlDispatcher()
    else:
        win32serviceutil.HandleCommandLine(WindowsCollectService)

windows_collect.pyのコードをdefSvcDoRun(self)メソッドに挿入できます。
スクリプトはサービスとしてバックグラウンドで実行する必要があるため、データプッシュアドレスが突然接続できなくなるなど、さまざまなエラーが発生する可能性があります。このとき、サービスは直接中断され、データは切断されません。収集され、データは報告されません。システムに再度ログインして、手動でサービスを開始することしかできません。したがって、スクリプトにはフォールトトレラントメカニズムが必要です。
私が使用する方法は比較的単純で失礼です。エラーがある限り、例外がスローされ、操作が続行されます。
ここに画像の説明を挿入
main()メソッドはwindows_collect.pyのコンテンツです
ここに画像の説明を挿入

第四に、実行可能ファイルを生成します

すべてのシステムにPythonがインストールされているわけではないため、実行可能ファイルを生成するには、Pythonスクリプトをパッケージ化する必要があります。

まず、pyinstallerパッケージツールをインストールします

pip install pyinstaller

スクリプトwindows_collect_service.pyから実行可能ファイルを生成します

pyinstaller -F windows_collect_service.py

実行後、現在のディレクトリにdistフォルダーが生成され、このフォルダー内のwindows_collect_service.exeが生成された実行可能ファイルであることがわかります。

5、展開

C:/ windowsパスの下に新しいディレクトリを作成し、workという名前を付けて、push.iniファイルとwindows_collect_service.exeファイルをこのフォルダに配置します。フォルダ内でShiftキーを押したまま、マウスの右ボタンをクリックし、[ここでコマンドウィンドウを開く(w)]オプションを選択し、ポップアップするcmdウィンドウでサービスをインストールして開始します。コマンドは次のとおりです。

  • windows_collectサービスをインストールし、自動的に開始するように設定します
windows_collect_service.exe --startup auto install

windows_collectサービスを開始します。

windows_collect_service.exe start

windows_collectサービスを再起動します。

windows_collect_service.exe restart

windows_collectサービスをオフにします。

windows_collect_service.exe stop

windows_collectサービスをアンインストールします。

sc delete WindowsCollectService

インストールと起動後、プラットフォームにログインすると、データがアップロードされていることがわかります。
ここに画像の説明を挿入

6.エラーの報告と解決

設定ファイルを変更してサービスを開始すると、以下のエラーが発生する場合があります。
ここに画像の説明を挿入
直接編集中にテキストエンコーディングがutf-8からuft-8-BOMエンコーディングに変更されたことが原因である可能性があります。そのため、テキストエディタを使用してuft-8エンコーディングに戻す必要があり、変更
ここに画像の説明を挿入
後は正常に実行されます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/xiguashixiaoyu/article/details/107316413