Closed10

isucon12予選過去問をやる

dyoshikawadyoshikawa

環境構築は下記と同じ。

isucon11-qualifyをAWS環境に建ててみる

環境

  • M1 Mac端末

AWSでパブリックAMIからEC2インスタンスを起動

セキュリティグループを作成

インバウンド、アウトバウンド共にすべてのトラフィックを許可するセキュリティグループを作成しておく(あくまで検証用の設定。実務ではちゃんと絞るべきもの)。VPCやサブネットはデフォルトのものを使う。

AMIからEC2インスタンス起動

AWSマネジメントコンソールでEC2を開く。メニューからAMIを選択しパブリックイメージ→ ami-0734085295d5c2e92aws-isucon一覧にあるisucon12-qualify AMIの識別子)を入力し検索。

すると目当てのAMIが1件ヒットするのでそこからEC2インスタンスを起動する。

  • 今回はインスタンスタイプ t2.meduim を選択
  • ネットワーク周りはセキュリティグループ以外はデフォルトの値のままにする
    • セキュリティグループは先ほど作成した全許可のものをセットする
  • isucon12-qualify という名前(何でも良い)でKey pairを作成しpemファイルをダウンロードしておく

上記設定で起動ボタンを押下。

EC2インスタンスに割り振られたドメインを控えておく。

sshする

ダウンロードしたpemファイルを ~/.ssh に置く。pemの権限を適切に設定しておく。

mv ~/Downloads/isucon-practice.pem ~/.ssh/
chmod 400 ~/.ssh/isucon-practice.pem

参考: https://qiita.com/mountcedar/items/43157ff1225c56500655

先ほど控えたドメインにubuntuユーザでsshする。

ssh -i ~/.ssh/isucon-practice.pem ubuntu@ec2-xx-xx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
sudo su - isucon

ベンチマークする

cd bench
./bench
dyoshikawadyoshikawa

モニタリングツールを入れていく。
Prometheusを入れてみる。

まずはローカルでWeb UIを見れるようにしてみる。

prometheus/prometheus: The Prometheus monitoring system and time series database.

DockerでPrometheusを立ち上げる。

docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus

以下のエラーが発生。

docker: Error: remote trust data does not exist for docker.io/prom/prometheus: notary.docker.io does not have trust data for docker.io/prom/prometheus.
See 'docker run --help'.

dockerでWhalesayイメージがpull(run)できない時の対処法 - Qiita

~/.zshrc に以下を追記。セキュリティ的には非推奨の設定と思われるが、ISUCON練習目的ということで割り切る。

export DOCKER_CONTENT_TRUST=0

doker runを再実行すると成功。

http://localhost:9090 を開くとWeb UIが見れる。

dyoshikawadyoshikawa

続いてEC2インスタンス側にnode_exporterを入れたい。

prometheus/node_exporter: Exporter for machine metrics
Prometheusの監視対象サーバにnode_exporterをセットアップする手順

インスタンスにsshした状態で以下を実行。

curl -OL https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xzvf node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
sudo mv node_exporter /usr/local/bin/

以後、 node_exporter コマンドが使えるようになる。

dyoshikawadyoshikawa

セキュリティグループ・ネットワークACLを、ローカルから9100ポートにアクセスできる状態にしておく。

インスタンスで node_exporter を実行した状態で、ローカルから

curl {インスタンスIP}:9100

を実行して疎通確認。

    <header>
      <h1>Node Exporter</h1>
    </header>

などが表示されればOK。

dyoshikawadyoshikawa

http://localhost:3000 にアクセスしGrafanaを開く。IDとPW admin でログインする。

まずはDatasourceを作成する。

  1. トップページからDatasourceを選択
  2. Prometheusを選択
  3. URLに http://host.docker.internal:9090 を入力しSave&Testを押下

http://host.docker.internal:9090 については以下のIssueより。

Error reading Prometheus: Post "http://localhost:9090/api/v1/query": dial tcp 127.0.0.1:9090: connect: connection refused · Issue #46434 · grafana/grafana

続いてDashboardを作成する。

  1. 左メニューを開きDashboardsを選択
  2. New->Importを選択。 https://grafana.com/grafana/dashboards/1860-node-exporter-full を使用したいのでImport via grafana.comに 1860 を入力。Loadを押下
  3. Datasourceに先程作成したものを選択しImportを押下
このスクラップは2023/12/27にクローズされました