設計:メンテナンス | シストレの現実

シストレの現実

インフラ構築のプロが、シストレをゼロから始める記録です。
リーン・スタートアップの考えを取り込み、Expert Adviser を作っていきます。

教えるような大したものではなく、ユースケースの一つになれば幸いです。

いよいよ設計の最終項目である、メンテナンス について設計します。

すごく地味に感じるかもしれません。しかし、前から書いている通り、最初に作る期間より圧倒的に運用する期間の方が長いので、運用に関する設計は極めて重要です。
また、決めておかなければいけない内容もたくさんあります。ここを踏ん張って、確実な物を考えておきたいところです。

メンテナンス

【要件】
○対象
 トレードロジック / MT4  / インフラ
○環境
 本番環境 / 検証環境 / 開発環境
○仕組み
 工数削減 / トラブル回避
○計画
 定期メンテナンス(障害対応除く)


【設計】
○インフラ / MT4
 ■毎週土曜 AM8時から自動アップデートを実行する。
  ・OS: 
Windows Update
  ・
DSA: セキュリティアップデート ほか
 ※ただし、緊急の脆弱性などがあった場合には速やかに実行する。

 ■手動作業を行う必要があるアップデートは毎月第一日曜日の夜間に実行する。
  ・ MetaTrader4 アップデート(あれば。。。)
  ・ DSA ソフトウェアアップデート ほか

 ■ログ管理
  ・ログフォルダ自体を Google Drive を通じて転送すること。
    本番/検証環境 → 開発環境
  ・本番環境の中でもログデータを毎朝8時にミラーリングする。(誤操作対応)
    c:\log -> c:\log_backup


○ EA / Expert Analyzer (トレードロジック)
 ■サイクル
  ・土曜AM7時~日曜PM20時の間に毎週成績を評価する。
  ・PDCA設計で作った内容を、ログに基づいて実行します。
  ・期待した効果が見られない場合は、最長4週間、最低1週間 で修正を行います。
  
 ■EAリリース
  ・日曜PM20時~翌0時までに改修したプログラムに差し替え
  ・Google Drive で本番環境 / 検証環境へ開発環境からEAプログラム(≠ソースコード)を配信します。
   同期対象: c:\EA\ea01.ex4
  ・実際MT4で実行するEAは下記フォルダのEAプログラムとする。必ず上記フォルダからコピーして使用する。そのまま実行は禁止!
   同期対象: c:\EA\release\ea01.ex4
  ・開発環境のソースコードは下記に配置します。ただし、同期対象から除外します。
   ソースコード: c:\ea\src

 ■バージョン管理
  ・開発環境にて Git を使用して管理する。
  ・可能であれば、GitHub にてソース公開を行う。(野望)


あと、ここまで設計を色々やってきて、障害監視について設計していないことに気付きました。
というわけで、急いで下記の通り設計しました。

障害監視

【要件(追加)】
・OS および MT4 に異常が発生したことをタイムリーに通知できること。
・最低限、メール通知を行えること。
・可能な限り、通知で 「障害発生時刻」 と 「障害内容」 を確認できること。
・監視間隔は、「リアルタイム」 もしくは 「パフォーマンスに影響がない間隔」 とする。


【設計】
下記の3種類で監視したいと思います。

Amazon Cloud Pack
 ・EC2インスタンス死活監視
 ・リソース監視 ・・・ CPUおよび主メモリが一定時間に使用率90%以上である場合に発泡する。
 ・ログ監視はしない(DSAで実施する)
 ・Amazon SNS で Eメール通知
 ・記載できるだけ発生時間障害内容を記載する

○DSA  セキュリティログ監視
 ・イベントログ(システムログ/アプリケーションログ)を異常監視
 ・EAが出力するログをテキスト監視(随時設定)
  → c:\logs\mt4\ea\eaYYYYMMDD.log に出力します。
 ・後述するプロセス監視スクリプトが出力するログを監視して、プロセスが停止していたら発報
  ※YYYYMMDDは年月日を表す数字八桁

○カスタムスクリプト
 ■MT4稼働監視スクリプト
  ・短い間隔でMT4のプロセスを監視し、停止を確認した場合にはログ出力する。
   → c:\logs\mt4\process\procYYYYMMDD.log に出力します。

 ■(方法が見つかれば)EA稼働確認スクリプト
  ・MT4上のEAを短い間隔で監視し、停止を確認した場合にはログ出力する。
  → c:\logs\mt4\ea_check\eachkYYYYMMDD.log に出力します。
  ※YYYYMMDDは年月日を表す数字八桁

まぁ、まだまだ粗くて、開発フェーズでまた色々細かくは出てくると思います。

2015年のうちに無事設計まで終わりました。
年明けから、いよいよ開発に入っていきたいと思います。

良いお年を。