本文の内容は、2021年12月23日に
もうすぐクリスマスです!束の間の時間で Counter-Strike: Global Offensive (CSGO)をプレイしていることでしょう。もしかすると、ご自分の専用サーバーでプレイされているかもしれません。もしそうなら、ゲームを監視する方法を知りたいのではないでしょうか?
この記事では、CSGO サーバーをインストールして、それを監視する方法と、それが実行されているインスタンスについて説明します。
Prometheusはもちろんですが、どのようなエクスポーターですか?
- SRCDS Gameserver Prometheus exporter、CSGOサーバー用です。
- CAdvisor インスタンスのリソース使用状況を分析するためのものです。
- Node Exporterは、インスタンスのOSメトリクスを取得するためのものです。
CSGOサーバー、Prometheus、エクスポーターのインストール方法
今回のプロジェクトでは、EC2インスタンスに空のUbuntu 20.04 LTSインスタンスを使用し、DockerとDocker Composeを使ってCSGOサーバー、Prometheus、exportersを起動しました。なお、Dockerをインストールする必要があります。今回のシナリオでは、Ubuntuのインストール手順に従いました。
コンテナの設定と起動
まず、Prometheusの設定ファイルを書きましょう。prometheus
フォルダーを作成し、その中にprometheus.yaml
ファイルを記述します。これがその内容です:global: external_labels: origin: prometheus-ec2-csgo scrape_configs: - job_name: prometheus static_configs: - targets: - localhost:9090 - localhost:9100 - localhost:8080 - localhost:9137
次に、CSGOサーバーの設定を行います。
srcds.yaml
ファイルを作成し、以下の内容を記述します:options: connectTimeout: 60s cacheExpiration: 15s cacheCleanupInterval: 11s servers: csgo: address: localhost:27015 rconPassword: <CHANGE ME>
ここで、
docker-compose.yaml
を見てみましょう:version: "3.3" services: csgo: image: timche/csgo container_name: csgo-ds environment: CSGO_GSLT: <STEAM TOKEN> CSGO_HOSTNAME: CSGOSERVER CSGO_PW: <CHANGE ME> CSGO_RCON_PW: <CHANGE ME> CSGO_PORT: 27017 volumes: - type: bind source: /opt/csgo/csgo-data/ target: /opt/app/static network_mode: host restart: unless-stopped csgo-updater: image: timche/csgo-updater container_name: csgo-updater volumes: - type: bind source: /var/run/docker.sock target: /var/run/docker.sock prometheus: image: quay.io/prometheus/prometheus:v2.31.1 container_name: prometheus volumes: - ./prometheus/:/etc/prometheus/ - /opt/prometheus/prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yaml' - '--storage.tsdb.path=/prometheus' network_mode: host cadvisor: image: gcr.io/cadvisor/cadvisor volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - 8080:8080 restart: always deploy: mode: global node-exporter: image: prom/node-exporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - --collector.filesystem.ignored-mount-points - "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)" ports: - 9100:9100 restart: always csgo-exporter: image: quay.io/galexrt/srcds_exporter:v0.0.1 container_name: csgo-exporter command: ["/bin/srcds_exporter", "--config.file","/tmp/csgo/srcds.yaml"] network_mode: host volumes: - type: bind source: /home/ubuntu/srcds.yaml target: /tmp/csgo/srcds.yaml
パスワードの変更を忘れずに、 <CHANGE ME>
の文字列を置き換えます。また、スチームトークンを作成し、CSGOサーバー設定用YAMLの <STEAM TOKEN>
スロットに配置します。
あとは、以下ですべてのコンテナを起動するだけです:
docker-compose up -d
すべてが問題ないかどうかは、どのコンテナが稼働しているかを確認することでわかります。
docker ps
Prometheus ダッシュボードの確認
通常、クラウド・インスタンスを作成する際、ポートはデフォルトでは公開されていませんし、セキュリティ上の理由からも公開はしません。ここでは、ローカルマシンへのポートフォワードを使って、Prometheus ダッシュボードに安全にアクセスしてみましょう。ssh -f -N -i "<Path of your PEM file>" -L 9090:localhost:9090 <instance user>@<instance ip>
ブラウザで
localhost:9090
と入力してください。CSGO メトリクス
ゲーム内のヒューマンプレイヤーの数はsrcds_playercount_humans
を使って取得できます。ゲーム内のボットプレイヤーの数を知るには、
srcds_playercount_bots
をご利用ください。また、サーバーの使用率を計算するには、次のようにします。
srcds_playercount_humans{server=~$server}/ srcds_playercount_limit{server=~$server}
現在プレイされているマップを確認するには、
srcds_map
を使用してください。インスタンス・メトリクス
CSGOのモニタリングは便利ですが、クラウド・インスタンスでのパフォーマンスを把握することも必要です。これらのメトリクスから貴重な知識を得ることができます。例えば、実際に必要としているよりも強力なマシンを使用しているかもしれません。そうすれば、お金を節約するのに役立つかもしれませんね。
メモリ
まず、インスタンスで使用されているメモリの量をパーセンテージで見てみましょう。100 - ((node_memory_MemAvailable_bytes * 100) / node_memory_MemTotal_bytes)
もう一つの興味深い指標は、CSGOサーバコンテナが使用するメモリ(秒単位)です。
container_memory_usage_bytes{name="csgo-ds"}
CPU
コンテナの全体的な CPU 使用率がどの程度か、パーセンテージで確認してみましょう。言い換えれば、CPUがどれだけビジー状態かということです。(((count(count(node_cpu_seconds_total) by (cpu))) - avg(sum by (mode)(irate(node_cpu_seconds_total{mode='idle'}[5m])))) * 100) / count(count(node_cpu_seconds_total) by (cpu))
ここで、CSGO サーバーコンテナがどれだけの CPU を使用しているかを確認します。
rate(container_cpu_user_seconds_total{name="csgo-ds"}[5m])
待てよ、レイテンシーはどうした!?
クライアントはサーバにUDPで接続しているので、サーバは通信のレイテンシーを知ることができないので、レイテンシーを測定していません。対戦開始!
この記事では、CSGO サーバーをクラウドインスタンスにインストールする方法と、インスタンスと一緒に Prometheus で監視する方法を学びました。
また、このプロジェクトで最も興味深いメトリクスのリストもお読みいただきました。さあ、友達と対戦を始めて、クリスマス休暇を楽しみましょう。メリークリスマス、ハッピーニューイヤー!
今すぐSysdig Monitorの無料トライアルに登録して、SysdigのマネージドPrometheusサービスですぐに監視を始めましょう!