< back to blog

CSGOの監視– Prometheusにおける Counter-Strike : Global Offensive

清水 孝郎
CSGOの監視– Prometheusにおける Counter-Strike : Global Offensive
Published by:
清水 孝郎
@
CSGOの監視– Prometheusにおける Counter-Strike : Global Offensive
Published:
December 24, 2021
シスディグによるファルコフィード

Falco Feedsは、オープンソースに焦点を当てた企業に、新しい脅威が発見されると継続的に更新される専門家が作成したルールにアクセスできるようにすることで、Falcoの力を拡大します。

さらに詳しく

本文の内容は、2021年12月23日にJesus Ángel Samitierが投稿したブログ(https://sysdig.com/blog/monitor-csgo/)を元に日本語に翻訳・再構成した内容となっております。

もうすぐクリスマスです!束の間の時間で Counter-Strike: Global Offensive (CSGO)をプレイしていることでしょう。もしかすると、ご自分の専用サーバーでプレイされているかもしれません。もしそうなら、ゲームを監視する方法を知りたいのではないでしょうか?

この記事では、CSGO サーバーをインストールして、それを監視する方法と、それが実行されているインスタンスについて説明します。

Prometheusはもちろんですが、どのようなエクスポーターですか?

Illustration showing a red haired person playing a first person shooter like videogame, with some lines (metrics) flowing into a cloud with the Prometheus logo on it

赤髪の人物がファーストパーソンシューターのようなビデオゲームをプレイしている様子と、Prometheusのロゴが入った雲に流れていく線(メトリクス)が描かれたイラスト。

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サービスですぐに監視を始めましょう!

About the author

オープンソース
モニタリング

セキュリティの専門家と一緒に、クラウド防御の最適な方法を探索しよう