Bot

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

2025年3月25日

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

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

🔒 セキュリティ強化 (APIキーの安全な管理と監視機能の強化)

次のステップでは、システムのセキュリティを強化するために、以下の2点に取り組みます。

APIキーの安全な管理
監視機能の強化 (Prometheus + Grafana)


1. APIキーの安全な管理

🔎 なぜSecretsが重要か?

  • APIキーや認証情報がconfig.yaml環境変数に直接記載されていると、リスクが高まります。
  • KubernetesのSecretsを活用することで、APIキーなどの機密情報を安全に管理できます。

(1) Kubernetes Secretsの作成

Secrets作成コマンド

kubectl create secret generic api-keys \
  --from-literal=BYBIT_API_KEY='your_bybit_api_key' \
  --from-literal=BYBIT_API_SECRET='your_bybit_api_secret'

確認コマンド

kubectl get secrets
kubectl describe secret api-keys

(2) deployment.yaml の修正

環境変数をSecretsから読み込む

apiVersion: apps/v1
kind: Deployment
metadata:
  name: crypto-bot
spec:
  replicas: 3
  selector:
    matchLabels:
      app: crypto-bot
  template:
    metadata:
      labels:
        app: crypto-bot
    spec:
      containers:
      - name: data-collector
        image: crypto_bot:latest
        env:
        - name: BYBIT_API_KEY
          valueFrom:
            secretKeyRef:
              name: api-keys
              key: BYBIT_API_KEY
        - name: BYBIT_API_SECRET
          valueFrom:
            secretKeyRef:
              name: api-keys
              key: BYBIT_API_SECRET

Secretsの再適用

kubectl apply -f deployment.yaml

2. 監視機能の強化 (Prometheus + Grafana)

🔎 なぜ監視が重要か?

  • システムのパフォーマンスや異常を早期発見
  • トレードシステムではAPIエラー急激なトラフィック増加が致命的になるため、監視は不可欠です。

(1) Prometheus + Grafanaのインストール

PrometheusはKubernetesのPodやNodeのメトリクスを収集します。
Grafanaはこれらのデータを可視化します。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

Prometheusのインストール

helm install prometheus prometheus-community/prometheus

Grafanaのインストール

helm install grafana grafana/grafana

Grafanaの初期パスワード確認

kubectl get secret --namespace default grafana -o jsonpath="{.data.admin-password}" | base64 --decode

Grafanaダッシュボードへのアクセス

kubectl port-forward svc/grafana 3000:80

📊 ブラウザでアクセスhttp://localhost:3000


(2) メトリクスの設定

  1. Exporter導入 (Node Exporter)
    • KubernetesのPodやCPU、メモリの使用状況を監視するためのエクスポーターを追加
  2. Custom Metricsの設定
    • Botの取引件数、エラー率、APIレスポンス時間などのカスタムメトリクスをPrometheusに追加

(3) metrics.py (Botのメトリクス収集)

from prometheus_client import start_http_server, Gauge
import time
import random

# メトリクス定義
trade_success = Gauge('crypto_bot_trade_success', 'Successful trades')
trade_failure = Gauge('crypto_bot_trade_failure', 'Failed trades')

# サンプルメトリクスデータ
def generate_metrics():
    while True:
        trade_success.set(random.randint(10, 100))  # 成功トレード数
        trade_failure.set(random.randint(0, 10))     # 失敗トレード数
        time.sleep(5)

if __name__ == '__main__':
    start_http_server(8000)  # ポート8000でメトリクスを提供
    generate_metrics()

deployment.yamlへの追加

- name: metrics
  image: crypto_bot:latest
  command: ["python", "metrics.py"]
  ports:
  - containerPort: 8000

Prometheusのターゲット設定

scrape_configs:
  - job_name: 'crypto-bot'
    static_configs:
      - targets: ['metrics:8000']

3. 完了後の確認

Secretsの確認

kubectl get secrets

Prometheusのターゲット確認

kubectl get pods -l app=prometheus

Grafanaダッシュボードの確認

  • CPU使用率、メモリ使用率、APIエラー、取引数の可視化

4. 次のステップ

これで、システムの構築とセキュリティ強化が完了しました。

次は、システムの本番稼働に向けた最終準備として、以下のタスクに取り組みます。

運用ルールの確立:Botの稼働スケジュールや障害対応フローの策定
最終パフォーマンスチェック:シミュレーションと実運用の比較検証
デプロイ後の安定性確認:サーバー監視とログの確認

Yodaka

次の記事では、システムの安定稼働を確保することについてまとめます。

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

続きを見る

-Bot