メインコンテンツへ移動

Docker Compose

前提条件​

デプロイ前に次の条件を確認してください:

前提項目説明
監視対象ミドルウェアの準備完了MongoDB/MySQL/Redis/Kafka/Elasticsearch など
ミドルウェアのアカウント権限デプロイ概要を参照。MongoDB の基本収集には clusterMonitor、スロークエリ診断には対象データベースの dbAdmin も必要です(運用プラットフォームが profiling を有効化)。完全な例はデータソースを参照
リソース4C/8G/100G 以上のディスク

監視範囲:ホストリソース、上記ミドルウェアの稼働メトリクス、各マイクロサービスのログ、MongoDB スロークエリ診断、およびこれらに基づくアラート。 内部の業務データ(ワークシート内容、ユーザーデータなど)は監視しません。

手順 1:インストール先を決定​

管理ツールのディレクトリと共用しないでください

プライベートデプロイ管理ツールは /data/hap/script/ を専有し、書き換えます。運用プラットフォームの ops.yaml とデータボリュームを同じ場所に置くと、再インストールや上書きインストール時に影響する可能性があります。

独立したディレクトリ(例:/data/hap/mdis/)に配置し、networks セクションで対象の Docker ネットワークに接続してください。サービス名でミドルウェアにアクセスしながら、インストーラーのディレクトリから分離できます。クリーンアップ、バックアップ、専用データディスクのマウントもこのディレクトリだけを対象にでき、製品の業務データベースと混在させず誤削除のリスクを減らします。

まず製品サービスのネットワーク名を確認します(通常は script_default):

docker network ls

手順 2:イメージを取得(オフラインパッケージ)​

docker pull nocoly/ops-allinone:1.5.12

手順 3:設定ファイルを作成​

mkdir -p /data/hap/mdis && cat > /data/hap/mdis/ops.yaml <<\EOF
x-ops-image: &ops_image nocoly/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/hap/mdis/ops.yaml up -d # 起動
docker compose -f /data/hap/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 秒以内に反映され、コンテナ再起動は不要です。

一括接続​

複数インスタンスをまとめて接続する場合は、右上の「一括インポート」を使います:

  1. 「YAML テンプレートをダウンロード」。各タイプにコメント付きのサンプルがあります。
  2. 現在の環境の接続アドレスに変更してアップロードします。
  3. まず「検証のみ」を推奨します。形式チェックと個別の接続確認のみを行い、データは書き込みません。
  4. 問題がないことを確認して「インポート」を実行します。

「タイプ + 名前」で冪等性を確保し、同名項目は新規作成ではなく更新するため、同じファイルを繰り返し利用できます。既存項目の更新時にパスワードが空欄なら元の値を維持します。接続失敗でもインポートは妨げられず(先に設定を保存し、後からサービスを起動できます)、結果に項目ごとの異常を表示します。

自動デプロイでは画面を経由せず 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 を指定します。詳細はサービスログ連携を参照してください。
  • コンテナログ:デプロイ後に自動収集され、設定は不要です。
  • トレース:クラスターデプロイ向けで、スタンドアロンは現在非対応です。

その他の機能​