Docker Compose
前提条件
デプロイ前に次の条件を確認してください:
| 前提項目 | 説明 |
|---|---|
| 監視対象ミドルウェアの準備完了 | MongoDB/MySQL/Redis/Kafka/Elasticsearch など |
| ミドルウェアのアカウント権限 | デプロイ概要を参照。MongoDB の基本収集には clusterMonitor、スロークエリ診断には対象データベースの dbAdmin も必要です(運用プラットフォームが profiling を有効化)。完全な例はデータソースを参照 |
| リソース | 4C/8G/100G 以上のディスク |
監視範囲:ホストリソース、上記ミドルウェアの稼働メトリクス、各マイクロサービスのログ、MongoDB スロークエリ診断、およびこれらに基づくアラート。 内部の業務データ(ワークシート内容、ユーザーデータなど)は監視しません。
手順 1:インストール先を決定
プライベートデプロイ管理ツールは /data/mingdao/script/ を専有し、書き換えます。運用プラットフォームの ops.yaml とデータボリュームを同じ場所に置くと、再インストールや上書きインストール時に影響する可能性があります。
独立したディレクトリ(例:/data/mingdao/mdis/)に配置し、networks セクションで対象の Docker ネットワークに接続してください。サービス名でミドルウェアにアクセスしながら、インストーラーのディレクトリから分離できます。クリーンアップ、バックアップ、専用データディスクのマウントもこのディレクトリだけを対象にでき、製品の業務データベースと混在させず誤削除のリスクを減らします。
まず製品サービスのネットワーク名を確認します(通常は script_default):
docker network ls
手順 2:イメージを取得(オフラインパッケージ)
docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/ops-allinone:1.5.12
手順 3:設定ファイルを作成
mkdir -p /data/mingdao/mdis && cat > /data/mingdao/mdis/ops.yaml <<\EOF
x-ops-image: &ops_image registry.cn-hangzhou.aliyuncs.com/mdpublic/ops-allinone:1.5.12 # 全サービスで共有し、ROLE でロールを区別
x-common-env: &common_env
TZ: "Asia/Shanghai"
ENV_OPS_TOKEN: "your-ops-access-token-change-me" # アクセストークン。初回デプロイ時に必ず変更
# ENV_OPS_SUB_PATH: /mdis # リバースプロキシのサブパス使用時に設定。ポート直接接続時は削除
# ⚠️ 監視対象(MySQL/MongoDB/Redis/Kafka/Elasticsearch/ホスト/
# カスタムページ)は本ファイルでは設定しません。デプロイ後に「データソース」で追加、
# または YAML テンプレートで一括インポート(個別接続テストあり)。収集設定の説明を参照。
ENV_PROMETHEUS_SERVER: "http://ops-prometheus:9090"
# アラートサブシステム(1.4.0)
ENV_OPS_MONGODB_URI: "mongodb://ops-mongo:27017" # アラート専用ストレージ
ENV_MONGODB_COLLECTION_PREFIX: "mdis_"
ENV_ALERT_CRYPTO_KEY: "change-me-to-32-byte-secret" # 認証情報の暗号化キー。必ずランダム文字列に変更
services:
gateway:
image: *ops_image
restart: always
ports:
- "48881:48881"
environment:
<<: *common_env
ROLE: gateway
depends_on:
- ops-prometheus
- ops-grafana
- ops-loki
- ops-tempo
- ops-alloy
- ops-mongo
ops-prometheus:
image: *ops_image
restart: always
volumes:
- ./volume/data/mdis/prometheus/:/data/mdis/prometheus/
environment:
<<: *common_env
ROLE: prometheus
ops-grafana:
image: *ops_image
restart: always
volumes:
- ./volume/data/mdis/grafana/:/data/mdis/grafana/
environment:
<<: *common_env
ROLE: grafana
GF_SECURITY_ALLOW_EMBEDDING: "true"
GF_AUTH_ANONYMOUS_ENABLED: "true"
GF_AUTH_ANONYMOUS_ORG_ROLE: Editor
GF_SECURITY_COOKIE_SAMESITE: lax
GF_USERS_DEFAULT_THEME: light
ops-loki:
image: *ops_image
restart: always
ports:
- "3100:3100" # サービス側からのログ送信用。同一ホストの場合は削除可能
volumes:
- ./volume/data/mdis/loki/:/data/mdis/loki/
environment:
ROLE: loki
ENV_LOKI_RETENTION: "720h" # ログ保持期間。デフォルト 30 日
# オブジェクトストレージにログを保存(任意。未設定時はコンテナのローカルファイルシステム)。endpoint はこのネットワークで名前解決できる
# アドレスを指定。MinIO が別ネットワーク(別 stack やホスト上など)の場合はホスト IP +
# ホスト公開ポートを指定。コンテナ名を使うと no such host になります。
# MinIO / US3 は path style(true)、Tencent Cloud COS は virtual-hosted のみ対応し false が必須。
# ENV_S3_ENDPOINT: "http://192.168.1.12:9000"
# ENV_S3_BUCKET: "mdis-loki"
# ENV_S3_ACCESS_KEY: "your-access-key"
# ENV_S3_SECRET_KEY: "your-secret-key"
# ENV_S3_FORCE_PATH_STYLE: "true"
ops-tempo:
image: *ops_image
restart: always
volumes:
- ./volume/data/mdis/tempo/:/data/mdis/tempo/
environment:
ROLE: tempo
ENV_TEMPO_RETENTION: "720h" # トレース保持期間。デフォルト 30 日
# 注:スタンドアロンにはトレース機能がないため、ここではオブジェクトストレージを設定しません。クラスターの場合は Kubernetes 文書を参照。
ops-alloy:
image: *ops_image
restart: always
ports:
# Alloy の OTLP 受信ポート。スタンドアロンではトレースデータは発生しません(前提条件を参照)。
# この 2 ポートは通常使用しないため、競合する場合は削除できます。
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./volume/data/mdis/alloy/:/data/mdis/alloy/
environment:
ROLE: alloy
ENV_TEMPO_GRPC_URL: "http://ops-tempo:4317"
ENV_PROMETHEUS_REMOTE_WRITE_URL: "http://ops-prometheus:9090/prometheus/server/api/v1/write"
ENV_LOKI_PUSH_URL: "http://ops-loki:3100/loki/api/v1/push"
# アラート専用 MongoDB(1.4.0 で追加。ルール/状態/履歴/チャンネル/データソースを保存し、監視対象から分離)
ops-mongo:
image: *ops_image
restart: always
environment:
ROLE: mongo
volumes:
- ./volume/data/mdis/mongo/:/data/mdis/mongo
agent:
image: *ops_image
restart: always
environment:
<<: *common_env
ROLE: agent
nodeagent:
image: *ops_image
restart: always
volumes:
- /:/host:ro,rslave
network_mode: host
pid: host
environment:
<<: *common_env
ROLE: nodeagent
# マイクロサービスのネットワークを共用し、サービス名(sc など)で監視対象に接続します。
# name に docker network ls で確認した実際のマイクロサービスネットワーク名を指定。
networks:
default:
external: true
name: script_default
EOF
手順 4:起動とアクセス
docker compose -f /data/mingdao/mdis/ops.yaml up -d # 起動
docker compose -f /data/mingdao/mdis/ops.yaml down # 停止
ブラウザーで http://デプロイサーバーIP:48881 にアクセスします。ログイン Token は ops.yaml の ENV_OPS_TOKEN です。
手順 5:検証
デプロイ後は同梱のエンドツーエンド回帰テストスクリプトを実行し、全体の動作を確認することを推奨します:
pip install playwright && playwright install chromium
python3 mdis_regression.py --base http://<ホストIP>:48881 --token <ENV_OPS_TOKEN>
終了コード 0 は全項目成功です。問題がある場合はまず UI の「データソース」の収集状態を確認し、よくある質問を参照してください。
デプロイ後の連携
監視対象を登録
設定の入口は UI の「データソース」に統一されています。 ops.yaml は運用プラットフォーム自体の依存関係のみを記述し、監視対象は記述しません。
データソースの追加、パスワード変更、有効化/無効化はデータソースページで行います。変更は 30 秒以内に反映され、コンテナ再起動は不要です。
一括接続
複数インスタンスをまとめて接続する場合は、右上の「一括インポート」を使います:
- 「YAML テンプレートをダウンロード」。各タイプにコメント付きのサンプルがあります。
- 現在の環境の接続アドレスに変更してアップロードします。
- まず「検証のみ」を推奨します。形式チェックと個別の接続確認のみを行い、データは書き込みません。
- 問題がないことを確認して「インポート」を実行します。
「タイプ + 名前」で冪等性を確保し、同名項目は新規作成ではなく更新するため、同じファイルを繰り返し利用できます。既存項目の更新時にパスワードが空欄なら元の値を維持します。接続失敗でもインポートは妨げられず(先に設定を保存し、後からサービスを起動できます)、結果に項目ごとの異常を表示します。
自動デプロイでは画面を経由せず API を直接呼び出せます:
curl -X POST "http://デプロイサーバーIP:48881/api/alert/sources/import" \
-H "Content-Type: application/yaml" \
--data-binary @datasources.yaml
サービスログとトレースの連携
- サービスログ:構造化ログを送信するにはマイクロサービス側に
ENV_LOKI_URLを設定します。スタンドアロンではhttp://運用プラットフォームのホストIP:3100を指定します。詳細はサービスログ連携を参照してください。 - コンテナログ:デプロイ後に自動収集され、設定は不要です。
- トレース:クラスターデプロイ向けで、スタンドアロンは現在非対応です。
その他の機能
- Node Exporter:別のサーバーを監視
- オブジェクトストレージ:ローカル ディスクの制限を受けずにログを長期保持
- 機能紹介:リソース監視、アラート、ログ検索、スロークエリ診断の使い方