Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】DevOps Automation with Python: Intelligent System Monitoring with Auto Recovery

2025年09月11日に「Dev.to」が公開したITニュース「DevOps Automation with Python: Intelligent System Monitoring with Auto Recovery」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

PythonでシステムのCPU・メモリ・ディスク使用率やサービス稼働状況を監視し、異常を検知すると自動でサービスを再起動する方法を紹介。設定ファイルで監視条件や通知設定を柔軟に変更でき、障害対応の迅速化と安定したシステム運用を実現する。

ITニュース解説

DevOpsという考え方は、ソフトウェアの開発と運用を連携させ、より迅速で信頼性の高いシステム構築を目指すアプローチだ。このDevOpsにおいて、システムの安定稼働は非常に重要であり、そのために自動化が中心的な役割を果たす。サーバーの監視、問題の検出、そして問題が発生した際の復旧といった一連の作業を人の手で行うと、時間と労力がかかり、ミスも発生しやすくなる。そこで、スクリプトを使った自動化が大きな力を発揮する。

スクリプトを利用することには、いくつかの明確な利点がある。一つ目は「迅速な対応」だ。システムに異常が発生した際、スクリプトは人間の操作よりもはるかに早く問題を検出し、対処を開始できるため、ダウンタイムを最小限に抑えることが可能になる。二つ目は「一貫性」だ。スクリプトは常に同じ手順でタスクを実行するため、人為的なエラーのリスクを大幅に減らし、安定した運用を実現する。三つ目は「スケーラビリティ」だ。一台のサーバーだけでなく、数百台ものサーバーを一台のスクリプトで管理できるため、大規模なシステムでも効率的に運用できる。そして四つ目は「ドキュメンテーション」としての側面だ。適切に書かれたスクリプトは、そのシステムがどのように動作し、どのような処理を行うべきかを明確に示してくれるため、作業手順書のような役割も果たす。

この記事で紹介されているPythonスクリプトは、このような自動化の利点を活用し、システムの監視と自動復旧を実現するものだ。具体的には、サーバーのCPU使用率、メモリ使用率、ディスク使用率、そしてシステム全体の負荷平均といった主要なリソース利用状況を定期的に監視する。また、NginxやMySQLといった特定のサービスが正常に動作しているかどうかもチェックする。もし、いずれかのリソースが設定された閾値(しきいち)を超えたり、監視対象のサービスが停止したりといった異常が検出された場合、スクリプトは自動でそのサービスを再起動しようと試みる。それでも復旧しない場合は、管理者へメールで通知を発信する仕組みも備わっている。

このスクリプトはPython言語で書かれており、いくつかの便利なライブラリを活用している。例えば、「psutil」というライブラリは、システムのCPU、メモリ、ディスクといったリソース情報を簡単に取得するために使われる。これにより、現在のシステムの状態を数値で把握できる。「subprocess」ライブラリは、Pythonスクリプトの中から「systemctl」のようなOSのコマンドを実行するために利用される。これを使って、特定のサービスがアクティブかどうかをチェックしたり、停止したサービスを再起動したりする。「logging」ライブラリは、スクリプトの実行中に発生したイベントやエラーを記録するために使われる。これにより、後からシステムの状況や問題の原因を追跡できる。「smtplib」と「email.mime」ライブラリは、異常を検出した際に、管理者へメールで通知を送る機能を実現するために使われる。

スクリプトの動作は、monitor_config.jsonという設定ファイルによって細かく制御できる。この設定ファイルでは、CPU使用率が何パーセントを超えたら「異常」と判断するか、メモリ使用率が何パーセントを超えたら「異常」と判断するか、といった各リソースの閾値を設定できる。また、監視対象とするサービスのリストや、メール通知に使用するSMTPサーバーの情報、送信元・送信先のアドレス、認証情報なども設定できる。さらに、システムを監視する間隔(何秒ごとにチェックするか)、サービスが停止した際の復旧を何回試みるか、そしてアラートメールを送信した後に次に同じ種類のアラートを送るまでのクールダウン期間(頻繁なアラートでメールボックスが埋まるのを防ぐため)なども設定できる。

スクリプトは、まずこの設定ファイルを読み込むことから始まる。その後、定期的にget_metricsメソッドでCPU、メモリなどのシステムリソース情報を取得し、check_servicesメソッドで指定されたサービスの稼働状況を確認する。取得した値が設定された閾値を超えていないか、サービスが停止していないかをチェックし、異常があればログに記録する。サービスが停止していた場合は、設定された回数だけattempt_recoveryメソッドでサービスの再起動を試みる。復旧に成功すればその旨を記録し、復旧に失敗した場合はsend_alertメソッドを使って管理者にメールで通知する。このメール通知にはクールダウン機能があり、短期間に同じ種類のアラートが何度も送られるのを防ぐ。この一連の監視と復旧のサイクルを、設定された間隔で無限に繰り返す仕組みとなっている。

このスクリプトを単に実行するだけでなく、システム起動時に自動で開始し、常にバックグラウンドで動き続けるようにするには、「Systemd」という仕組みを利用する。SystemdはLinuxシステムでプログラムを管理するためのもので、このスクリプトをSystemdサービスとして登録することで、サーバーが起動した際に自動的にスクリプトが実行されるようになる。また、もし何らかの理由でスクリプトが停止してしまっても、Systemdがそれを検知し、自動で再起動してくれる設定も可能だ。これにより、監視システム自体の安定性も高まり、信頼性の高い運用が実現できる。

まとめると、このPythonスクリプトは、CPU、メモリ、ディスク使用率、ロードアベレージのリアルタイム監視、指定されたサービスの稼働監視と自動再起動、JSONファイルによる柔軟な設定と閾値管理、スパムを避けるためのクールダウン機能を備えたメール通知、そしてSystemdを活用した信頼性の高いバックグラウンド実行といった多機能を提供する。このような自動化スクリプトは、DevOpsの実践において非常に重要な要素であり、システムの回復力を高め、予期せぬダウンタイムを削減し、システムエンジニアがより戦略的な業務に集中できる時間を生み出す。ただし、このような自動化ツールを実際の運用環境に導入する前には、必ず開発環境やテスト環境で十分に動作検証を行うことが非常に重要である。

関連コンテンツ

関連IT用語