Bot

開発記録#156(2025/3/25)「論文ベースのbot開発フローpart.18」

2025年3月25日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。

🔍 デプロイ後の安定性確認 (サーバー監視とログの確認)

次のステップでは、システムの安定性を確保するために、以下のポイントに焦点を当てて確認します。


1. 確認の目的

✅ 長期運用中の安定性確認
✅ 異常やエラーの早期発見と対策
✅ リソース使用状況の監視
✅ Botのパフォーマンス記録


2. 確認チェックリスト

チェック項目内容コマンド / 手順
Podの状態すべてのPodが正常稼働しているかkubectl get pods
データ収集の安定性データ収集のエラーや欠損がないかkubectl logs <data_collector_pod>
P&Dイベント検出精度実際の市場データと比較して検出率を確認Grafanaのダッシュボード確認
取引成功率取引成功率と利益率の確認Slack通知 / ログ確認
APIエラーの発生率API接続や認証エラーの有無kubectl logs <trade_executor_pod>
CPU/メモリ使用率使用状況が適正か (70%以下が目標)kubectl top pods
Slack通知通知の正常性を確認Slackチャネル確認

3. リアルタイム監視コマンド

✅ Podの状態確認

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl get pods
kubectl get pods
kubectl get pods

✅ ログのリアルタイム確認

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl logs -f <POD_NAME>
kubectl logs -f <POD_NAME>
kubectl logs -f <POD_NAME>

✅ CPU/メモリ使用状況の確認

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
kubectl top pods
kubectl top pods
kubectl top pods

4. エラー発生時の対応フロー

エラータイプ原因対応方法
APIエラーBybit APIの通信失敗APIキーの確認 ➔ 再試行処理を確認
データ欠損ネットワーク遅延や接続断kubectl restart <data_collector_pod>
CPU/メモリ過負荷Botの計算量が増加kubectl scale deployment crypto-bot --replicas=5
Slack通知エラーSlack API接続失敗Slack Webhook URLの確認 ➔ 再デプロイ

5. 定期監視の自動化

✅ 監視スクリプト (monitor.py)

以下のスクリプトは、CPU/メモリ監視とエラー検出時のSlack通知を行います。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import subprocess
import requests
import time
from datetime import datetime
# Slack通知設定
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR_WEBHOOK_URL"
# Slack通知関数
def send_slack_alert(message):
payload = {"text": f"🚨 {message}"}
requests.post(SLACK_WEBHOOK_URL, json=payload)
# CPU/メモリ使用率監視
def check_resource_usage():
result = subprocess.getoutput("kubectl top pods")
for line in result.split('\n')[1:]:
data = line.split()
pod_name, cpu, mem = data[0], int(data[1].replace('m', '')), int(data[2].replace('Mi', ''))
if cpu > 700 or mem > 1000:
alert_msg = f"{pod_name} のリソース使用率が高すぎます (CPU: {cpu}m, メモリ: {mem}Mi)"
print(alert_msg)
send_slack_alert(alert_msg)
# メイン処理
def monitor_system():
while True:
check_resource_usage()
time.sleep(300) # 5分ごとに確認
if __name__ == "__main__":
monitor_system()
import subprocess import requests import time from datetime import datetime # Slack通知設定 SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR_WEBHOOK_URL" # Slack通知関数 def send_slack_alert(message): payload = {"text": f"🚨 {message}"} requests.post(SLACK_WEBHOOK_URL, json=payload) # CPU/メモリ使用率監視 def check_resource_usage(): result = subprocess.getoutput("kubectl top pods") for line in result.split('\n')[1:]: data = line.split() pod_name, cpu, mem = data[0], int(data[1].replace('m', '')), int(data[2].replace('Mi', '')) if cpu > 700 or mem > 1000: alert_msg = f"{pod_name} のリソース使用率が高すぎます (CPU: {cpu}m, メモリ: {mem}Mi)" print(alert_msg) send_slack_alert(alert_msg) # メイン処理 def monitor_system(): while True: check_resource_usage() time.sleep(300) # 5分ごとに確認 if __name__ == "__main__": monitor_system()
import subprocess
import requests
import time
from datetime import datetime

# Slack通知設定
SLACK_WEBHOOK_URL = "https://hooks.slack.com/services/YOUR_WEBHOOK_URL"

# Slack通知関数
def send_slack_alert(message):
    payload = {"text": f"🚨 {message}"}
    requests.post(SLACK_WEBHOOK_URL, json=payload)

# CPU/メモリ使用率監視
def check_resource_usage():
    result = subprocess.getoutput("kubectl top pods")
    for line in result.split('\n')[1:]:
        data = line.split()
        pod_name, cpu, mem = data[0], int(data[1].replace('m', '')), int(data[2].replace('Mi', ''))
        
        if cpu > 700 or mem > 1000:
            alert_msg = f"{pod_name} のリソース使用率が高すぎます (CPU: {cpu}m, メモリ: {mem}Mi)"
            print(alert_msg)
            send_slack_alert(alert_msg)

# メイン処理
def monitor_system():
    while True:
        check_resource_usage()
        time.sleep(300)  # 5分ごとに確認

if __name__ == "__main__":
    monitor_system()

✅ スクリプトの実行

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
python monitor.py
python monitor.py
python monitor.py

6. データの記録と評価

データ項目記録方法評価指標
取引結果Slack通知 + ログファイル取引成功率、利益率
P&D検出結果Slack通知 + Grafanaダッシュボード検出成功率、誤検出数
リソース使用率Prometheus/GrafanaCPU 70%以下、メモリ 70%以下
エラー発生数kubectl logs + Slack通知APIエラー 5%以下

7. 今後の対応計画

  1. ✅ システムの稼働状況確認 (ログ・リソース状況)
  2. ✅ APIエラーやBot停止などの問題がないか確認
  3. ✅ 取引の成功率や利益率を確認し、必要に応じた調整
  4. ✅ 1週間ごとの安定性チェックと最適化

8. 次のステップ

運用が安定した後の対応として、以下を検討するのが良いでしょう。

✅ 運用後の改善提案 (トレードロジックの強化や新機能の追加)
✅ セキュリティ強化 (データバックアップ、APIキーのローテーションなど)
✅ パフォーマンス改善 (アルゴリズムの最適化や計算の高速化)

Yodaka

次のステップとして、改善案に基づいたシステムの強化に取り組みます。

関連
開発記録#157(2025/3/25)「論文ベースのbot開発フローpart.19」

続きを見る

-Bot

S